From 9b470eb27f7f1673ae6ad0f74bb2c5a9d6da06d7 Mon Sep 17 00:00:00 2001
From: Himadri Sekhar Basu <41947504+hsbasu@users.noreply.github.com>
Date: Sun, 10 Jul 2022 17:16:44 +0530
Subject: [PATCH] Add gnome-shell theme for mamolinux (#17)
- Copy from yaru
- Modify panel to provide different colours in panel
---
Makefile | 3 +-
common/accent-colors.scss.in | 38 ++
common/colorize-dummy-svg.py | 93 ++++
common/meson.build | 14 +
common/sass-utils.scss | 103 +++++
common/test-sass-utils.scss | 98 +++++
common/yaru-colors-defs.scss | 43 ++
debian/compat | 1 -
debian/control | 26 +-
debian/files | 1 +
debian/gbp.conf | 6 +
debian/rules | 17 +-
debian/sucharu-theme-gnome-shell.alternatives | 4 +
debian/sucharu-theme-gnome-shell.install | 3 +
debian/sucharu-theme-gnome-shell.maintscript | 23 +
debian/sucharu-theme-gnome-shell.postinst | 5 +
debian/sucharu-theme-gnome-shell.postrm | 5 +
debian/sucharu-theme-gnome-shell.preinst | 5 +
debian/sucharu-theme-gnome-shell.prerm | 5 +
gnome-shell/gnome-shell-sync.sh | 126 ++++++
gnome-shell/gresources-xml-parser.py | 41 ++
gnome-shell/meson.build | 9 +
gnome-shell/src/README.md | 32 ++
gnome-shell/src/calendar-today-light.svg | 1 +
gnome-shell/src/calendar-today.svg | 1 +
gnome-shell/src/colorable-assets/README.md | 5 +
.../src/colorable-assets/checkbox-focused.svg | 1 +
.../colorable-assets/checkbox-off-focused.svg | 1 +
.../src/colorable-assets/checkbox-off.svg | 1 +
gnome-shell/src/colorable-assets/checkbox.svg | 1 +
.../src/colorable-assets/toggle-off-hc.svg | 1 +
.../src/colorable-assets/toggle-off.svg | 1 +
.../src/colorable-assets/toggle-on-hc.svg | 1 +
.../src/colorable-assets/toggle-on.svg | 1 +
gnome-shell/src/dash-placeholder.svg | 1 +
.../src/data/gnome-shell-icons.gresource.xml | 32 ++
.../src/data/gnome-shell-theme.gresource.xml | 6 +
.../apps/org.gnome.Shell.Extensions.svg | 1 +
.../org.gnome.Shell.Extensions-symbolic.svg | 5 +
.../actions/carousel-arrow-next-symbolic.svg | 1 +
.../carousel-arrow-previous-symbolic.svg | 1 +
.../icons/scalable/actions/color-pick.svg | 94 ++++
.../actions/pointer-double-click-symbolic.svg | 4 +
.../actions/pointer-drag-symbolic.svg | 4 +
.../pointer-primary-click-symbolic.svg | 4 +
.../pointer-secondary-click-symbolic.svg | 4 +
.../actions/preview-close-symbolic.svg | 1 +
.../actions/record-screen-symbolic.svg | 1 +
.../actions/screencast-recorded-symbolic.svg | 1 +
.../actions/screenshot-recorded-symbolic.svg | 1 +
.../actions/screenshot-ui-area-symbolic.svg | 1 +
.../screenshot-ui-display-symbolic.svg | 1 +
.../screenshot-ui-show-pointer-symbolic.svg | 1 +
.../actions/screenshot-ui-window-symbolic.svg | 1 +
.../status/keyboard-caps-lock-symbolic.svg | 1 +
.../status/keyboard-enter-symbolic.svg | 1 +
.../status/keyboard-hide-symbolic.svg | 1 +
.../keyboard-layout-filled-symbolic.svg | 1 +
.../status/keyboard-layout-symbolic.svg | 1 +
.../status/keyboard-shift-symbolic.svg | 1 +
.../status/message-indicator-symbolic.svg | 1 +
.../scalable/status/no-events-symbolic.svg | 1 +
.../status/no-notifications-symbolic.svg | 1 +
.../screen-privacy-disabled-symbolic.svg | 1 +
.../status/screen-privacy-symbolic.svg | 1 +
.../icons/scalable/status/stop-symbolic.svg | 1 +
gnome-shell/src/gnome-shell-sass/COPYING | 339 ++++++++++++++
gnome-shell/src/gnome-shell-sass/NEWS | 0
gnome-shell/src/gnome-shell-sass/README.md | 16 +
gnome-shell/src/gnome-shell-sass/_colors.scss | 83 ++++
gnome-shell/src/gnome-shell-sass/_common.scss | 235 ++++++++++
gnome-shell/src/gnome-shell-sass/_dock.scss | 416 ++++++++++++++++++
.../src/gnome-shell-sass/_drawing.scss | 321 ++++++++++++++
.../_high-contrast-colors.scss | 47 ++
.../src/gnome-shell-sass/_palette.scss | 41 ++
gnome-shell/src/gnome-shell-sass/_tweaks.scss | 5 +
.../src/gnome-shell-sass/_widgets.scss | 62 +++
.../gnome-shell-sass/gnome-shell-sass.doap | 37 ++
.../src/gnome-shell-sass/widgets/_a11y.scss | 24 +
.../gnome-shell-sass/widgets/_app-grid.scss | 158 +++++++
.../src/gnome-shell-sass/widgets/_base.scss | 18 +
.../gnome-shell-sass/widgets/_buttons.scss | 6 +
.../gnome-shell-sass/widgets/_calendar.scss | 262 +++++++++++
.../gnome-shell-sass/widgets/_check-box.scss | 18 +
.../widgets/_corner-ripple.scss | 15 +
.../src/gnome-shell-sass/widgets/_dash.scss | 78 ++++
.../gnome-shell-sass/widgets/_dialogs.scss | 167 +++++++
.../gnome-shell-sass/widgets/_entries.scss | 33 ++
.../gnome-shell-sass/widgets/_hotplug.scss | 10 +
.../gnome-shell-sass/widgets/_ibus-popup.scss | 36 ++
.../gnome-shell-sass/widgets/_keyboard.scss | 153 +++++++
.../widgets/_login-dialog.scss | 233 ++++++++++
.../widgets/_looking-glass.scss | 148 +++++++
.../widgets/_message-list.scss | 176 ++++++++
.../src/gnome-shell-sass/widgets/_misc.scss | 67 +++
.../widgets/_network-dialog.scss | 48 ++
.../widgets/_notifications.scss | 76 ++++
.../src/gnome-shell-sass/widgets/_osd.scss | 70 +++
.../gnome-shell-sass/widgets/_overview.scss | 13 +
.../src/gnome-shell-sass/widgets/_panel.scss | 208 +++++++++
.../gnome-shell-sass/widgets/_popovers.scss | 204 +++++++++
.../widgets/_screen-shield.scss | 76 ++++
.../gnome-shell-sass/widgets/_screenshot.scss | 202 +++++++++
.../gnome-shell-sass/widgets/_scrollbars.scss | 29 ++
.../widgets/_search-entry.scss | 26 ++
.../widgets/_search-results.scss | 96 ++++
.../src/gnome-shell-sass/widgets/_slider.scss | 25 ++
.../widgets/_switcher-popup.scss | 71 +++
.../gnome-shell-sass/widgets/_switches.scss | 16 +
.../widgets/_window-picker.scss | 54 +++
.../widgets/_workspace-switcher.scss | 25 ++
.../widgets/_workspace-thumbnails.scss | 31 ++
gnome-shell/src/gnome-shell-start.svg | 1 +
gnome-shell/src/gnome-shell.scss.in | 77 ++++
gnome-shell/src/install-shell.sh | 9 +
gnome-shell/src/meson.build | 299 +++++++++++++
gnome-shell/src/process-working.svg | 1 +
gnome-shell/src/running-indicator.svg | 1 +
gnome-shell/src/workspace-placeholder.svg | 1 +
gnome-shell/upstream/README.md | 32 ++
gnome-shell/upstream/calendar-today-light.svg | 1 +
gnome-shell/upstream/calendar-today.svg | 1 +
.../upstream/colorable-assets/README.md | 5 +
.../colorable-assets/checkbox-focused.svg | 1 +
.../colorable-assets/checkbox-off-focused.svg | 1 +
.../colorable-assets/checkbox-off.svg | 1 +
.../upstream/colorable-assets/checkbox.svg | 1 +
.../colorable-assets/toggle-off-hc.svg | 1 +
.../upstream/colorable-assets/toggle-off.svg | 1 +
.../colorable-assets/toggle-on-hc.svg | 1 +
.../upstream/colorable-assets/toggle-on.svg | 1 +
gnome-shell/upstream/dash-placeholder.svg | 1 +
.../data/gnome-shell-icons.gresource.xml | 32 ++
.../data/gnome-shell-theme.gresource.xml | 6 +
.../apps/org.gnome.Shell.Extensions.svg | 1 +
.../org.gnome.Shell.Extensions-symbolic.svg | 5 +
.../actions/carousel-arrow-next-symbolic.svg | 1 +
.../carousel-arrow-previous-symbolic.svg | 1 +
.../icons/scalable/actions/color-pick.svg | 94 ++++
.../actions/pointer-double-click-symbolic.svg | 4 +
.../actions/pointer-drag-symbolic.svg | 4 +
.../pointer-primary-click-symbolic.svg | 4 +
.../pointer-secondary-click-symbolic.svg | 4 +
.../actions/preview-close-symbolic.svg | 1 +
.../actions/record-screen-symbolic.svg | 1 +
.../actions/screencast-recorded-symbolic.svg | 1 +
.../actions/screenshot-recorded-symbolic.svg | 1 +
.../actions/screenshot-ui-area-symbolic.svg | 1 +
.../screenshot-ui-display-symbolic.svg | 1 +
.../screenshot-ui-show-pointer-symbolic.svg | 1 +
.../actions/screenshot-ui-window-symbolic.svg | 1 +
.../status/keyboard-caps-lock-symbolic.svg | 1 +
.../status/keyboard-enter-symbolic.svg | 1 +
.../status/keyboard-hide-symbolic.svg | 1 +
.../keyboard-layout-filled-symbolic.svg | 1 +
.../status/keyboard-layout-symbolic.svg | 1 +
.../status/keyboard-shift-symbolic.svg | 1 +
.../status/message-indicator-symbolic.svg | 1 +
.../scalable/status/no-events-symbolic.svg | 1 +
.../status/no-notifications-symbolic.svg | 1 +
.../screen-privacy-disabled-symbolic.svg | 1 +
.../status/screen-privacy-symbolic.svg | 1 +
.../icons/scalable/status/stop-symbolic.svg | 1 +
gnome-shell/upstream/gnome-shell-sass/COPYING | 339 ++++++++++++++
gnome-shell/upstream/gnome-shell-sass/NEWS | 0
.../upstream/gnome-shell-sass/README.md | 16 +
.../upstream/gnome-shell-sass/_colors.scss | 83 ++++
.../upstream/gnome-shell-sass/_common.scss | 235 ++++++++++
.../upstream/gnome-shell-sass/_dock.scss | 416 ++++++++++++++++++
.../upstream/gnome-shell-sass/_drawing.scss | 321 ++++++++++++++
.../_high-contrast-colors.scss | 47 ++
.../upstream/gnome-shell-sass/_palette.scss | 41 ++
.../upstream/gnome-shell-sass/_widgets.scss | 62 +++
.../gnome-shell-sass/gnome-shell-sass.doap | 37 ++
.../gnome-shell-sass/widgets/_a11y.scss | 24 +
.../gnome-shell-sass/widgets/_app-grid.scss | 158 +++++++
.../gnome-shell-sass/widgets/_base.scss | 18 +
.../gnome-shell-sass/widgets/_buttons.scss | 6 +
.../gnome-shell-sass/widgets/_calendar.scss | 262 +++++++++++
.../gnome-shell-sass/widgets/_check-box.scss | 18 +
.../widgets/_corner-ripple.scss | 15 +
.../gnome-shell-sass/widgets/_dash.scss | 78 ++++
.../gnome-shell-sass/widgets/_dialogs.scss | 167 +++++++
.../gnome-shell-sass/widgets/_entries.scss | 33 ++
.../gnome-shell-sass/widgets/_hotplug.scss | 10 +
.../gnome-shell-sass/widgets/_ibus-popup.scss | 36 ++
.../gnome-shell-sass/widgets/_keyboard.scss | 153 +++++++
.../widgets/_login-dialog.scss | 233 ++++++++++
.../widgets/_looking-glass.scss | 148 +++++++
.../widgets/_message-list.scss | 176 ++++++++
.../gnome-shell-sass/widgets/_misc.scss | 67 +++
.../widgets/_network-dialog.scss | 48 ++
.../widgets/_notifications.scss | 76 ++++
.../gnome-shell-sass/widgets/_osd.scss | 70 +++
.../gnome-shell-sass/widgets/_overview.scss | 13 +
.../gnome-shell-sass/widgets/_panel.scss | 208 +++++++++
.../gnome-shell-sass/widgets/_popovers.scss | 204 +++++++++
.../widgets/_screen-shield.scss | 76 ++++
.../gnome-shell-sass/widgets/_screenshot.scss | 202 +++++++++
.../gnome-shell-sass/widgets/_scrollbars.scss | 29 ++
.../widgets/_search-entry.scss | 26 ++
.../widgets/_search-results.scss | 96 ++++
.../gnome-shell-sass/widgets/_slider.scss | 25 ++
.../widgets/_switcher-popup.scss | 71 +++
.../gnome-shell-sass/widgets/_switches.scss | 16 +
.../widgets/_window-picker.scss | 54 +++
.../widgets/_workspace-switcher.scss | 25 ++
.../widgets/_workspace-thumbnails.scss | 31 ++
gnome-shell/upstream/gnome-shell-start.svg | 1 +
gnome-shell/upstream/gnome-shell.scss.in | 77 ++++
gnome-shell/upstream/install-shell.sh | 9 +
gnome-shell/upstream/meson.build | 299 +++++++++++++
gnome-shell/upstream/process-working.svg | 1 +
gnome-shell/upstream/running-indicator.svg | 1 +
.../upstream/workspace-placeholder.svg | 1 +
gtksourceview/meson.build | 11 +
gtksourceview/src/dark.xml.in | 148 +++++++
gtksourceview/src/default.xml.in | 146 ++++++
gtksourceview/src/meson.build | 16 +
meson.build | 41 ++
meson_options.txt | 38 ++
221 files changed, 11233 insertions(+), 5 deletions(-)
create mode 100644 common/accent-colors.scss.in
create mode 100755 common/colorize-dummy-svg.py
create mode 100644 common/meson.build
create mode 100644 common/sass-utils.scss
create mode 100644 common/test-sass-utils.scss
create mode 100644 common/yaru-colors-defs.scss
delete mode 100644 debian/compat
create mode 100644 debian/files
create mode 100644 debian/gbp.conf
create mode 100644 debian/sucharu-theme-gnome-shell.alternatives
create mode 100644 debian/sucharu-theme-gnome-shell.install
create mode 100644 debian/sucharu-theme-gnome-shell.maintscript
create mode 100644 debian/sucharu-theme-gnome-shell.postinst
create mode 100644 debian/sucharu-theme-gnome-shell.postrm
create mode 100644 debian/sucharu-theme-gnome-shell.preinst
create mode 100644 debian/sucharu-theme-gnome-shell.prerm
create mode 100755 gnome-shell/gnome-shell-sync.sh
create mode 100755 gnome-shell/gresources-xml-parser.py
create mode 100644 gnome-shell/meson.build
create mode 100644 gnome-shell/src/README.md
create mode 100644 gnome-shell/src/calendar-today-light.svg
create mode 100644 gnome-shell/src/calendar-today.svg
create mode 100644 gnome-shell/src/colorable-assets/README.md
create mode 100644 gnome-shell/src/colorable-assets/checkbox-focused.svg
create mode 100644 gnome-shell/src/colorable-assets/checkbox-off-focused.svg
create mode 100644 gnome-shell/src/colorable-assets/checkbox-off.svg
create mode 100644 gnome-shell/src/colorable-assets/checkbox.svg
create mode 100644 gnome-shell/src/colorable-assets/toggle-off-hc.svg
create mode 100644 gnome-shell/src/colorable-assets/toggle-off.svg
create mode 100644 gnome-shell/src/colorable-assets/toggle-on-hc.svg
create mode 100644 gnome-shell/src/colorable-assets/toggle-on.svg
create mode 100644 gnome-shell/src/dash-placeholder.svg
create mode 100644 gnome-shell/src/data/gnome-shell-icons.gresource.xml
create mode 100644 gnome-shell/src/data/gnome-shell-theme.gresource.xml
create mode 100644 gnome-shell/src/data/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg
create mode 100644 gnome-shell/src/data/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/carousel-arrow-next-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/color-pick.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/pointer-double-click-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/pointer-drag-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/pointer-primary-click-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/pointer-secondary-click-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/preview-close-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/record-screen-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/screencast-recorded-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/screenshot-recorded-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/screenshot-ui-area-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/screenshot-ui-display-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/actions/screenshot-ui-window-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/status/keyboard-caps-lock-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/status/keyboard-enter-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/status/keyboard-hide-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/status/keyboard-layout-filled-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/status/keyboard-layout-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/status/keyboard-shift-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/status/message-indicator-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/status/no-events-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/status/no-notifications-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/status/screen-privacy-disabled-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/status/screen-privacy-symbolic.svg
create mode 100644 gnome-shell/src/data/icons/scalable/status/stop-symbolic.svg
create mode 100644 gnome-shell/src/gnome-shell-sass/COPYING
create mode 100644 gnome-shell/src/gnome-shell-sass/NEWS
create mode 100644 gnome-shell/src/gnome-shell-sass/README.md
create mode 100644 gnome-shell/src/gnome-shell-sass/_colors.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/_common.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/_dock.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/_drawing.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/_high-contrast-colors.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/_palette.scss
create mode 100755 gnome-shell/src/gnome-shell-sass/_tweaks.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/_widgets.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/gnome-shell-sass.doap
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_a11y.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_app-grid.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_base.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_buttons.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_calendar.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_check-box.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_corner-ripple.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_dash.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_dialogs.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_entries.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_hotplug.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_ibus-popup.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_keyboard.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_login-dialog.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_looking-glass.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_message-list.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_misc.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_network-dialog.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_notifications.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_osd.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_overview.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_panel.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_popovers.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_screen-shield.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_screenshot.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_scrollbars.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_search-entry.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_search-results.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_slider.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_switcher-popup.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_switches.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_window-picker.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_workspace-switcher.scss
create mode 100644 gnome-shell/src/gnome-shell-sass/widgets/_workspace-thumbnails.scss
create mode 100644 gnome-shell/src/gnome-shell-start.svg
create mode 100644 gnome-shell/src/gnome-shell.scss.in
create mode 100755 gnome-shell/src/install-shell.sh
create mode 100644 gnome-shell/src/meson.build
create mode 100644 gnome-shell/src/process-working.svg
create mode 100644 gnome-shell/src/running-indicator.svg
create mode 100644 gnome-shell/src/workspace-placeholder.svg
create mode 100644 gnome-shell/upstream/README.md
create mode 100644 gnome-shell/upstream/calendar-today-light.svg
create mode 100644 gnome-shell/upstream/calendar-today.svg
create mode 100644 gnome-shell/upstream/colorable-assets/README.md
create mode 100644 gnome-shell/upstream/colorable-assets/checkbox-focused.svg
create mode 100644 gnome-shell/upstream/colorable-assets/checkbox-off-focused.svg
create mode 100644 gnome-shell/upstream/colorable-assets/checkbox-off.svg
create mode 100644 gnome-shell/upstream/colorable-assets/checkbox.svg
create mode 100644 gnome-shell/upstream/colorable-assets/toggle-off-hc.svg
create mode 100644 gnome-shell/upstream/colorable-assets/toggle-off.svg
create mode 100644 gnome-shell/upstream/colorable-assets/toggle-on-hc.svg
create mode 100644 gnome-shell/upstream/colorable-assets/toggle-on.svg
create mode 100644 gnome-shell/upstream/dash-placeholder.svg
create mode 100644 gnome-shell/upstream/data/gnome-shell-icons.gresource.xml
create mode 100644 gnome-shell/upstream/data/gnome-shell-theme.gresource.xml
create mode 100644 gnome-shell/upstream/data/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg
create mode 100644 gnome-shell/upstream/data/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/carousel-arrow-next-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/color-pick.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/pointer-double-click-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/pointer-drag-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/pointer-primary-click-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/pointer-secondary-click-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/preview-close-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/record-screen-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/screencast-recorded-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/screenshot-recorded-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-area-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-display-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-window-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/status/keyboard-caps-lock-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/status/keyboard-enter-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/status/keyboard-hide-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/status/keyboard-layout-filled-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/status/keyboard-layout-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/status/keyboard-shift-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/status/message-indicator-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/status/no-events-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/status/no-notifications-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/status/screen-privacy-disabled-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/status/screen-privacy-symbolic.svg
create mode 100644 gnome-shell/upstream/data/icons/scalable/status/stop-symbolic.svg
create mode 100644 gnome-shell/upstream/gnome-shell-sass/COPYING
create mode 100644 gnome-shell/upstream/gnome-shell-sass/NEWS
create mode 100644 gnome-shell/upstream/gnome-shell-sass/README.md
create mode 100644 gnome-shell/upstream/gnome-shell-sass/_colors.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/_common.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/_dock.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/_drawing.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/_high-contrast-colors.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/_palette.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/_widgets.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/gnome-shell-sass.doap
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_a11y.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_app-grid.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_base.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_buttons.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_calendar.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_check-box.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_corner-ripple.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_dash.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_dialogs.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_entries.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_hotplug.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_ibus-popup.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_keyboard.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_login-dialog.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_looking-glass.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_message-list.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_misc.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_network-dialog.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_notifications.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_osd.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_overview.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_panel.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_popovers.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_screen-shield.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_screenshot.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_scrollbars.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_search-entry.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_search-results.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_slider.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_switcher-popup.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_switches.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_window-picker.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_workspace-switcher.scss
create mode 100644 gnome-shell/upstream/gnome-shell-sass/widgets/_workspace-thumbnails.scss
create mode 100644 gnome-shell/upstream/gnome-shell-start.svg
create mode 100644 gnome-shell/upstream/gnome-shell.scss.in
create mode 100755 gnome-shell/upstream/install-shell.sh
create mode 100644 gnome-shell/upstream/meson.build
create mode 100644 gnome-shell/upstream/process-working.svg
create mode 100644 gnome-shell/upstream/running-indicator.svg
create mode 100644 gnome-shell/upstream/workspace-placeholder.svg
create mode 100644 gtksourceview/meson.build
create mode 100644 gtksourceview/src/dark.xml.in
create mode 100644 gtksourceview/src/default.xml.in
create mode 100644 gtksourceview/src/meson.build
create mode 100644 meson.build
create mode 100644 meson_options.txt
diff --git a/Makefile b/Makefile
index 076ca3af..0786664d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,11 @@
SHELL:=/bin/bash
-all: clean buildthemes buildplankthemes
+all: buildthemes buildplankthemes
buildthemes:
@echo "Building desktop themes"
python3 generate-themes.py All
+ @wait
buildplankthemes:
@echo "Building plank themes"
diff --git a/common/accent-colors.scss.in b/common/accent-colors.scss.in
new file mode 100644
index 00000000..08bd2945
--- /dev/null
+++ b/common/accent-colors.scss.in
@@ -0,0 +1,38 @@
+@function get_accent_color($accent_color, $is_dark: false) {
+ $color: null;
+ @if $accent_color == 'default' {
+ $color: #0e8420;
+ } @else if $accent_color == 'aqua' {
+ $color: #6cabcd;
+ } @else if $accent_color == 'blue' {
+ $color: #5b73c4;
+ } @else if $accent_color == 'brown' {
+ $color: #aa876a;
+ } @else if $accent_color == 'grey' {
+ $color: #9d9d9d;
+ } @else if $accent_color == 'orange' {
+ $color: #E95420;
+ } @else if $accent_color == 'pink' {
+ $color: #c76199;
+ } @else if $accent_color == 'purple' {
+ $color: #8c6ec9;
+ } @else if $accent_color == 'red' {
+ $color: #DA3450;
+ } @else if $accent_color == 'sand' {
+ $color: #c8ac69;
+ } @else if $accent_color == 'teal' {
+ $color: #5aaa9a;
+ } @else {
+ @error('No known accent color defined!');
+ }
+ @debug('Using accent color ' + $accent_color + ': ' + $color);
+ @return $color;
+}
+
+$yaru_is_dark_variant: @yaru_dark_variant@;
+$yaru_accent_bg_color: get_accent_color('@yaru_accent_color@', $yaru_is_dark_variant);
+$accent_bg_color: $yaru_accent_bg_color;
+$accent_color: $yaru_accent_bg_color;
+@debug("Accent color is " + $yaru_accent_bg_color);
+
+@import '@yaru_theme_entry_point@'
diff --git a/common/colorize-dummy-svg.py b/common/colorize-dummy-svg.py
new file mode 100755
index 00000000..5b89abf3
--- /dev/null
+++ b/common/colorize-dummy-svg.py
@@ -0,0 +1,93 @@
+#!/usr/bin/env python3
+# Copyright © 2022, Canonical Ltd
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library. If not, see .
+# Authors:
+# Marco Trevisan
+
+import argparse
+import fnmatch
+import os
+
+from glob import glob
+
+# Keep this in sync with yaru-colors-defs.scss, or the input CSS in use.
+DUMMY_COLORS = {
+ 'accent-bg-color': '#00ff01',
+ 'accent-active-color': '#00ff02',
+ 'accent-border-color': '#ff0001',
+ 'accent-focused-color': '#0101ff',
+ 'bg-color': '#ffff00',
+ 'border-color': '#ff00ff',
+ 'disabled-bg-color': '#ffff02',
+ 'switch-bg-color': '#ffff01',
+ 'check-bg-color': '#ffff03',
+}
+
+def read_colors_replacements(css_file):
+ colors_replacements = {}
+
+ for l in css_file.readlines():
+ for line in l.split('//')[0].split(';'):
+ if '-yaru-' not in line:
+ continue
+
+ [named_color, color] = line.split('-yaru-', 1)[-1].split(': ')
+ colors_replacements[DUMMY_COLORS[named_color]] = color
+ print(named_color, color, f'(replaces {DUMMY_COLORS[named_color]})')
+
+ return colors_replacements
+
+def replace_colors(svg, replacements, output_folder, variant):
+ with open(svg, 'r') as f:
+ contents = f.read()
+ for dummy, color in replacements.items():
+ contents = contents.replace(dummy, color)
+
+ output_folder = os.path.abspath(output_folder)
+ basename = os.path.basename(svg).rsplit('.', 1)[0]
+ finalname = f'{basename}-{variant}.svg' if variant else f'{basename}.svg'
+ output_path = os.path.join(output_folder, finalname)
+ print(f'Processing {os.path.basename(svg)} => {output_path}')
+
+ os.makedirs(output_folder, exist_ok=True)
+ with open(output_path, 'w') as out:
+ out.write(contents)
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser()
+ parser.add_argument('yaru_colors_defs_scss', type=argparse.FileType('r'))
+ parser.add_argument('--input-file', default=None)
+ parser.add_argument('--assets-path', default='.')
+ parser.add_argument('--output-folder', default='.')
+ parser.add_argument('--variant', default=None)
+ parser.add_argument('--filter', action='append', default=[])
+ parser.add_argument('--exclude', action='append', default=[])
+
+ args = parser.parse_args()
+ replacements = read_colors_replacements(args.yaru_colors_defs_scss)
+ variant = None if args.variant == 'default' else args.variant
+
+ if args.input_file:
+ replace_colors(args.input_file, replacements,
+ args.output_folder, variant)
+ else:
+ for svg in glob(os.path.join(os.path.abspath(args.assets_path), '*.svg')):
+ if [fl for fl in args.exclude if fnmatch.fnmatch(svg, fl)]:
+ continue
+
+ if args.filter and not [fl for fl in args.filter if fnmatch.fnmatch(svg, fl)]:
+ continue
+
+ replace_colors(svg, replacements, args.output_folder, variant)
diff --git a/common/meson.build b/common/meson.build
new file mode 100644
index 00000000..e7cb7737
--- /dev/null
+++ b/common/meson.build
@@ -0,0 +1,14 @@
+colorize_dummy_svg = find_program('colorize-dummy-svg.py')
+accent_colors_definitions_scss = meson.project_source_root() / '@0@'.format(files('accent-colors.scss.in')[0])
+yaru_colors_defs_scss = meson.project_source_root() / '@0@'.format(files('yaru-colors-defs.scss')[0])
+
+sass_utils_scss = files([
+ 'sass-utils.scss',
+])
+
+test('sass-utils',
+ sassc,
+ args: [
+ files('test-sass-utils.scss'),
+ '/dev/null',
+ ])
diff --git a/common/sass-utils.scss b/common/sass-utils.scss
new file mode 100644
index 00000000..dd96b83c
--- /dev/null
+++ b/common/sass-utils.scss
@@ -0,0 +1,103 @@
+// Copyright © 2022, Canonical Ltd
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library. If not, see .
+// Authors:
+// Marco Trevisan
+
+@function str-contains($str, $substring) {
+ @return str-index($str, $substring) != null;
+}
+
+@function str-starts-with($str, $substring) {
+ @return str-index($str, $substring) == 1;
+}
+
+@function str-ends-with($str, $substring) {
+ $index: str-index($str, $substring);
+ @if ($index == null) {
+ @return false;
+ }
+
+ @return ($index + str-length($substring) - 1) == str-length($str);
+}
+
+@function str-basename($str, $divider: '/') {
+ $index: str-index($str, $divider);
+
+ @while $index != null {
+ $str: str-slice($str, $index + 1);
+ $index: str-index($str, $divider);
+ }
+
+ @return $str;
+}
+
+@function str-extension($str) {
+ $extension: str-basename($str, '.');
+ @return if($extension == $str, null, $extension);
+}
+
+@function str-dirname($str, $divider: '/') {
+ $str_copy: $str;
+ $index: str-index($str, $divider);
+ $last_index: null;
+
+ @while $index != null {
+ $str: str-slice($str, $index + 1);
+ $last_index: if($last_index, $last_index, 0) + $index;
+ $index: str-index($str, $divider);
+ }
+
+ @return if($last_index, str-slice($str_copy, 1, $last_index - 1), '.');
+}
+
+@function list-length($list) {
+ $i: 0;
+ @each $e in $list {
+ $i: $i + 1;
+ }
+
+ @return $i;
+}
+
+@function list-nth($list, $nth) {
+ $i: 0;
+
+ @if $nth < 0 {
+ $nth: list-length($list) + $nth;
+ }
+
+ @each $e in $list {
+ @if ($i == $nth) {
+ @return $e;
+ }
+
+ $i: $i + 1;
+ }
+
+ @return null;
+}
+
+@function list-index($list, $item) {
+ $i: 0;
+ @each $e in $list {
+ @if ($e == $item) {
+ @return $i;
+ }
+
+ $i: $i + 1;
+ }
+
+ @return null;
+}
diff --git a/common/test-sass-utils.scss b/common/test-sass-utils.scss
new file mode 100644
index 00000000..3d75fec3
--- /dev/null
+++ b/common/test-sass-utils.scss
@@ -0,0 +1,98 @@
+// Copyright © 2022, Canonical Ltd
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library. If not, see .
+// Authors:
+// Marco Trevisan
+
+@import 'sass-utils';
+
+@function assert($result, $expected: true) {
+ @if $result != $expected {
+ $result: if($result == null, 'null', $result);
+ $expected: if($expected == null, 'null', $expected);
+ @error "Assertion failed, expected '" + $expected + "', got '" + $result + "'";
+ }
+
+ @return ''
+}
+
+@function test($name, $result, $expected: true) {
+ @return 'Running test '+$name + assert($result, $expected);
+}
+
+@function run-test($function, $expected, $args...) {
+ @return test($function, $function($args), $expected);
+}
+
+@debug test('str-contains Empty', str-contains('', ''));
+@debug test('str-contains Empty one', str-contains('', 'foo'), false);
+@debug test('str-contains Empty substring', str-contains('foo', ''), true);
+@debug test('str-contains Valid', str-contains('foo bar baz', 'bar'), true);
+@debug test('str-contains Missing', str-contains('foo bar', 'baz'), false);
+
+@debug test('str-starts-with Empty', str-starts-with('', ''));
+@debug test('str-starts-with Empty Both', str-starts-with('foo', ''));
+@debug test('str-starts-with Valid', str-starts-with('foobar', 'foo'));
+@debug test('str-starts-with Valid full', str-starts-with('foobar', 'foobar'));
+@debug test('str-starts-with Invalid', str-starts-with('barfoo', 'foo'), false);
+
+@debug test('str-ends-with Empty', str-ends-with('', ''));
+@debug test('str-ends-with Empty Both', str-ends-with('foo', ''), false);
+@debug test('str-ends-with Valid', str-ends-with('foobar', 'bar'));
+@debug test('str-ends-with Valid full', str-ends-with('foobar', 'foobar'));
+@debug test('str-ends-with Invalid', str-ends-with('foobar', 'foo'), false);
+
+@debug test('str-basename, Empty', str-basename(''), '');
+@debug test('str-basename, Named', str-basename('foo'), 'foo');
+@debug test('str-basename, Valid', str-basename('/foo/bar'), 'bar');
+@debug test('str-basename, Valid', str-basename('/foo/bar/baz'), 'baz');
+@debug test('str-basename, Valid', str-basename('proto:///foo/bar/baz'), 'baz');
+
+@debug test('str-extension, Empty', str-extension(''), null);
+@debug test('str-extension, Named', str-extension('foo'), null);
+@debug test('str-extension, Valid', str-extension('/foo.bar'), 'bar');
+@debug test('str-extension, Valid', str-extension('/foo/bar.baz'), 'baz');
+
+@debug test('str-dirname, Empty', str-dirname(''), '.');
+@debug test('str-dirname, Named', str-dirname('foo'), '.');
+@debug test('str-dirname, Valid', str-dirname('/foo/bar'), '/foo');
+@debug test('str-dirname, Valid', str-dirname('/foo/bar/baz'), '/foo/bar');
+@debug test('str-dirname, Valid', str-dirname('proto:///foo/bar/baz'), 'proto:///foo/bar');
+
+@debug test('list-length, Empty', list-length([]), 0);
+@debug test('list-length, One', list-length([1]), 1);
+@debug test('list-length, Two', list-length([1, '2']), 2);
+
+@debug test('list-nth, Empty', list-nth([], 0), null);
+@debug test('list-nth, Empty', list-nth([], 10), null);
+@debug test('list-nth, Empty', list-nth([], -10), null);
+@debug test('list-nth, One, valid', list-nth([1], 0), 1);
+@debug test('list-nth, One, valid negative', list-nth([1], -1), 1);
+@debug test('list-nth, One, invalid', list-nth([1], 3), null);
+@debug test('list-nth, One, invalid negative', list-nth([1], -3), null);
+@debug test('list-nth, Three, valid', list-nth([1, '2', false], 0), 1);
+@debug test('list-nth, Three, valid negative', list-nth([1, '2', false], -1), false);
+@debug test('list-nth, Three, valid', list-nth([1, '2', false], 1), '2');
+@debug test('list-nth, Three, valid negative', list-nth([1, '2', false], -2), '2');
+@debug test('list-nth, Three, valid', list-nth([1, '2', false], 2), false);
+@debug test('list-nth, Three, valid negative', list-nth([1, '2', false], -3), 1);
+
+@debug test('list-index, Empty', list-index([], 0), null);
+@debug test('list-index, Empty', list-index([], 10), null);
+@debug test('list-index, Empty', list-index([], -10), null);
+@debug test('list-index, One, valid', list-index([1], 1), 0);
+@debug test('list-index, One, invalid', list-index([1], 3), null);
+@debug test('list-index, Three, valid', list-index([1, '2', false], 1), 0);
+@debug test('list-index, Three, valid', list-index([1, '2', false], '2'), 1);
+@debug test('list-index, Three, valid', list-index([1, '2', false], false), 2);
diff --git a/common/yaru-colors-defs.scss b/common/yaru-colors-defs.scss
new file mode 100644
index 00000000..0f800553
--- /dev/null
+++ b/common/yaru-colors-defs.scss
@@ -0,0 +1,43 @@
+// This file is used to define colors that are going to be used to replace
+// assets (dummy) colors via colorize-dummy-svg.py
+
+$variant: if($yaru_is_dark_variant, 'dark', 'light');
+
+@import 'colors';
+
+$yaru_colors: (
+ bg-color: $bg_color,
+ accent-bg-color: $yaru_accent_bg_color,
+ accent-active-color: $progress_bg_color,
+ accent-focused-color: if($variant == 'dark', darken($accent_bg_color, 7%), darken($accent_bg_color, 3%)),
+ border-color: $borders_color,
+ disabled-bg-color: mix($bg_color, $fg_color, 80%),
+ switch-bg-color: if($variant == 'dark', lighten($inkstone, 5%), lighten($ash, 20%)),
+ check-bg-color: if($variant == 'dark', lighten($bg_color, 2%), $porcelain),
+);
+
+$yaru_colors: map-merge($yaru_colors, (
+ accent-border-color: lighten(map-get($yaru_colors, accent-active-color), 17%),
+));
+
+@function opaque-color($color, $background: $bg_color) {
+ @if alpha($color) == 1 {
+ @return $color;
+ }
+
+ $percent: alpha($color) * 100%;
+ $opaque: opacify($color, 1);
+ $solid-color: mix($opaque, $background, $percent);
+ @return $solid-color;
+}
+
+* {
+@each $name, $color in $yaru_colors {
+ -yaru-#{$name}: #{$color};
+
+ $opaque: opaque-color($color);
+ @if $opaque != $color {
+ -yaru-#{$name}-opaque: $opaque;
+ }
+}
+};
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index b4de3947..00000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-11
diff --git a/debian/control b/debian/control
index aaf541cd..8f26fd22 100644
--- a/debian/control
+++ b/debian/control
@@ -2,10 +2,32 @@ Source: mamolinux-themes
Section: gnome
Priority: optional
Maintainer: Himadri Sekhar Basu
-Build-Depends: debhelper (>= 12), sassc, inkscape, gtk2-engines-pixbuf, gtk2-engines-murrine, gnome-themes-standard, python3
-Standards-Version: 4.5.0
+Build-Depends: debhelper-compat (= 12),
+ dh-migrations,
+Build-Depends-Indep: libglib2.0-dev,
+ meson (>= 0.50),
+ sassc,
+ inkscape,
+ gtk2-engines-pixbuf,
+ gtk2-engines-murrine,
+ gnome-themes-standard,
+ python3
+Standards-Version: 4.6.0
Homepage: https://github.com/hsbasu/mamolinux-themes
+Package: sucharu-theme-gnome-shell
+Architecture: all
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+Breaks: gnome-shell (<< 42~)
+Description: Sucharu GNOME Shell desktop theme
+ This is the GNOME Shell theme for MamoLinux
+ .
+ This package contains the GNOME Shell theme part
+ .
+ If you want to follow development, more information here:
+ https://github.com/hsbasu/mamolinux-themes/gnome-shell.
+
Package: mamolinux-themes
Architecture: any
Multi-Arch: foreign
diff --git a/debian/files b/debian/files
new file mode 100644
index 00000000..e4ca92b6
--- /dev/null
+++ b/debian/files
@@ -0,0 +1 @@
+mamolinux-themes_1.9.8mamolinux4_source.buildinfo gnome optional
diff --git a/debian/gbp.conf b/debian/gbp.conf
new file mode 100644
index 00000000..3753fe9b
--- /dev/null
+++ b/debian/gbp.conf
@@ -0,0 +1,6 @@
+[DEFAULT]
+debian-branch=master
+debian-tag=%(version)s
+
+[dch]
+multimaint-merge = True
diff --git a/debian/rules b/debian/rules
index 659a7c3f..5bb67495 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,5 +1,20 @@
#!/usr/bin/make -f
%:
- dh ${@}
+ dh ${@} --buildsystem=meson
+override_dh_auto_configure:
+ dh_auto_configure -- \
+ -Dgnome-shell-gresource=true \
+ -Dgnome-shell-user-themes-support=enabled \
+ # -Dubuntu-unity=true \
+ # -Dsessions=false \
+ # -Dxfwm4=true
+
+override_dh_auto_build:
+ make -j6 "INSTALL=install --strip-program=true"
+ dh_auto_build -O--buildsystem=meson
+
+override_dh_auto_clean:
+ make -j6 clean
+ dh_auto_clean -O--buildsystem=meson
diff --git a/debian/sucharu-theme-gnome-shell.alternatives b/debian/sucharu-theme-gnome-shell.alternatives
new file mode 100644
index 00000000..f97986c4
--- /dev/null
+++ b/debian/sucharu-theme-gnome-shell.alternatives
@@ -0,0 +1,4 @@
+Name: gdm-theme.gresource
+Link: /usr/share/gnome-shell/gdm-theme.gresource
+Alternative: /usr/share/gnome-shell/theme/Sucharu/gnome-shell-theme.gresource
+Priority: 15
diff --git a/debian/sucharu-theme-gnome-shell.install b/debian/sucharu-theme-gnome-shell.install
new file mode 100644
index 00000000..4ff4379a
--- /dev/null
+++ b/debian/sucharu-theme-gnome-shell.install
@@ -0,0 +1,3 @@
+usr/share/gnome-shell/
+usr/share/themes/Sucharu/gnome-shell
+usr/share/themes/Sucharu-*/gnome-shell
diff --git a/debian/sucharu-theme-gnome-shell.maintscript b/debian/sucharu-theme-gnome-shell.maintscript
new file mode 100644
index 00000000..f70376dd
--- /dev/null
+++ b/debian/sucharu-theme-gnome-shell.maintscript
@@ -0,0 +1,23 @@
+# See https://bugs.launchpad.net/ubuntu/+source/yaru-theme/+bug/1968405
+symlink_to_dir /usr/share/themes/Yaru/gnome-shell ../../gnome-shell/theme/Yaru 22.04.1
+
+dir_to_symlink /usr/share/themes/Yaru-bark-dark/gnome-shell ../../gnome-shell/theme/Yaru-bark-dark 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-bark/gnome-shell ../../gnome-shell/theme/Yaru-bark 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-blue-dark/gnome-shell ../../gnome-shell/theme/Yaru-blue-dark 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-blue/gnome-shell ../../gnome-shell/theme/Yaru-blue 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-dark/gnome-shell ../../gnome-shell/theme/Yaru-dark 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-magenta-dark/gnome-shell ../../gnome-shell/theme/Yaru-magenta-dark 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-magenta/gnome-shell ../../gnome-shell/theme/Yaru-magenta 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-olive-dark/gnome-shell ../../gnome-shell/theme/Yaru-olive-dark 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-olive/gnome-shell ../../gnome-shell/theme/Yaru-olive 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-prussiangreen-dark/gnome-shell ../../gnome-shell/theme/Yaru-prussiangreen-dark 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-prussiangreen/gnome-shell ../../gnome-shell/theme/Yaru-prussiangreen 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-purple-dark/gnome-shell ../../gnome-shell/theme/Yaru-purple-dark 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-purple/gnome-shell ../../gnome-shell/theme/Yaru-purple 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-red-dark/gnome-shell ../../gnome-shell/theme/Yaru-red-dark 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-red/gnome-shell ../../gnome-shell/theme/Yaru-red 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-sage-dark/gnome-shell ../../gnome-shell/theme/Yaru-sage-dark 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-sage/gnome-shell ../../gnome-shell/theme/Yaru-sage 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-viridian-dark/gnome-shell ../../gnome-shell/theme/Yaru-viridian-dark 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru-viridian/gnome-shell ../../gnome-shell/theme/Yaru-viridian 22.04.4~
+dir_to_symlink /usr/share/themes/Yaru/gnome-shell ../../gnome-shell/theme/Yaru 22.04.4~
diff --git a/debian/sucharu-theme-gnome-shell.postinst b/debian/sucharu-theme-gnome-shell.postinst
new file mode 100644
index 00000000..c1fc8b91
--- /dev/null
+++ b/debian/sucharu-theme-gnome-shell.postinst
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+set -e
+
+#DEBHELPER#
diff --git a/debian/sucharu-theme-gnome-shell.postrm b/debian/sucharu-theme-gnome-shell.postrm
new file mode 100644
index 00000000..c1fc8b91
--- /dev/null
+++ b/debian/sucharu-theme-gnome-shell.postrm
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+set -e
+
+#DEBHELPER#
diff --git a/debian/sucharu-theme-gnome-shell.preinst b/debian/sucharu-theme-gnome-shell.preinst
new file mode 100644
index 00000000..c1fc8b91
--- /dev/null
+++ b/debian/sucharu-theme-gnome-shell.preinst
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+set -e
+
+#DEBHELPER#
diff --git a/debian/sucharu-theme-gnome-shell.prerm b/debian/sucharu-theme-gnome-shell.prerm
new file mode 100644
index 00000000..c1fc8b91
--- /dev/null
+++ b/debian/sucharu-theme-gnome-shell.prerm
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+set -e
+
+#DEBHELPER#
diff --git a/gnome-shell/gnome-shell-sync.sh b/gnome-shell/gnome-shell-sync.sh
new file mode 100755
index 00000000..cd71f3b6
--- /dev/null
+++ b/gnome-shell/gnome-shell-sync.sh
@@ -0,0 +1,126 @@
+#!/usr/bin/env bash
+# -*- coding: UTF-8 -*-
+## Helper script to sync Adwaita from upstream to a destination folder
+## usage:
+##
+## gnome-shell-sync.sh --destination
+##
+## options:
+## -d, --destination Destination folder - mandatory
+## -b, --branch Branch name
+# CLInt GENERATED_CODE: start
+
+# No-arguments is not allowed
+[ $# -eq 0 ] && sed -ne 's/^## \(.*\)/\1/p' $0 && exit 1
+
+# Converting long-options into short ones
+for arg in "$@"; do
+ shift
+ case "$arg" in
+"--destination") set -- "$@" "-d";;
+"--branch") set -- "$@" "-b";;
+ *) set -- "$@" "$arg"
+ esac
+done
+
+function print_illegal() {
+ echo Unexpected flag in command line \"$@\"
+}
+
+# Parsing flags and arguments
+while getopts 'hab:d:' OPT; do
+ case $OPT in
+ h) sed -ne 's/^## \(.*\)/\1/p' $0
+ exit 1 ;;
+ d) _destination=$OPTARG ;;
+ b) _branch=$OPTARG ;;
+ \?) print_illegal $@ >&2;
+ echo "---"
+ sed -ne 's/^## \(.*\)/\1/p' $0
+ exit 1
+ ;;
+ esac
+done
+# CLInt GENERATED_CODE: end
+
+wget_check=`which wget | wc -l`
+[ $wget_check == 0 ] && echo "install wget" && exit 1
+
+
+_branch=${_branch:=master}
+data=https://gitlab.gnome.org/GNOME/gnome-shell/raw/${_branch}/data
+root=${data}/theme
+
+[ ! -d ${_destination} ] && echo ${_destination} folder does not exists && exit 1
+[ ! -d ${_destination}/gnome-shell-sass ] && mkdir ${_destination}/gnome-shell-sass
+[ ! -d ${_destination}/gnome-shell-sass/widgets] && mkdir ${_destination}/gnome-shell-sass/widgets
+[ ! -d ${_destination}/data ] && mkdir ${_destination}/data
+
+files=(
+ gnome-shell-sass/widgets/_a11y.scss
+ gnome-shell-sass/widgets/_app-grid.scss
+ gnome-shell-sass/widgets/_base.scss
+ gnome-shell-sass/widgets/_buttons.scss
+ gnome-shell-sass/widgets/_calendar.scss
+ gnome-shell-sass/widgets/_check-box.scss
+ gnome-shell-sass/widgets/_corner-ripple.scss
+ gnome-shell-sass/widgets/_dash.scss
+ gnome-shell-sass/widgets/_dialogs.scss
+ gnome-shell-sass/widgets/_entries.scss
+ gnome-shell-sass/widgets/_hotplug.scss
+ gnome-shell-sass/widgets/_ibus-popup.scss
+ gnome-shell-sass/widgets/_keyboard.scss
+ gnome-shell-sass/widgets/_login-dialog.scss
+ gnome-shell-sass/widgets/_looking-glass.scss
+ gnome-shell-sass/widgets/_message-list.scss
+ gnome-shell-sass/widgets/_misc.scss
+ gnome-shell-sass/widgets/_network-dialog.scss
+ gnome-shell-sass/widgets/_notifications.scss
+ gnome-shell-sass/widgets/_osd.scss
+ gnome-shell-sass/widgets/_overview.scss
+ gnome-shell-sass/widgets/_panel.scss
+ gnome-shell-sass/widgets/_popovers.scss
+ gnome-shell-sass/widgets/_screen-shield.scss
+ gnome-shell-sass/widgets/_scrollbars.scss
+ gnome-shell-sass/widgets/_search-entry.scss
+ gnome-shell-sass/widgets/_search-results.scss
+ gnome-shell-sass/widgets/_slider.scss
+ gnome-shell-sass/widgets/_switcher-popup.scss
+ gnome-shell-sass/widgets/_switches.scss
+ gnome-shell-sass/widgets/_tiled-previews.scss
+ gnome-shell-sass/widgets/_window-picker.scss
+ gnome-shell-sass/widgets/_workspace-switcher.scss
+ gnome-shell-sass/widgets/_workspace-thumbnails.scss
+ gnome-shell-sass/_colors.scss
+ gnome-shell-sass/_common.scss
+ gnome-shell-sass/COPYING
+ gnome-shell-sass/_drawing.scss
+ gnome-shell-sass/gnome-shell-sass.doap
+ gnome-shell-sass/_high-contrast-colors.scss
+ gnome-shell-sass/NEWS
+ gnome-shell-sass/README.md
+ gnome-shell-high-contrast.scss
+ gnome-shell.scss
+ meson.build
+ pad-osd.css
+ README.md
+)
+
+gresource_files=(
+ gnome-shell-theme.gresource.xml
+)
+
+set -e
+for i in ${files[@]}; do
+ wget ${root}/${i} -O ${_destination}/${i}
+done
+
+for i in ${gresource_files[@]}; do
+ gsource=${_destination}/data/${i}
+ wget ${data}/${i} -O $gsource
+ files=$($(dirname $0)/gresources-xml-parser.py --filter '*.css' $gsource)
+
+ for i in ${files}; do
+ wget ${root}/${i} -O ${_destination}/${i}
+ done
+done
diff --git a/gnome-shell/gresources-xml-parser.py b/gnome-shell/gresources-xml-parser.py
new file mode 100755
index 00000000..3c8302e0
--- /dev/null
+++ b/gnome-shell/gresources-xml-parser.py
@@ -0,0 +1,41 @@
+#! /usr/bin/env python3
+# Copyright © 2020, Canonical Ltd
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library. If not, see .
+# Authors:
+# Marco Trevisan
+
+import argparse
+import fnmatch
+import os
+import xml.etree.ElementTree as ET
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser()
+ parser.add_argument('gresource_source', type=argparse.FileType('r'))
+ parser.add_argument('--path', default='')
+ parser.add_argument('--filter', action='append', default=[])
+
+ args = parser.parse_args()
+ gsource_xml = ET.ElementTree(file=args.gresource_source.name)
+ source_files = [f.text for f in gsource_xml.findall('.//gresource/file')]
+
+ filtered = []
+ for f in source_files:
+ if [fl for fl in args.filter if fnmatch.fnmatch(f, fl)]:
+ continue
+
+ filtered.append(os.path.join(args.path, f))
+
+ print('\n'.join(filtered))
diff --git a/gnome-shell/meson.build b/gnome-shell/meson.build
new file mode 100644
index 00000000..78cad693
--- /dev/null
+++ b/gnome-shell/meson.build
@@ -0,0 +1,9 @@
+gnomeshell_use_gresource = get_option('gnome-shell-gresource')
+gnomeshell_user_themes_suport = get_option('gnome-shell-user-themes-support')
+gnomeshell_user_themes_suport = gnomeshell_user_themes_suport.disable_auto_if(
+ gnomeshell_use_gresource)
+gnomeshell_default_theme_dir = join_paths(get_option('datadir'), 'gnome-shell', 'theme')
+gnomeshell_alt_themes_dir = join_paths(get_option('datadir'), 'themes')
+gresources_xml_parser = find_program('gresources-xml-parser.py')
+
+subdir('src')
diff --git a/gnome-shell/src/README.md b/gnome-shell/src/README.md
new file mode 100644
index 00000000..7f6b135b
--- /dev/null
+++ b/gnome-shell/src/README.md
@@ -0,0 +1,32 @@
+## Summary
+
+Do not edit the CSS directly, edit the source SCSS files and the CSS files
+will be generated automatically when building with meson + ninja and left
+inside the build directory to be incorporated into the gresource XML (you'll
+need to have sassc installed).
+
+## How to tweak the theme
+
+Yaru is a complex theme, so to keep it maintainable it's written and
+processed in SASS, the generated CSS is then transformed into a gresource
+file during gtk build and used at runtime in a non-legible or editable form.
+
+It is very likely your change will happen in the [_common.scss][common] file.
+That's where all the widget selectors are defined. Here's a rundown of
+the "supporting" stylesheets, that are unlikely to be the right place
+for a drive by stylesheet fix:
+
+| File | Description |
+| ------------------------ | ----------------- |
+| [_colors.scss][colors] | global color definitions. We keep the number of defined colors to a necessary minimum, most colors are derived from a handful of basics. It is an exact copy of the gtk+ counterpart. Light theme is used for the classic theme and dark is for GNOME3 shell default. |
+| [_drawing.scss][drawing] | drawing helper mixings/functions to allow easier definition of widget drawing under specific context. This is why Adwaita isn't 15000 LOC. |
+| [_common.scss][common] | actual definitions of style for each widget. This is where you are likely to add/remove your changes. |
+
+You can read about SASS on its [web page][sass-web]. Once you make your
+changes to the [_common.scss][common] file, you can run ninja to generate the
+final CSS files.
+
+[common]: data/theme/gnome-shell-sass/_common.scss
+[colors]: data/theme/gnome-shell-sass/_colors.scss
+[drawing]: data/theme/gnome-shell-sass/_drawing.scss
+[sass-web]: http://sass-lang.com/documentation/
diff --git a/gnome-shell/src/calendar-today-light.svg b/gnome-shell/src/calendar-today-light.svg
new file mode 100644
index 00000000..ebf45dcb
--- /dev/null
+++ b/gnome-shell/src/calendar-today-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/calendar-today.svg b/gnome-shell/src/calendar-today.svg
new file mode 100644
index 00000000..bc9b53d8
--- /dev/null
+++ b/gnome-shell/src/calendar-today.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/colorable-assets/README.md b/gnome-shell/src/colorable-assets/README.md
new file mode 100644
index 00000000..73a5bf9c
--- /dev/null
+++ b/gnome-shell/src/colorable-assets/README.md
@@ -0,0 +1,5 @@
+### GNOME Shell Dummy Assets
+
+These assets are the base for building the final assets that are used by the
+GNOME shell theme, needs to be generated using colorize_dummy_svg.py using
+a yaru colors definitions CSS (that will be generated at build time)
diff --git a/gnome-shell/src/colorable-assets/checkbox-focused.svg b/gnome-shell/src/colorable-assets/checkbox-focused.svg
new file mode 100644
index 00000000..ee812fc3
--- /dev/null
+++ b/gnome-shell/src/colorable-assets/checkbox-focused.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/colorable-assets/checkbox-off-focused.svg b/gnome-shell/src/colorable-assets/checkbox-off-focused.svg
new file mode 100644
index 00000000..420eb4f2
--- /dev/null
+++ b/gnome-shell/src/colorable-assets/checkbox-off-focused.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/colorable-assets/checkbox-off.svg b/gnome-shell/src/colorable-assets/checkbox-off.svg
new file mode 100644
index 00000000..cb8373f7
--- /dev/null
+++ b/gnome-shell/src/colorable-assets/checkbox-off.svg
@@ -0,0 +1 @@
+
diff --git a/gnome-shell/src/colorable-assets/checkbox.svg b/gnome-shell/src/colorable-assets/checkbox.svg
new file mode 100644
index 00000000..f152c948
--- /dev/null
+++ b/gnome-shell/src/colorable-assets/checkbox.svg
@@ -0,0 +1 @@
+
diff --git a/gnome-shell/src/colorable-assets/toggle-off-hc.svg b/gnome-shell/src/colorable-assets/toggle-off-hc.svg
new file mode 100644
index 00000000..5d60857a
--- /dev/null
+++ b/gnome-shell/src/colorable-assets/toggle-off-hc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/colorable-assets/toggle-off.svg b/gnome-shell/src/colorable-assets/toggle-off.svg
new file mode 100644
index 00000000..79150525
--- /dev/null
+++ b/gnome-shell/src/colorable-assets/toggle-off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/colorable-assets/toggle-on-hc.svg b/gnome-shell/src/colorable-assets/toggle-on-hc.svg
new file mode 100644
index 00000000..2c110d4e
--- /dev/null
+++ b/gnome-shell/src/colorable-assets/toggle-on-hc.svg
@@ -0,0 +1 @@
+
diff --git a/gnome-shell/src/colorable-assets/toggle-on.svg b/gnome-shell/src/colorable-assets/toggle-on.svg
new file mode 100644
index 00000000..7e23201f
--- /dev/null
+++ b/gnome-shell/src/colorable-assets/toggle-on.svg
@@ -0,0 +1 @@
+
diff --git a/gnome-shell/src/dash-placeholder.svg b/gnome-shell/src/dash-placeholder.svg
new file mode 100644
index 00000000..650dfb9b
--- /dev/null
+++ b/gnome-shell/src/dash-placeholder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/gnome-shell-icons.gresource.xml b/gnome-shell/src/data/gnome-shell-icons.gresource.xml
new file mode 100644
index 00000000..c110026c
--- /dev/null
+++ b/gnome-shell/src/data/gnome-shell-icons.gresource.xml
@@ -0,0 +1,32 @@
+
+
+
+ scalable/actions/color-pick.svg
+ scalable/actions/carousel-arrow-next-symbolic.svg
+ scalable/actions/carousel-arrow-previous-symbolic.svg
+ scalable/actions/pointer-double-click-symbolic.svg
+ scalable/actions/pointer-drag-symbolic.svg
+ scalable/actions/pointer-primary-click-symbolic.svg
+ scalable/actions/pointer-secondary-click-symbolic.svg
+ scalable/actions/preview-close-symbolic.svg
+ scalable/actions/screenshot-ui-area-symbolic.svg
+ scalable/actions/screenshot-ui-display-symbolic.svg
+ scalable/actions/screenshot-ui-show-pointer-symbolic.svg
+ scalable/actions/screenshot-ui-window-symbolic.svg
+ scalable/actions/record-screen-symbolic.svg
+ scalable/actions/screencast-recorded-symbolic.svg
+ scalable/actions/screenshot-recorded-symbolic.svg
+ scalable/status/keyboard-caps-lock-symbolic.svg
+ scalable/status/keyboard-enter-symbolic.svg
+ scalable/status/keyboard-hide-symbolic.svg
+ scalable/status/keyboard-layout-symbolic.svg
+ scalable/status/keyboard-shift-symbolic.svg
+ scalable/status/message-indicator-symbolic.svg
+ scalable/status/no-events-symbolic.svg
+ scalable/status/no-notifications-symbolic.svg
+ scalable/status/screen-privacy-disabled-symbolic.svg
+ scalable/status/screen-privacy-symbolic.svg
+ scalable/status/stop-symbolic.svg
+
+
+
diff --git a/gnome-shell/src/data/gnome-shell-theme.gresource.xml b/gnome-shell/src/data/gnome-shell-theme.gresource.xml
new file mode 100644
index 00000000..20d1892c
--- /dev/null
+++ b/gnome-shell/src/data/gnome-shell-theme.gresource.xml
@@ -0,0 +1,6 @@
+
+
+
+ @YARU_SHELL_THEME_RESOURCES@
+
+
diff --git a/gnome-shell/src/data/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg b/gnome-shell/src/data/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg
new file mode 100644
index 00000000..e13eab4f
--- /dev/null
+++ b/gnome-shell/src/data/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg b/gnome-shell/src/data/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg
new file mode 100644
index 00000000..f39defaa
--- /dev/null
+++ b/gnome-shell/src/data/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg
@@ -0,0 +1,5 @@
+
diff --git a/gnome-shell/src/data/icons/scalable/actions/carousel-arrow-next-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/carousel-arrow-next-symbolic.svg
new file mode 100644
index 00000000..cb61abde
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/carousel-arrow-next-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg
new file mode 100644
index 00000000..6db5165c
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/actions/color-pick.svg b/gnome-shell/src/data/icons/scalable/actions/color-pick.svg
new file mode 100644
index 00000000..d9af6902
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/color-pick.svg
@@ -0,0 +1,94 @@
+
+
+
+
diff --git a/gnome-shell/src/data/icons/scalable/actions/pointer-double-click-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/pointer-double-click-symbolic.svg
new file mode 100644
index 00000000..f249aaae
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/pointer-double-click-symbolic.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/gnome-shell/src/data/icons/scalable/actions/pointer-drag-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/pointer-drag-symbolic.svg
new file mode 100644
index 00000000..7ad81215
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/pointer-drag-symbolic.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/gnome-shell/src/data/icons/scalable/actions/pointer-primary-click-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/pointer-primary-click-symbolic.svg
new file mode 100644
index 00000000..7a99169a
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/pointer-primary-click-symbolic.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/gnome-shell/src/data/icons/scalable/actions/pointer-secondary-click-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/pointer-secondary-click-symbolic.svg
new file mode 100644
index 00000000..4fccfb8a
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/pointer-secondary-click-symbolic.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/gnome-shell/src/data/icons/scalable/actions/preview-close-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/preview-close-symbolic.svg
new file mode 100644
index 00000000..a00fcb4a
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/preview-close-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/actions/record-screen-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/record-screen-symbolic.svg
new file mode 100644
index 00000000..7650969f
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/record-screen-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/actions/screencast-recorded-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/screencast-recorded-symbolic.svg
new file mode 100644
index 00000000..7ed9292f
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/screencast-recorded-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/actions/screenshot-recorded-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/screenshot-recorded-symbolic.svg
new file mode 100644
index 00000000..20ef0f57
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/screenshot-recorded-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/actions/screenshot-ui-area-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/screenshot-ui-area-symbolic.svg
new file mode 100644
index 00000000..3481f1b9
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/screenshot-ui-area-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/actions/screenshot-ui-display-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/screenshot-ui-display-symbolic.svg
new file mode 100644
index 00000000..0fc86d0d
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/screenshot-ui-display-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg
new file mode 100644
index 00000000..f29009a5
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/actions/screenshot-ui-window-symbolic.svg b/gnome-shell/src/data/icons/scalable/actions/screenshot-ui-window-symbolic.svg
new file mode 100644
index 00000000..e40bae53
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/actions/screenshot-ui-window-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/status/keyboard-caps-lock-symbolic.svg b/gnome-shell/src/data/icons/scalable/status/keyboard-caps-lock-symbolic.svg
new file mode 100644
index 00000000..20734607
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/status/keyboard-caps-lock-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/status/keyboard-enter-symbolic.svg b/gnome-shell/src/data/icons/scalable/status/keyboard-enter-symbolic.svg
new file mode 100644
index 00000000..eb924373
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/status/keyboard-enter-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/status/keyboard-hide-symbolic.svg b/gnome-shell/src/data/icons/scalable/status/keyboard-hide-symbolic.svg
new file mode 100644
index 00000000..a899db5b
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/status/keyboard-hide-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/status/keyboard-layout-filled-symbolic.svg b/gnome-shell/src/data/icons/scalable/status/keyboard-layout-filled-symbolic.svg
new file mode 100644
index 00000000..a017ab13
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/status/keyboard-layout-filled-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/status/keyboard-layout-symbolic.svg b/gnome-shell/src/data/icons/scalable/status/keyboard-layout-symbolic.svg
new file mode 100644
index 00000000..a017ab13
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/status/keyboard-layout-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/status/keyboard-shift-symbolic.svg b/gnome-shell/src/data/icons/scalable/status/keyboard-shift-symbolic.svg
new file mode 100644
index 00000000..3a43203e
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/status/keyboard-shift-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/status/message-indicator-symbolic.svg b/gnome-shell/src/data/icons/scalable/status/message-indicator-symbolic.svg
new file mode 100644
index 00000000..fb9afe3a
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/status/message-indicator-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/status/no-events-symbolic.svg b/gnome-shell/src/data/icons/scalable/status/no-events-symbolic.svg
new file mode 100644
index 00000000..baa6700a
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/status/no-events-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/status/no-notifications-symbolic.svg b/gnome-shell/src/data/icons/scalable/status/no-notifications-symbolic.svg
new file mode 100644
index 00000000..f1d23d28
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/status/no-notifications-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/status/screen-privacy-disabled-symbolic.svg b/gnome-shell/src/data/icons/scalable/status/screen-privacy-disabled-symbolic.svg
new file mode 100644
index 00000000..39321986
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/status/screen-privacy-disabled-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/status/screen-privacy-symbolic.svg b/gnome-shell/src/data/icons/scalable/status/screen-privacy-symbolic.svg
new file mode 100644
index 00000000..ded540b7
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/status/screen-privacy-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/data/icons/scalable/status/stop-symbolic.svg b/gnome-shell/src/data/icons/scalable/status/stop-symbolic.svg
new file mode 100644
index 00000000..315c3f38
--- /dev/null
+++ b/gnome-shell/src/data/icons/scalable/status/stop-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/gnome-shell-sass/COPYING b/gnome-shell/src/gnome-shell-sass/COPYING
new file mode 100644
index 00000000..e55e5b8a
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/gnome-shell/src/gnome-shell-sass/NEWS b/gnome-shell/src/gnome-shell-sass/NEWS
new file mode 100644
index 00000000..e69de29b
diff --git a/gnome-shell/src/gnome-shell-sass/README.md b/gnome-shell/src/gnome-shell-sass/README.md
new file mode 100644
index 00000000..a5f219ae
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/README.md
@@ -0,0 +1,16 @@
+# GNOME Shell Sass
+GNOME Shell Sass is a project intended to allow the sharing of the
+theme sources in sass between gnome-shell and other projects like
+gnome-shell-extensions.
+
+Any changes should be done in the [GNOME Shell subtree][shell-subtree]
+and not the stand-alone [gnome-shell-sass repository][sass-repo]. They
+will then be synchronized periodically before releases.
+
+## License
+GNOME Shell Sass is distributed under the terms of the GNU General Public
+License, version 2 or later. See the [COPYING][license] file for details.
+
+[shell-subtree]: https://gitlab.gnome.org/GNOME/gnome-shell/tree/master/data/theme/gnome-shell-sass
+[sass-repo]: https://gitlab.gnome.org/GNOME/gnome-shell-sass
+[license]: COPYING
diff --git a/gnome-shell/src/gnome-shell-sass/_colors.scss b/gnome-shell/src/gnome-shell-sass/_colors.scss
new file mode 100644
index 00000000..08720f0e
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/_colors.scss
@@ -0,0 +1,83 @@
+// When color definition differs for dark and light variant,
+// it gets @if-ed depending on $variant
+@import 'palette';
+
+$base_color: if($variant=='light', #ffffff, lighten($jet, 4%));
+$bg_color_dark: lighten($jet, 2%);
+$bg_color: if($variant=='light', #FAFAFA, $bg_color_dark);
+$fg_color_dark: $porcelain;
+$fg_color: if($variant=='light', $inkstone, $fg_color_dark);
+
+$selected_fg_color: $accent_fg_color;
+$selected_bg_color: if($variant=='light', $accent_bg_color, darken($accent_bg_color, 4%));
+// Yaru: Ignore transformations when using dark accent colors
+$selected_bg_color: $accent_bg_color;
+$selected_borders_color: if($variant=='light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%));
+
+$borders_color_dark: lighten(desaturate(lighten($jet, 4%), 100%), 14%); // Yaru: used for dash and other dark elements on light theme
+$borders_color: if($variant=='light', darken($bg_color, 20%), $borders_color_dark);
+$alt_borders_color: if($variant=='light', darken($bg_color, 24%), darken($bg_color, 10%));
+$borders_edge: if($variant=='light', transparentize(white, 0.2), transparentize($fg_color, 0.85));
+
+$link_color: if($variant=='light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 20%));
+$link_visited_color: if($variant=='light', darken($selected_bg_color, 20%), lighten($selected_bg_color, 10%));
+$top_hilight: $borders_edge;
+
+$warning_color: $yellow;
+$error_color: $red;
+$success_color: lighten($green, 5%);
+$destructive_color: if($variant=='light', $red, darken($red, 10%));
+
+$osd_fg_color: #eeeeec;
+$osd_bg_color: transparentize(lighten($jet, 2%), 0.025);
+$osd_insensitive_bg_color: transparentize(mix($osd_fg_color, opacify($osd_bg_color, 1), 10%), 0.5);
+$osd_insensitive_fg_color: mix($osd_fg_color, opacify($osd_bg_color, 1), 50%);
+$osd_borders_color: transparentize(black, 0.3);
+$osd_outer_borders_color: transparentize(white, 0.84);
+
+$shadow_color: transparentize(black, 0.9);
+
+// overview background color
+$system_bg_color: lighten($jet, 4%); // Lighten than dash but darken than bg-color
+
+//insensitive state derived colors
+$insensitive_fg_color: mix($fg_color, $bg_color, 50%);
+$insensitive_bg_color: mix($bg_color, $base_color, 60%);
+$insensitive_borders_color: $borders_color;
+
+//colors for the backdrop state, derived from the main colors.
+$backdrop_base_color: if($variant=='light', darken($base_color, 1%), lighten($base_color, 1%));
+$backdrop_bg_color: $bg_color;
+$backdrop_fg_color: mix($fg_color, $backdrop_bg_color, 80%);
+$backdrop_insensitive_color: if($variant=='light', darken($backdrop_bg_color, 15%), lighten($backdrop_bg_color, 15%));
+$backdrop_borders_color: mix($borders_color, $bg_color, 90%);
+$backdrop_dark_fill: mix($backdrop_borders_color, $backdrop_bg_color, 35%);
+
+$base_hover_color: transparentize(white, 0.8);
+$base_active_color: transparentize(white, 0.75);
+$hover_fg_color: lighten($selected_fg_color, .25);
+$active_fg_color: transparentize($selected_fg_color, .5);
+
+$panel_bg_color: darken($accent_bg_color, 2%);
+$panel_fg_color: darken($porcelain, 2%);
+$dash_background_color: lighten($jet, 2%);
+$panel-alpha-value: 0.6;
+$panel_opaque_value: 0.0;
+
+$dash-alpha-value: 0.6;
+$dash-opaque-alpha-value: 0.0;
+
+//special cased widget colors
+$suggested_bg_color: if($variant=='light', lighten($green, 5%), darken($green, 5%));
+$suggested_border_color: if($variant=='light', darken($suggested_bg_color, 5%), darken($suggested_bg_color, 10%));
+$progress_bg_color: if($variant=='light', lighten($accent_bg_color, 10%), lighten($accent_bg_color, 5%));
+$checkradio_bg_color: if($variant=='light', lighten($accent_bg_color, 5%), $accent_bg_color);
+$checkradio_fg_color: $accent_fg_color;
+$switch_bg_color: if($variant=='light', $accent_bg_color, darken($accent_bg_color, 8%));
+$switch_border_color: if($variant=='light', darken($accent_bg_color, 15%), darken($borders_color, 5%));
+$focus_border_color: lighten($accent_bg_color, 14%);
+
+// Yaru: Ignore transformations when using dark accent colors
+$selected_bg_color: $accent_bg_color;
+$progress_bg_color: $accent_bg_color;
+$checkradio_bg_color: $accent_bg_color;
diff --git a/gnome-shell/src/gnome-shell-sass/_common.scss b/gnome-shell/src/gnome-shell-sass/_common.scss
new file mode 100644
index 00000000..3bc2d912
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/_common.scss
@@ -0,0 +1,235 @@
+//This is the RIGHT PLACE to edit the stylesheet
+
+//let's start by telling people not to edit the generated CSS:
+$cakeisalie: "This stylesheet is generated, DO NOT EDIT";
+/* #{$cakeisalie} */
+
+/* Copyright 2009, 2015 Red Hat, Inc.
+ *
+ * Portions adapted from Mx's data/style/default.css
+ * Copyright 2009 Intel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/* Global Values */
+
+// padding, margin and spacing
+$base_padding: 6px;
+$base_margin: 4px;
+
+// border radii
+$base_border_radius: 6px; // Yaru change: sync radius with Gtk4
+
+// radii of things that display over other things, e.g. popovers
+$modal_radius: $base_border_radius*2; // 24px
+
+// derived hover colors - Yaru: we want the hover bg to be a visible gray for dark and light shell themes
+$hover_bg_color: transparentize($fg_color, 0.9);
+$hover_fg_color: $fg_color;
+$hover_borders_color: lighten($borders_color,if($variant=='light', 5%, 5%));
+
+// derived active colors - Yaru: we want the active bg to be a visible gray for dark and light shell themes
+$active_bg_color: transparentize($fg_color, 0.8);
+$active_fg_color: darken($fg_color, if($variant=='light', 5%, 3%));
+
+// derived checked colors
+$checked_bg_color: if($variant=='light', darken($bg_color, 7%), lighten($bg_color, 9%));
+$checked_fg_color: if($variant=='light', darken($fg_color, 7%), lighten($fg_color, 9%));
+
+// fonts
+$base_font_size: 11;
+$text_shadow_color: if($variant=='light', rgba(255, 255, 255, 0.3), rgba(0, 0, 0, 0.2));
+
+// icons
+$base_icon_size: 1.09em;
+$large_icon_size: $base_icon_size*2; // 32px
+// $base_icon_size: 16px;
+
+// Stage
+stage {
+ @include fontsize($base_font_size);
+ color: $fg_color;
+}
+
+/* Common Stylings */
+
+// osd panels
+%osd_panel {
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border: 1px solid $borders_color_dark; // Yaru: use our border
+ border-radius: 999px;
+ padding: $base_padding*2;
+ box-shadow: 0 3px 9px 1px transparentize(black, 0.5); // Yaru: OSDs need to be visible on dark backgrounds
+}
+
+// Overview panels
+// for the dash and workspace switcher
+%overview_panel {
+ color: $osd_fg_color;
+ background-color: transparentize($osd_fg_color, 0.9);
+}
+
+// icon tiles
+%tile {
+ border-radius: $base_border_radius * 2; // 16px
+ padding: $base_padding;
+ spacing: $base_padding;
+ border: 2px solid transparent;
+ transition-duration: 100ms;
+ text-align: center;
+ color: $osd_fg_color; // Yaru change: fix for light theme
+}
+
+// dialogs
+%bubble_panel {
+ color: $fg_color;
+ background-color: $bg_color;
+ border-radius: $base_border_radius*1.25 + 1px;
+ border: 1px solid $borders_edge;
+}
+
+// normal button styling
+%button {
+ border-radius: $base_border_radius - 2px; // 6px
+ border-style: solid;
+ border-width: 1px;
+ font-weight: bold;
+ padding: $base_padding*.5 $base_padding*4;
+
+ @include button(normal);
+ &:focus { @include button(focus);}
+ &:hover { @include button(hover);}
+ &:insensitive { @include button(insensitive);}
+ &:active { @include button(active);}
+ &:checked { @include button(checked);}
+}
+
+%button_dark { // Yaru change: add dark variant (for light theme)
+ @extend %button;
+ @include button(normal, $tc: $fg_color_dark, $c: $bg_color_dark);
+ &:focus { @include button(focus, $tc: $fg_color_dark, $c: $bg_color_dark);}
+ &:hover { @include button(hover, $tc: $fg_color_dark, $c: $bg_color_dark);}
+ &:insensitive { @include button(insensitive, $tc: $fg_color_dark, $c: $bg_color_dark);}
+ &:active { @include button(active, $tc: $fg_color_dark, $c: $bg_color_dark);}
+ &:checked { @include button(checked, $tc: $fg_color_dark, $c: $bg_color_dark);}
+}
+
+// buttons in dialogs/notifications
+// lighter in color and have a greater radius
+
+$bubble_button_radius:$base_border_radius*1.25;
+$bubble_buttons_color: $bg_color; // Yaru change: use regular color
+
+// buttons in dialogs
+%bubble_button {
+ padding: $base_padding * 2;
+ // font-weight: bold !important; // Yaru change: use normal font weight
+
+ &:ltr {margin-right: 1px;}
+ &:rtl {margin-left: 1px;}
+
+ @include button(normal, $c:$bubble_buttons_color);
+ &:insensitive { @include button(insensitive, $c:$bubble_buttons_color);}
+ &:focus { @include button(focus, $c:$bubble_buttons_color);}
+ &:hover { @include button(hover, $c:$bubble_buttons_color);}
+ &:active { @include button(active, $c:$bubble_buttons_color);} // Yaru change: add missing active state
+
+ &:first-child:ltr {
+ border-radius: 0 0 0 $bubble_button_radius;
+ }
+
+ &:last-child:ltr {
+ border-radius: 0 0 $bubble_button_radius 0;
+ margin-right: 0 !important;
+ }
+
+ &:first-child:rtl {
+ border-radius: 0 0 $bubble_button_radius 0;
+ margin-left: 0 !important;
+ }
+
+ &:last-child:rtl {
+ border-radius: 0 0 0 $bubble_button_radius;
+ margin-right: 0 !important;
+ }
+
+ &:first-child:last-child {
+ border-radius: 0 0 $bubble_button_radius $bubble_button_radius !important;
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ }
+}
+
+// buttons on OSD elements
+// that are undecorated by default and use OSD colors
+%osd_button {
+ @include button(undecorated);
+ &:insensitive { @include button(undecorated, $tc:$osd_fg_color, $c:$osd_bg_color);}
+ &:focus { @include button(focus, $tc:$osd_fg_color, $c:$osd_bg_color);}
+ &:hover { @include button(hover, $tc:$osd_fg_color, $c:$osd_bg_color);}
+ &:active { @include button(active, $tc:$osd_fg_color, $c:$osd_bg_color);}
+ &:outlined,&:checked { @include button(checked, $tc:$osd_fg_color, $c:$osd_bg_color);}
+}
+
+/* General Typography */
+
+%large_title {
+ font-weight: 300;
+ @include fontsize(24);
+}
+
+%title_1 {
+ font-weight: 800;
+ @include fontsize(20);
+}
+
+%title_2 {
+ font-weight: 800;
+ @include fontsize(15);
+}
+
+%title_3 {
+ font-weight: 700;
+ @include fontsize(15);
+}
+
+%title_4 {
+ font-weight: 700;
+ @include fontsize(13);
+}
+
+%heading {
+ font-weight: 700;
+ @include fontsize(11);
+}
+
+%caption_heading {
+ font-weight: 700;
+ @include fontsize(9);
+}
+
+%caption {
+ font-weight: 400;
+ @include fontsize(9);
+}
+
+%smaller {
+ font-weight: 400;
+ @include fontsize(8);
+}
+
+%monospace {font-family: monospace;}
+%numeric { font-feature-settings: "tnum";}
diff --git a/gnome-shell/src/gnome-shell-sass/_dock.scss b/gnome-shell/src/gnome-shell-sass/_dock.scss
new file mode 100644
index 00000000..5ddfb403
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/_dock.scss
@@ -0,0 +1,416 @@
+/* Default Ubuntu Dock styling, append !important to any changed rules
+ This must be in sync with
+ - https://github.com/micheleg/dash-to-dock/blob/ubuntu-dock/_stylesheet.scss
+ */
+
+$dash_bottom_margin: $base_margin * 4;
+$dash_spacing: round($base_padding / 4);
+
+// Stock
+$dash_edge_items_padding: $dash_padding - $dash_spacing;
+$dock_start_margin: $dash_bottom_margin;
+$dock_side_margin: $dock_start_margin / 4;
+$dock_fixed_inner_margin: $dock_side_margin;
+
+// Adapted to $dock_bottom_margin
+
+@function shrink($val) {
+ @return round($val / 4);
+}
+
+@function shrink_light($val) {
+ @return round($val * 0.75);
+}
+
+@function is_horizontal($side) {
+ @return $side == top or $side == bottom;
+}
+
+@function opposite($val) {
+ @return map-get(
+ (
+ left: right,
+ right: left,
+ top: bottom,
+ bottom: top,
+ ),
+ $val
+ );
+}
+
+$osd_fg_color: #eeeeec;
+
+@each $side in bottom, top, left, right {
+ #dashtodockContainer.#{$side} {
+ #dash {
+ margin: 0px;
+ padding: 0px;
+
+ .dash-background {
+ margin: 0;
+ margin-#{$side}: $dock_side_margin;
+ padding: 0;
+ }
+
+ .dash-separator {
+ background-color: transparentize($osd_fg_color, 0.7);
+ @if is_horizontal($side) {
+ margin-bottom: 0;
+ } @else {
+ height: 1px;
+ margin: ($dash_spacing + ($dash_padding / 2)) 0;
+ }
+ }
+
+ #dashtodockDashContainer {
+ padding: $dash_padding;
+ padding-#{$side}: 0;
+ padding-#{opposite($side)}: 0;
+ }
+
+ .dash-item-container {
+ .app-well-app,
+ .show-apps {
+ padding: $dash_spacing;
+ padding-#{$side}: $dash_padding + $dock_side_margin;
+ padding-#{opposite($side)}: $dash_padding;
+ }
+
+ .app-well-app {
+ &.running .overview-icon {
+ background-image: none;
+ }
+ &.focused .overview-icon {
+ background-color: rgba(238, 238, 236, 0.2);
+ }
+ }
+
+ > StButton {
+ transition-duration: 250;
+ background-size: contain;
+ }
+ }
+ }
+
+ &.shrink {
+ #dash {
+ .dash-background {
+ margin-#{$side}: $dock_side_margin;
+ padding: shrink($dash_padding);
+ border-radius: shrink_light($dash_border_radius);
+ }
+
+ #dashtodockDashContainer {
+ padding: shrink($dash_padding);
+ }
+
+ .dash-item-container {
+ .app-well-app,
+ .show-apps {
+ padding: shrink($dash_spacing);
+ padding-#{$side}: shrink($dash_padding) + $dock_side_margin;
+ padding-#{opposite($side)}: shrink($dash_padding);
+ }
+ }
+ }
+
+ &.fixed {
+ #dash {
+ .dash-background {
+ margin-#{opposite($side)}: shrink($dock_fixed_inner_margin);
+ }
+
+ .dash-item-container {
+ .app-well-app,
+ .show-apps {
+ padding-#{opposite($side)}: shrink($dash_padding + $dock_fixed_inner_margin);
+ }
+ }
+ }
+ }
+ }
+
+ &.fixed {
+ #dash {
+ .dash-background {
+ margin-#{opposite($side)}: $dock_fixed_inner_margin;
+ }
+
+ .dash-item-container {
+ .app-well-app,
+ .show-apps {
+ padding-#{opposite($side)}: $dash_padding + $dock_fixed_inner_margin;
+ }
+ }
+ }
+ }
+ }
+}
+
+@mixin padded-edge-child($chid, $side, $padding) {
+ @if $chid == first {
+ @if is_horizontal($side) {
+ padding-left: $padding;
+ } @else {
+ padding-top: $padding;
+ }
+ } @else if $chid == last {
+ @if is_horizontal($side) {
+ padding-right: $padding;
+ } @else {
+ padding-bottom: $padding;
+ }
+ } @else {
+ @error "Invalid rule";
+ }
+}
+
+/* In extended mode we need to use the first and last .dash-item-container's
+ * to apply the padding on the dock, to ensure that the actual first or last
+ * child show-apps item will actually include the padding area so that it will
+ * be clickable up to the dock edge, and make Fitts happy.
+ * I don't think the same should happen for normal icons, so in the other side
+ * the padding will be applied via the scrolled area, given we can't get the
+ * parent of the first/last app-well-app icon to apply a rule there.
+ */
+@mixin padded-dash-edge-items($side, $padding) {
+ @each $child_pos in first, last {
+ > :#{$child_pos}-child {
+ /* Use this instead of #dashtodockDashScrollview rule to apply the
+ * padding via the last app-icon item */
+ // .dash-item-container:#{$child_pos}-child .app-well-app,
+ .show-apps {
+ @include padded-edge-child($child_pos, $side, $padding);
+ }
+ }
+
+ #dashtodockDashScrollview:#{$child_pos}-child {
+ @include padded-edge-child($child_pos, $side, $padding);
+ }
+ }
+}
+
+@each $side in bottom, top, left, right {
+ #dashtodockContainer.extended.#{$side} {
+ #dash {
+ .dash-background {
+ margin: 0;
+ border-radius: 0;
+ }
+
+ #dashtodockDashContainer {
+ padding: 0;
+ padding-#{$side}: 0;
+ padding-#{opposite($side)}: 0;
+
+ @include padded-dash-edge-items($side, $dash_edge_items_padding);
+ }
+
+ .dash-item-container {
+ .app-well-app,
+ .show-apps {
+ padding-#{$side}: $dash_padding;
+ padding-#{opposite($side)}: $dash_padding;
+ }
+ }
+ }
+
+ &.shrink {
+ #dash {
+ #dashtodockDashContainer {
+ padding: 0;
+
+ @include padded-dash-edge-items($side, $dash_edge_items_padding);
+ }
+
+ .dash-item-container {
+ .app-well-app,
+ .show-apps {
+ padding-#{$side}: shrink($dash_padding);
+ padding-#{opposite($side)}: shrink($dash_padding);
+ }
+ }
+ }
+ }
+
+ &.shrink.fixed {
+ #dash {
+ .dash-background {
+ margin-#{opposite($side)}: 0;
+ }
+ }
+ }
+ }
+}
+
+#dashtodockContainer.top.shrink #dash .dash-background {
+ margin-top: 4px;
+ margin-bottom: 0;
+}
+
+#dashtodockContainer.straight-corner #dash .dash-background,
+#dashtodockContainer.shrink.straight-corner #dash .dash-background {
+ border-radius: 0px;
+}
+
+/* Scrollview style */
+.bottom #dashtodockDashScrollview,
+.top #dashtodockDashScrollview {
+ -st-hfade-offset: 24px;
+}
+
+.left #dashtodockDashScrollview,
+.right #dashtodockDashScrollview {
+ -st-vfade-offset: 24px;
+}
+
+#dashtodockContainer.dashtodock #dash .dash-background {
+ background: #2e3436;
+}
+
+#dashtodockContainer.dashtodock .progress-bar {
+ /* Customization of the progress bar style, e.g.:
+ -progress-bar-background: rgba(0.8, 0.8, 0.8, 1);
+ -progress-bar-border: rgba(0.9, 0.9, 0.9, 1);
+ */
+}
+
+#dashtodockContainer.top #dash .placeholder,
+#dashtodockContainer.bottom #dash .placeholder {
+ width: 32px;
+ height: 1px;
+}
+
+/*
+ * This is applied to a dummy actor. Only the alpha value for the background and border color
+ * and the transition-duration are used
+ */
+#dashtodockContainer.dummy-opaque {
+ background-color: rgba(0, 0, 0, 0.8);
+ border-color: rgba(0, 0, 0, 0.4);
+ transition-duration: 300ms;
+}
+
+/*
+ * This is applied to a dummy actor. Only the alpha value for the background and border color
+ * and the transition-duration are used
+ */
+#dashtodockContainer.dummy-transparent {
+ background-color: rgba(0, 0, 0, 0.2);
+ border-color: rgba(0, 0, 0, 0.1);
+ transition-duration: 500ms;
+}
+
+#dashtodockContainer .number-overlay {
+ color: rgba(255, 255, 255, 1);
+ background-color: rgba(0, 0, 0, 0.8);
+ text-align: center;
+}
+
+#dashtodockContainer .notification-badge {
+ color: rgba(255, 255, 255, 1);
+ background-color: rgba(255, 0, 0, 1);
+ padding: 0.2em 0.5em;
+ border-radius: 1em;
+ font-weight: bold;
+ text-align: center;
+ margin: 2px;
+}
+
+#dashtodockPreviewSeparator.popup-separator-menu-item-horizontal {
+ width: 1px;
+ height: auto;
+ border-right-width: 1px;
+ margin: 32px 0px;
+}
+
+.dashtodock-app-well-preview-menu-item {
+ padding: 1em 1em 0.5em 1em;
+}
+
+#dashtodockContainer .metro .overview-icon {
+ border-radius: 0px;
+}
+
+@for $i from 2 through 4 {
+ #dashtodockContainer.bottom .metro.running#{$i}.focused,
+ #dashtodockContainer.top .metro.running#{$i}.focused {
+ background-image: url("./media/highlight_stacked_bg.svg");
+ background-position: 0px 0px;
+ background-size: contain;
+ }
+
+ #dashtodockContainer.left .metro.running#{$i}.focused,
+ #dashtodockContainer.right .metro.running#{$i}.focused {
+ background-image: url("./media/highlight_stacked_bg_h.svg");
+ background-position: 0px 0px;
+ background-size: contain;
+ }
+}
+
+/* Yaru Dock styling */
+
+$dock_color: $panel_bg_color;
+
+@each $side in bottom, top, left, right {
+ #dashtodockContainer.#{$side} {
+ #dash,
+ &.dashtodock #dash,
+ &.shrink #dash {
+ margin: 0px;
+ padding: 0px;
+
+ .dash-background {
+ background: transparentize($dock_color, 0.25);
+ transition-duration: $panel_transition_duration;
+ }
+
+ .dash-separator {
+ background: transparentize($osd_fg_color, 0.7);
+ }
+ }
+
+ &.overview {
+ #dash,
+ &.dashtodock #dash,
+ &.shrink #dash {
+ .dash-background {
+ background-color: $dock_color;
+ }
+ }
+ }
+
+ &.extended {
+ #dash,
+ &.dashtodock #dash,
+ &.shrink #dash {
+ .dash-background {
+ // Yaru: remove the border we apply to the upstream dock
+ border: none;
+ }
+ }
+
+ &.shrink #dash #dashtodockDashContainer {
+ // Yaru: do not shrink start/end padding in shrink mode
+ @include padded-dash-edge-items($side, $dash_edge_items_padding);
+ }
+ }
+
+ .dash-item-container {
+ .show-apps, .app-well-app {
+ border-radius: $dash_border_radius;
+ &:active, &:checked {
+ .overview-icon {
+ background-color: $base_active_color; box-shadow: none;
+ }
+ }
+ }
+ }
+
+ .notification-badge {
+ background-color: $success_color;
+ border: 1px solid darken($success_color,10%);
+ box-shadow: -1px 1px 5px 0px transparentize(black, 0.5);
+ }
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/_drawing.scss b/gnome-shell/src/gnome-shell-sass/_drawing.scss
new file mode 100644
index 00000000..e9c5ecf2
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/_drawing.scss
@@ -0,0 +1,321 @@
+// Drawing mixins
+
+// generic drawing of more complex things
+
+@function draw_widget_edge($c:$borders_edge) {
+// outer highlight "used" on most widgets
+ @return 0 1px $c;
+}
+
+// provide font size in rem, with px fallback
+@mixin fontsize($size: 24, $base: 16) {
+ font-size: round($size) + pt;
+ //font-size: ($size / $base) * 1rem;
+}
+
+@mixin draw_shadows($shadow1, $shadow2:none, $shadow3:none, $shadow4:none) {
+//
+// Helper function to stack up to 4 box-shadows;
+//
+ @if $shadow4!=none { box-shadow: $shadow1, $shadow2, $shadow3, $shadow4; }
+ @else if $shadow3!=none { box-shadow: $shadow1, $shadow2, $shadow3; }
+ @else if $shadow2!=none { box-shadow: $shadow1, $shadow2; }
+ @else { box-shadow: $shadow1; }
+}
+
+// entries
+
+@mixin entry($t, $fc:$focus_border_color) { // Yaru: we detached focus from selected
+//
+// Entries drawing function
+//
+// $t: entry type
+// $fc: focus color
+//
+// possible $t values:
+// normal, focus, insensitive
+//
+
+ @if $t==normal {
+ background-color: if($variant == 'light', lighten($bg_color, 5%), $dash_background_color); // Yaru: use same background as dash for dark theme
+ color: transparentize($fg_color,0.3);
+ border: 1px solid $borders_color; // Yaru change: use our own border-color
+ }
+
+ @if $t==focus {
+ background-color: if($variant == 'light', lighten($bg_color, 5%), $dash_background_color); // Yaru: use same background as dash for dark theme
+ border-color: $fc;
+ box-shadow: 0 0 0 1px $fc inset; // Yaru change: trick to get 2px border on focus without layout shifting
+ color: $fg_color;
+ &:hover {}
+ }
+
+ @if $t==hover {
+ background-color: if($variant == 'light', lighten($bg_color, 5%), $dash_background_color); // Yaru: use same background as dash for dark theme
+ border-color: $hover_borders_color; // Yaru change: don't change color on hover
+ color: $fg_color; // Yaru change: don't change color on hover
+ }
+
+ @if $t==insensitive {
+ background-color:lighten($insensitive_bg_color, 5%);
+ border-color: lighten($insensitive_bg_color, 5%);
+ color: $insensitive_fg_color;
+ }
+}
+
+// On-screen Keyboard
+@mixin keyboard_key($t, $c:$osd_bg_color, $tc:$osd_fg_color) {
+// Yaru: FIXME:?! Make keyboard work in both variants
+//
+// Keyboard key drawing function
+//
+// $t: key type,
+// $c: base key color for colored* types
+// $tc: optional text color for colored* types
+//
+// possible $t values:
+// normal, hover, active, insensitive, insensitive-active,
+// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
+// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
+//
+
+ // normal key
+ @if $t==normal {
+ color: $tc;
+ background-color: lighten($c, 3%);
+ }
+
+ // focused key
+ @if $t==focus {
+ color: $tc;
+ background-color: mix(lighten($c, 3%), $selected_bg_color, 90%);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4);
+ &:hover {
+ background-color: mix(lighten($c, 8%), $selected_bg_color, 90%);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3);
+ }
+ &:active {
+ background-color: mix(lighten($c, 10%), $selected_bg_color, 90%);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3);
+ }
+ }
+
+ // hover key
+ @else if $t==hover {
+ color: $tc;
+ background-color: if($variant=="light", lighten($c, 1%), lighten($c, 7%)); // Yaru change: Make keyboard work on both variants
+ }
+
+ // active key
+ @else if $t==active {
+ color: $tc;
+ background-color: if($variant=="light", darken($c, 2%), lighten($c, 10%)); // Yaru change: ↑↑↑
+ }
+
+ // checked key
+ @else if $t==checked {
+ color: $tc;
+ background-color: if($variant=="light", darken($c, 5%), lighten($c, 15%)); // Yaru change: ↑↑↑
+ }
+
+ // insensitive key
+ @else if $t==insensitive {
+ color: $insensitive_fg_color;
+ background-color: $insensitive_bg_color;
+ }
+
+ // reset
+ @else if $t==undecorated {
+ background-color: transparent;
+ background-image: none;
+ }
+}
+
+
+// buttons
+// since buttons are all flat an borderless now the mixin is simpler
+
+@mixin button($t, $tc:$fg_color, $c:$bg_color) {
+
+$button_bg_color: mix($tc, $c, 7%); // Yaru change: increase contrast
+//
+// Button drawing function
+//
+// $t: button type,
+// $c: base button colors, derived from fg_color
+// $tc: base button colors, derived from fg_color
+//
+// possible $t values:
+// normal, hover, active, insensitive, insensitive-active,
+// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
+// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
+//
+
+ // normal button
+ @if $t==normal {
+ color: $tc;
+ background-color: $button_bg_color;
+ }
+
+ // focused button
+ @if $t==focus {
+ color: $tc;
+ background-color: $button_bg_color; // Yaru: keep regular bg on focused buttons
+ box-shadow: inset 0 0 0 2px $focus_border_color; // Yaru: we detached focus from selected
+ &:hover {
+ background-color: if($variant == 'light', darken($button_bg_color, 3%), lighten($button_bg_color, 3%)); // Yaru: keep regular bg on focused buttons
+ box-shadow: inset 0 0 0 2px $focus_border_color; // Yaru: we detached focus from selected
+ }
+ &:active {
+ background-color: if($variant == 'light', darken($button_bg_color, 6%), lighten($button_bg_color, 6%)); // Yaru: keep regular bg on focused buttons
+ box-shadow: inset 0 0 0 2px $focus_border_color; // Yaru: we detached focus from selected
+ }
+ }
+
+ // hover button
+ @else if $t==hover {
+ color: $tc;
+ background-color: if($variant == 'light', darken($button_bg_color, 3%), lighten($button_bg_color, 3%)); // Yaru change: adapt for light theme
+ }
+
+ // active button
+ @else if $t==active {
+ color: $tc;
+ background-color: if($variant == 'light', darken($button_bg_color, 6%), lighten($button_bg_color, 6%)); // Yaru change: adapt for light theme
+ }
+
+ // checked button
+ @else if $t==checked {
+ color: $tc;
+ background-color: if($variant == 'light', darken($button_bg_color, 9%), lighten($button_bg_color, 9%)); // Yaru change: adapt for light theme
+ &:hover { background-color: if($variant == 'light', darken($button_bg_color, 12%), lighten($button_bg_color, 12%));} // Yaru change: ↑↑↑
+ &:active { background-color: if($variant == 'light', darken($button_bg_color, 15%), lighten($button_bg_color, 15%));} // Yaru change: ↑↑↑
+ }
+
+ // insensitive button
+ @else if $t==insensitive {
+ color: transparentize($tc, 0.5);
+ background-color: transparentize($tc, .95);
+ }
+
+ // default/suggested button
+ @else if $t==default {
+ background-color: $selected_bg_color;
+ color: $selected_fg_color;
+ &:focus {
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4);
+ }
+ &:hover, &:focus {
+ background-color: lighten($selected_bg_color, 5%);
+ color: lighten($selected_fg_color, 5%);
+ }
+ &:active {
+ background-color: darken($selected_bg_color, 7%);
+ color: darken($selected_fg_color, 7%);
+ }
+ &:insensitive {
+ @include button(insensitive);
+ background-color: transparentize($selected_bg_color, .5);
+ color: transparentize($selected_fg_color, .5);
+ }
+ }
+
+ // reset
+ @else if $t==undecorated {
+ background-color: transparent;
+ background-color: none;
+ &:insensitive {
+ @include button(insensitive);
+ background-color: transparent;
+ color: transparentize($selected_fg_color, .5);
+ }
+ }
+}
+
+// tile
+@mixin tile_button($color, $flat: true) {
+ @extend %tile;
+ @if $flat {
+ background-color: transparent;
+ } @else {
+ background-color: transparentize($color, .84);
+ }
+ &:hover { background-color: transparentize($color, .9);}
+ &:selected, &:focus {
+ background-color: transparentize($color, .87);
+ &:hover { background-color: transparentize($color, .84);}
+ &:active { background-color: transparentize($color, .87);}
+ }
+ &:active { background-color: transparentize($color, .84);}
+ &:outlined, &:checked {
+ background-color: transparentize($color, .81);
+ &:active { background-color: transparentize($color, .78);}
+ &:hover { background-color: transparentize($color, .75);}
+ }
+ &:drop {
+ border: 2px solid transparentize($selected_bg_color, .2); //already 2px transparent so no jumping
+ background-color: transparentize($selected_bg_color, .8);
+ }
+}
+
+// overview icon, dash, app grid
+@mixin overview_icon($color, $flat: true) {
+ .overview-icon { @extend %tile; }
+ @if $flat {
+ .overview-icon { background-color: transparent;}
+ } @else {
+ .overview-icon { background-color: transparentize($color, .95);} // Yaru change: softer non-flat icon
+ }
+ &:hover .overview-icon { background-color: transparentize($color, .9);}
+
+ &:selected .overview-icon,
+ &:focus .overview-icon {
+ background-color: transparentize($color, .87);
+ &:hover .overview-icon { background-color: transparentize($color, .84);}
+ &:active .overview-icon { background-color: transparentize($color, .87);}
+ }
+ &:active .overview-icon { background-color: transparentize($color, .84);}
+ &:outlined .overview-icon,
+ &:checked .overview-icon {
+ background-color: transparentize($color, .81);
+ &:active .overview-icon { background-color: transparentize($color, .78);}
+ &:hover .overview-icon { background-color: transparentize($color, .75);}
+ }
+ &:drop .overview-icon {
+ border: 2px solid transparentize($selected_bg_color, .2); //already 2px transparent so no jumping
+ background-color: transparentize($selected_bg_color, .8);
+ }
+ &:focus,
+ &:active,
+ &:checked {
+ .overview-icon {
+ background-color: transparentize($color, .8); // Yaru: use lighten color instead of dark color
+ }
+ }
+}
+
+// styling for elements within popovers that look like notifications
+@mixin card($flat: false) {
+ border-radius: $base_border_radius;
+ margin: $base_margin;
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
+
+ @if $flat {
+ @include button(undecorated);
+ box-shadow: none !important;
+ } @else {
+ @include button(normal);
+ }
+
+ &:focus {
+ @include button(focus);
+ }
+
+ &:hover {
+ @include button(hover);
+ }
+
+ &:active {
+ @include button(active);
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/_high-contrast-colors.scss b/gnome-shell/src/gnome-shell-sass/_high-contrast-colors.scss
new file mode 100644
index 00000000..ccdee87e
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/_high-contrast-colors.scss
@@ -0,0 +1,47 @@
+// When color definition differs for dark and light variant,
+// it gets @if ed depending on $variant
+
+$base_color: #222;
+$bg_color: #000;
+$fg_color: #fff;
+
+$selected_fg_color: #ffffff;
+$selected_bg_color: darken(#4a90d9,20%);
+$selected_borders_color: darken($selected_bg_color, 20%);
+$borders_color: darken($bg_color,12%);
+$borders_edge: transparentize($fg_color, 0.9);
+$link_color: lighten($selected_bg_color,20%);
+$link_visited_color: lighten($selected_bg_color,10%);
+
+$warning_color: #f57900;
+$error_color: #cc0000;
+$success_color: darken(#73d216,10%);
+$destructive_color: darken(#ef2929,10%);
+
+$osd_fg_color: #eeeeec;
+$osd_bg_color: #2e3436;
+$osd_borders_color: rgba(0,0,0, 0.7);
+$osd_outer_borders_color: rgba(255,255,255, 0.1);
+$osd_insensitive_bg_color: mix($osd_fg_color, $osd_bg_color, 10%);
+$osd_insensitive_fg_color: if($variant == 'light', mix($osd_fg_color, $osd_bg_color, 80%), mix($osd_fg_color, $osd_bg_color, 70%));
+
+$shadow_color: rgba(0,0,0, 0.1);
+$system_bg_color: desaturate(#241f31,100%); //neutralize the HIG color
+
+//insensitive state derived colors
+$insensitive_fg_color: mix($fg_color, $bg_color, 50%);
+$insensitive_bg_color: mix($bg_color, $base_color, 60%);
+$insensitive_borders_color: $borders_color;
+
+//colors for the backdrop state, derived from the main colors.
+$backdrop_base_color: lighten($base_color,1%);
+$backdrop_bg_color: $bg_color;
+$backdrop_fg_color: mix($fg_color, $backdrop_bg_color, 80%);
+$backdrop_insensitive_color: lighten($backdrop_bg_color,15%);
+$backdrop_borders_color: mix($borders_color, $bg_color, 90%);
+$backdrop_dark_fill: mix($backdrop_borders_color,$backdrop_bg_color, 35%);
+
+// Yaru: we need hc and imports to for our build to work:
+$variant: hc;
+@import "palette";
+@import "colors";
diff --git a/gnome-shell/src/gnome-shell-sass/_palette.scss b/gnome-shell/src/gnome-shell-sass/_palette.scss
new file mode 100644
index 00000000..70d0d96a
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/_palette.scss
@@ -0,0 +1,41 @@
+// Blacks
+$jet: #181818;
+$inkstone: #3D3D3D;
+$slate: #5D5D5D;
+$graphite: #666666;
+
+// Whites
+$white: #FFFFFF;
+$porcelain: #F7F7F7;
+$silk: #CCC;
+$warm_gray: #AEA79F;
+$ash: #878787;
+
+// Purples
+$aubergine: #924D8B;
+$purple: #762572;
+$light_aubergine: #77216F;
+$mid_aubergine: #5E2750;
+$dark_aubergine: #2C001E;
+
+// Reds
+$red: #c7162b;
+
+// Oranges
+$orange: #E95420;
+
+// Yellows
+$yellow: #f99b11;
+
+// Greens
+$green: #0e8420;
+
+// Blues
+$blue: #19B6EE;
+$linkblue: #007aa6;
+$darkblue: #335280;
+
+
+// Semantic colors
+$accent_bg_color: $green !default;
+$accent_fg_color: $white !default;
diff --git a/gnome-shell/src/gnome-shell-sass/_tweaks.scss b/gnome-shell/src/gnome-shell-sass/_tweaks.scss
new file mode 100755
index 00000000..5e4c1404
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/_tweaks.scss
@@ -0,0 +1,5 @@
+// Sucharu: any modifications to Yaru's original gnome-shell theme
+// may be added in this file. We will use this file override
+// any settings that are contradictory to project goals of sucharu
+// except for the colours. Any modifications in colors should be added
+// to _colors.scss
diff --git a/gnome-shell/src/gnome-shell-sass/_widgets.scss b/gnome-shell/src/gnome-shell-sass/_widgets.scss
new file mode 100644
index 00000000..b7ecce4a
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/_widgets.scss
@@ -0,0 +1,62 @@
+//
+// Shell widgets stylesheets are placed in separate .scss files
+// in 'widgets' and imported into the main stylesheet in this file.
+// To create or update a widget for the shell modify the list below.
+//
+
+/* WIDGETS */
+
+// Primary widgets
+@import 'widgets/base';
+@import 'widgets/entries';
+@import 'widgets/buttons';
+@import 'widgets/check-box';
+@import 'widgets/switches';
+@import 'widgets/slider';
+@import 'widgets/scrollbars';
+// Popovers
+@import 'widgets/popovers';
+@import 'widgets/calendar';
+@import 'widgets/message-list';
+@import 'widgets/ibus-popup';
+// Notifications
+@import 'widgets/notifications';
+@import 'widgets/hotplug';
+// Dialogs
+@import 'widgets/dialogs';
+@import 'widgets/network-dialog';
+// OSDs
+@import 'widgets/osd';
+@import 'widgets/switcher-popup';
+@import 'widgets/workspace-switcher';
+@import 'widgets/screenshot';
+// Panel
+@import 'widgets/panel';
+@import 'widgets/corner-ripple';
+// Overview
+@import 'widgets/overview';
+@import 'widgets/window-picker';
+@import 'widgets/search-entry';
+@import 'widgets/search-results';
+@import 'widgets/dash';
+@import 'widgets/app-grid';
+@import 'widgets/workspace-thumbnails';
+// A11y / misc
+@import 'widgets/a11y';
+@import 'widgets/misc';
+@import 'widgets/keyboard';
+@import 'widgets/looking-glass';
+// Lock / login screens
+@import 'widgets/login-dialog';
+@import 'widgets/screen-shield';
+
+// Yaru change: make font normal here to have less diff in the widgets
+* {
+ font-weight: normal !important;
+ text-shadow: none !important;
+}
+
+// gnome-shell-extension-desktop-icons styling
+.file-item {
+ border-radius: $base_border_radius;
+}
diff --git a/gnome-shell/src/gnome-shell-sass/gnome-shell-sass.doap b/gnome-shell/src/gnome-shell-sass/gnome-shell-sass.doap
new file mode 100644
index 00000000..f18ec1b8
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/gnome-shell-sass.doap
@@ -0,0 +1,37 @@
+
+
+ GNOME Shell Sass
+ Sass sources of GNOME Shell
+ GNOME Shell Sass is a project intended to allow the sharing of the
+ sass theme sources between gnome-shell and other projects like gnome-shell-extensions.
+
+
+ sass
+ css
+
+
+
+ Carlos Soriano
+
+ csoriano
+
+
+
+
+ Florian Müllner
+
+ fmuellner
+
+
+
+
+ Jakub Steiner
+
+ jimmac
+
+
+
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_a11y.scss b/gnome-shell/src/gnome-shell-sass/widgets/_a11y.scss
new file mode 100644
index 00000000..31b5c4b7
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_a11y.scss
@@ -0,0 +1,24 @@
+// Pointer location
+.ripple-pointer-location {
+ width: $ripple_size;
+ height: $ripple_size;
+ border-radius: $ripple_size * 0.5; // radius equals the size of the box to give us the curve
+ background-color: lighten(transparentize($selected_bg_color, 0.7), 30%);
+ box-shadow: 0 0 2px 2px lighten($selected_bg_color, 20%);
+}
+
+// Pointer accessibility notifications
+.pie-timer {
+ width: 60px;
+ height: 60px;
+ -pie-border-width: 3px;
+ -pie-border-color: $selected_bg_color;
+ -pie-background-color: lighten(transparentize($selected_bg_color, 0.7), 40%);
+}
+
+// Screen zoom/Magnifier
+.magnifier-zoom-region {
+ border: 2px solid $selected_bg_color;
+
+ &.full-screen { border-width: 0; }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_app-grid.scss b/gnome-shell/src/gnome-shell-sass/widgets/_app-grid.scss
new file mode 100644
index 00000000..efc6f4b6
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_app-grid.scss
@@ -0,0 +1,158 @@
+/* App Grid */
+
+$app_icon_size: 96px;
+
+// app icons
+.icon-grid {
+ row-spacing: $base_padding * 2;
+ column-spacing: $base_padding * 2;
+ max-row-spacing: $base_padding * 7;
+ max-column-spacing: $base_padding * 7;
+ page-padding-top: $base_padding * 4;
+ page-padding-bottom: $base_padding * 4;
+ page-padding-left: $base_padding * 3;
+ page-padding-right: $base_padding * 3;
+}
+
+/* App Icons */
+
+// Icon tiles in the app grid
+.app-well-app {
+ @include overview_icon($osd_fg_color);
+
+ .overview-icon { padding: $base_padding*2;}
+ .overview-icon.overview-icon-with-label {
+ > StBoxLayout {
+ spacing: $base_padding;
+ }
+ }
+}
+
+// app folders
+.app-well-app.app-folder {
+ @include overview_icon($osd_fg_color, $flat: false);
+}
+
+// expanded folder
+.app-folder-dialog {
+ border-radius: $modal_radius*2;
+ background-color: $dash_background_color;
+ border: 1px solid $borders_color_dark; // Yaru: add border
+
+ & .folder-name-container {
+ padding: 24px 36px 0;
+ spacing: 12px;
+
+ & .folder-name-label,
+ & .folder-name-entry {
+ @extend %title_1;
+ color: $osd_fg_color; // Yaru change: needed for light theme, otherwise invisible text
+ }
+ // Yaru change: needed for the light theme, otherwise dark text in orange selection, can't set selected-color here
+ & .folder-name-entry { width: 300px; background-color: lighten($osd_bg_color, 4%); border-color: $osd_outer_borders_color;}
+
+ /* FIXME: this is to keep the label in sync with the entry */
+ & .folder-name-label { padding: 5px 7px; color: $osd_fg_color; }
+
+ & .edit-folder-button {
+ @extend %button_dark; // Yaru change: fix for light theme
+ padding: 0;
+ width: 36px;
+ height: 36px;
+ border-radius: 99px;
+
+ & > StIcon { icon-size: $base_icon_size }
+ }
+ }
+
+ & .icon-grid {
+ row-spacing: $base_padding * 2;
+ column-spacing: $base_padding * 5;
+ page-padding-top: 0;
+ page-padding-bottom: 0;
+ page-padding-left: 0;
+ page-padding-right: 0;
+ }
+
+ & .page-indicators {
+ margin-bottom: 18px;
+ }
+}
+
+.app-folder-dialog-container {
+ padding: $base_padding*2;
+ width: 640px;
+ height: 640px;
+}
+
+// Running app indicator (also shown in dash)
+.app-well-app-running-dot {
+ height: 5px;
+ width: 5px;
+ border-radius:5px;
+ margin-bottom: 8px;
+ background-color: $selected_bg_color; // Yaru: we want an orange dot
+}
+
+// Rename popup for app folders
+.rename-folder-popup {
+ .rename-folder-popup-item {
+ spacing: $base_padding;
+ &:ltr, &:rtl { padding: 0 $base_padding * 2; }
+ }
+}
+
+// App Grid pagination indicators
+.page-indicator {
+ padding: $base_padding $base_padding * 2 0;
+
+ .page-indicator-icon {
+ width: 10px;
+ height: 10px;
+ border-radius: 10px; // the same as height&width
+ background-color: white;
+ }
+}
+
+.apps-scroll-view {
+ padding: 0;
+}
+
+// shutdown and other actions in the grid
+.system-action-icon {
+ background-color: rgba(0,0,0,0.8);
+ color: #fff;
+ border-radius: 99px;
+ icon-size: $app_icon_size * 0.5;
+}
+
+.page-navigation-hint {
+ width: 300px;
+
+ &.dnd {
+ background: rgba(255, 255, 255, 0.1);
+ }
+
+ &.next:ltr,
+ &.previous:rtl {
+ background-gradient-start: rgba(255, 255, 255, 0.05);
+ background-gradient-end: transparent;
+ background-gradient-direction: horizontal;
+ border-radius: $modal_radius*1.5 0px 0px $modal_radius*1.5;
+ }
+
+ &.previous:ltr,
+ &.next:rtl {
+ background-gradient-start: transparent;
+ background-gradient-end: rgba(255, 255, 255, 0.05);
+ background-gradient-direction: horizontal;
+ border-radius: 0px $modal_radius*1.5 $modal_radius*1.5 0px;
+ }
+}
+
+.page-navigation-arrow {
+ margin: 6px;
+ width: 24px;
+ height: 24px;
+ color: $osd_fg_color; // Yaru change: light theme support
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_base.scss b/gnome-shell/src/gnome-shell-sass/widgets/_base.scss
new file mode 100644
index 00000000..69ebb301
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_base.scss
@@ -0,0 +1,18 @@
+// Links
+.shell-link {
+ color: $link_color;
+
+ &:hover {
+ color: lighten($link_color, 10%);
+ }
+}
+
+// Outline for low res icons
+.lowres-icon {
+ icon-shadow: 0 1px 2px rgba(black, 0.3);
+}
+
+// Dropshadow for large icons
+.icon-dropshadow {
+ icon-shadow: 0 1px 5px rgba(black, 0.8);
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_buttons.scss b/gnome-shell/src/gnome-shell-sass/widgets/_buttons.scss
new file mode 100644
index 00000000..6a72c079
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_buttons.scss
@@ -0,0 +1,6 @@
+/* Buttons */
+
+.button {
+ @extend %button; // that's it
+ min-height: 22px;
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_calendar.scss b/gnome-shell/src/gnome-shell-sass/widgets/_calendar.scss
new file mode 100644
index 00000000..3447125f
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_calendar.scss
@@ -0,0 +1,262 @@
+/* Date/Time Menu */
+
+// overall menu
+#calendarArea {
+ padding: $base_padding - 2px;
+}
+
+// Calendar menu side column
+.datemenu-calendar-column {
+ spacing: $base_padding;
+ &:ltr {padding-left: $base_padding;}
+ &:rtl {padding-right: $base_padding;}
+ .datemenu-displays-box {spacing: $base_padding;}
+}
+
+/* today button (the date) */
+.datemenu-today-button {
+ @include card($flat: true);
+ padding: $base_padding * 1.5;
+
+ // weekday label
+ .day-label {
+ @extend %heading;
+ }
+
+ // date label
+ .date-label {
+ @extend %title_2;
+ }
+
+ &:insensitive { // Yaru change: fix insensitive state in light theme
+ .day-label, .date-label {
+ color: $insensitive_fg_color;
+ }
+ }
+}
+
+/* Calendar */
+.calendar {
+ @include card(flat);
+ margin-top: 0;
+
+ // month header
+ .calendar-month-header {
+
+ // prev/next month icons
+ .calendar-change-month-back StIcon,
+ .calendar-change-month-forward StIcon {
+ icon-size: $base_icon_size;
+ }
+
+ // month label
+ .calendar-month-label {
+ color: lighten($fg_color,5%);
+ @extend %heading;
+ padding: 8px 0;
+ }
+ .pager-button {
+ background-color: transparent;
+ height: 32px;
+ width: 32px;
+ margin: 2px;
+ border-radius: $base_border_radius - 2px;
+ &:hover, &:focus {background-color: $hover_bg_color;}
+ &:active {background-color: $active_bg_color;}
+ }
+ }
+
+ $calendar_day_size: 3em;
+
+ .calendar-day-base {
+ text-align: center;
+ margin: 2px;
+ padding: 0 !important;
+ height: $calendar_day_size !important;
+ width: $calendar_day_size !important;
+ border-radius: 99px;
+ @extend %numeric;
+ @extend %smaller;
+
+ &:hover {background-color: $hover_bg_color;}
+ &:focus {
+ background-color: mix($bg_color, $selected_bg_color, 80%);
+ // color: $selected_fg_color; // Yaru change: fix unfocused selected color
+ box-shadow:inset 0 0 0 2px transparentize($selected_bg_color, 0.4);
+ }
+
+ &:active,&:selected {
+ color: $active_fg_color;
+ background-color: $active_bg_color;
+ &:focus {
+ background-color: mix($active_bg_color, $selected_bg_color, 80%);
+ }
+ }
+
+ // day of week heading
+ &.calendar-day-heading {
+ color: $insensitive_fg_color;
+ padding-top: $base_padding;
+ height: 16px !important; // force heading to be smaller height
+ font-weight: bold;
+ @extend %smaller;
+ }
+ }
+
+ .calendar-day {}
+ .calendar-work-day {}
+ .calendar-nonwork-day {color: $insensitive_fg_color;}
+ .calendar-other-month-day {
+ color: transparentize($fg_color, 0.5);
+ &.calendar-nonwork-day {
+ color: transparentize($insensitive_fg_color, 0.5);
+ }
+ }
+
+ // Today
+ .calendar-today {
+ background-color: $selected_bg_color;
+ font-weight: 800;
+ color: $selected_fg_color !important;
+
+ &:hover,&:focus {
+ background-color:lighten($selected_bg_color, 3%);
+ color: inherit;
+ }
+
+ &:active,&:selected {
+ background-color: $selected_bg_color;
+ color: inherit;
+
+ &:hover,&:focus {
+ background-color:lighten($selected_bg_color, 3%);
+ color: inherit;
+ }
+ }
+ }
+
+ .calendar-day-with-events {
+ background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/calendar-today-light.svg"),url("resource:///org/gnome/shell/theme/calendar-today.svg"));
+ background-size: contain;
+ }
+
+ .calendar-week-number {
+ @include fontsize($base_font_size - 4);
+ font-weight: bold;
+ font-feature-settings: "tnum";
+ margin: 6px;
+ padding: 0 $base_padding;
+ border-radius: 3px;
+ background-color: darken($bg_color, 2%);
+ color: $insensitive_fg_color
+ }
+}
+
+/* Events */
+.events-button {
+ @include card;
+ padding: $base_padding * 2;
+
+ .events-box {
+ spacing: $base_padding;
+ }
+
+ .events-list {
+ spacing: 2 * $base_padding;
+ }
+
+ .events-title {
+ @extend %heading;
+ color: $insensitive_fg_color;
+ margin-bottom: $base_margin;
+ }
+
+ .event-time {
+ @extend %numeric;
+ @extend %caption;
+ color: $insensitive_fg_color;
+ }
+}
+
+/* World clocks */
+.world-clocks-button {
+ @include card;
+ padding: $base_padding * 2;
+
+ .world-clocks-grid {
+ spacing-rows: $base_padding;
+ spacing-columns: $base_padding * 2;
+ }
+
+ // title
+ .world-clocks-header {
+ @extend %heading;
+ color: $insensitive_fg_color;
+ }
+
+ // city label
+ .world-clocks-city {
+ color: $fg_color;
+ }
+
+ // timezone time
+ .world-clocks-time {
+ @extend %heading;
+ @extend %numeric;
+ color: $fg_color;
+
+ &:ltr {text-align: right;}
+ &:rtl {text-align: left;}
+ }
+
+ // timezone offset label
+ .world-clocks-timezone {
+ @extend %numeric;
+ @extend %caption;
+ color: $insensitive_fg_color;
+ }
+}
+
+/* Weather */
+.weather-button {
+ @include card;
+ padding: $base_padding * 2;
+
+ .weather-box {
+ spacing: $base_padding + $base_margin;
+ }
+
+ .weather-header-box {
+ spacing: $base_padding;
+ }
+
+ .weather-header {
+ color: $insensitive_fg_color;
+ @extend %heading;
+
+ &.location {
+ font-weight: normal;
+ }
+ }
+
+ .weather-grid {
+ spacing-rows: $base_padding;
+ spacing-columns: $base_padding * 2;
+ }
+
+ .weather-forecast-time {
+ @extend %numeric;
+ @extend %caption;
+ color: darken($fg_color,30%);
+ padding-top: 0.2em;
+ padding-bottom: 0.4em;
+ }
+
+ .weather-forecast-icon {
+ icon-size: $large_icon_size;
+ }
+
+ .weather-forecast-temp {
+ @extend %heading;
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_check-box.scss b/gnome-shell/src/gnome-shell-sass/widgets/_check-box.scss
new file mode 100644
index 00000000..53a51619
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_check-box.scss
@@ -0,0 +1,18 @@
+/* Check Boxes */
+
+// these are equal to the size of the SVG assets
+$check_height: 22px;
+$check_width: 24px;
+
+// Yaru: we also provide check box assets for the light theme
+.check-box {
+ StBoxLayout { spacing: .8em; }
+ StBin {
+ width: $check_width;
+ height: $check_height;
+ background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox-off-light.svg"), url("resource:///org/gnome/shell/theme/checkbox-off.svg"));
+ }
+ &:focus StBin { background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox-off-focused-light.svg"), url("resource:///org/gnome/shell/theme/checkbox-off-focused.svg")); }
+ &:checked StBin { background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox.svg"), url("resource:///org/gnome/shell/theme/checkbox-dark.svg")); }
+ &:focus:checked StBin { background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox-focused.svg"), url("resource:///org/gnome/shell/theme/checkbox-focused-dark.svg")); }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_corner-ripple.scss b/gnome-shell/src/gnome-shell-sass/widgets/_corner-ripple.scss
new file mode 100644
index 00000000..9137b67c
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_corner-ripple.scss
@@ -0,0 +1,15 @@
+/* Activities Ripple */
+
+$ripple_size: 50px;
+
+.ripple-box {
+ background-color: lighten(transparentize($selected_bg_color, 0.7), 40%);
+ box-shadow: 0 0 2px 2px lighten($selected_bg_color, 20%);
+ // plus + 2px for the border (box-shadow)
+ width: $ripple_size + 2px;
+ height: $ripple_size + 2px;
+ border-radius: 0 0 $ripple_size + 2px 0; // radius equals the size of the box to give us the curve
+
+ // just a simple change to the border radius position
+ &:rtl { border-radius: 0 0 0 $ripple_size + 2px; }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_dash.scss b/gnome-shell/src/gnome-shell-sass/widgets/_dash.scss
new file mode 100644
index 00000000..03958726
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_dash.scss
@@ -0,0 +1,78 @@
+/* Dash */
+
+//$dash_background_color: lighten($system_bg_color, 5%); // Yaru: we define those colors in _colors.scss for _dock.scss to use it
+$dash_placeholder_size: 32px;
+$dash_padding: $base_padding*2; // 12px
+$dash_border_radius: $modal_radius + $dash_padding;
+
+// container for the dash
+#dash {
+ @extend %caption;
+ margin-top: $dash_padding;
+
+ .placeholder {
+ // background-image: url("resource:///org/gnome/shell/theme/dash-placeholder.svg");
+ background-image:none;
+ background-size: contain;
+ height: $dash_placeholder_size;
+ }
+
+ .empty-dash-drop-target {
+ width: $dash_placeholder_size;
+ height: $dash_placeholder_size;
+ }
+
+ // Running app indicator (also shown in app grid)
+ .app-well-app-running-dot {
+ margin-bottom: 13px; // hardcoded - Yaru change: move dot a bit down
+ background-color: $selected_bg_color; // Yaru: we want an orange dot
+ }
+}
+
+// background of the dash behind app icons
+.dash-background {
+ background-color: $dash_background_color;
+ border-radius: $dash_border_radius;
+ padding: $dash_padding;
+ border: 1px solid $borders_color_dark; // Yaru: add border
+ spacing: $base_padding;
+ margin-bottom: $dash_padding;
+}
+
+// items on the dash
+.dash-item-container {
+ > * {margin: 0 2px;}
+ &:ltr:first-child {margin-left: 0;}
+ &:rtl:first-child {margin-right: 0;}
+
+ // each app item on the dash
+ .app-well-app .overview-icon {
+ padding: $base_padding;
+ }
+
+ // show apps button
+ .show-apps { @include overview_icon($osd_fg_color);}
+
+ .show-apps, .app-well-app {
+ padding-bottom: $dash_padding;
+ }
+}
+
+// separator between favourites and running apps
+.dash-separator {
+ width: 1px;
+ margin: 0 $base_margin;
+ background-color: $borders_color_dark; // Yaru change: fix light dash separator
+ margin-bottom: $dash_padding;
+}
+
+// OSD Tooltip
+.dash-label {
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border-radius: 99px;
+ padding: $base_padding $base_padding * 2;
+ text-align: center;
+ -y-offset: $base_margin * 2; // distance from the dash edge
+ border: 1px solid $borders_color_dark; // Yaru change: add border
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_dialogs.scss b/gnome-shell/src/gnome-shell-sass/widgets/_dialogs.scss
new file mode 100644
index 00000000..6ac4e8fd
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_dialogs.scss
@@ -0,0 +1,167 @@
+/* Modal Dialogs */
+
+.headline {
+ @extend %title_4;
+}
+
+.modal-dialog {
+ @extend %bubble_panel;
+
+ .modal-dialog-content-box {
+ margin: 32px 40px;
+ spacing: 32px;
+ max-width: 28em;
+ }
+
+ .modal-dialog-linked-button {
+ @extend %bubble_button;
+ }
+}
+
+/* End Session Dialog */
+.end-session-dialog {
+ width: 30em;
+
+ .end-session-dialog-battery-warning,
+ .dialog-list-title {
+ color: $warning_color;
+ }
+}
+
+/* Message Dialog */
+.message-dialog-content {
+ spacing: 18px;
+
+ .message-dialog-title {
+ text-align: center;
+ @extend %title_2;
+
+ &.lightweight { @extend %title_4;}
+ }
+ .message-dialog-description { text-align: center; }
+}
+
+/* Dialog List */
+.dialog-list {
+ spacing: 18px;
+
+ .dialog-list-title {
+ text-align: center;
+ @extend %heading;
+ }
+
+ .dialog-list-scrollview { max-height: 200px; }
+ .dialog-list-box {
+ spacing: 1em;
+
+ .dialog-list-item {
+ spacing: 1em;
+
+ .dialog-list-item-title { font-weight: bold; }
+ .dialog-list-item-description {
+ color: darken($fg_color,5%);
+ @extend %caption;
+ }
+ }
+ }
+}
+
+/* Run Dialog */
+.run-dialog {
+ .modal-dialog-content-box {
+ margin-top: 24px;
+ margin-bottom: 14px;
+ }
+ .run-dialog-entry { width: 20em; }
+ .run-dialog-description {
+ @extend %caption;
+ text-align: center;
+ color: darken($fg_color, 20%);
+ }
+}
+
+/* Password or Authentication Dialog */
+
+.prompt-dialog {
+ width: 28em;
+
+ .modal-dialog-content-box {
+ margin-bottom: 24px;
+ }
+}
+
+.prompt-dialog-password-grid {
+ spacing-rows: 8px;
+ spacing-columns: 4px;
+
+ .prompt-dialog-password-entry {
+ width: auto;
+
+ // 4px (spacing) + 16px (spinner-width)
+ &:ltr { margin-left: 20px; }
+ &:rtl { margin-right: 20px; }
+ }
+}
+
+.prompt-dialog-password-layout {
+ spacing: 8px;
+}
+
+.prompt-dialog-password-entry {
+ width: 20em;
+}
+
+.prompt-dialog-error-label,
+.prompt-dialog-info-label,
+.prompt-dialog-null-label {
+ text-align: center;
+ @extend %caption;
+}
+
+.prompt-dialog-error-label {
+ color: $warning_color;
+}
+
+
+/* Polkit Dialog */
+
+.polkit-dialog-user-layout {
+ text-align: center;
+ spacing: 8px;
+ margin-bottom: 6px;
+
+ .polkit-dialog-user-root-label { color: $warning_color; }
+}
+
+/* Audio selection dialog */
+.audio-device-selection-dialog {
+ .modal-dialog-content-box { margin-bottom: 28px; }
+ .audio-selection-box { spacing: 20px; }
+}
+
+.audio-selection-device {
+ border-radius: $base_border_radius*2;
+ &:hover,&:focus { background-color: $hover_bg_color; }
+ &:active {
+ background-color: $selected_bg_color;
+ color: $selected_fg_color;
+ }
+}
+
+.audio-selection-device-box {
+ padding: 20px;
+ spacing: 20px;
+}
+
+.audio-selection-device-icon {
+ icon-size: $base_icon_size * 4;
+}
+
+/* Welcome dialog */
+.welcome-dialog-image {
+ background-image: url("resource:///org/gnome/shell/theme/gnome-shell-start.svg");
+ background-size: contain;
+ /* Reasonable maximum dimensions */
+ height: 300px;
+ width: 300px;
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_entries.scss b/gnome-shell/src/gnome-shell-sass/widgets/_entries.scss
new file mode 100644
index 00000000..613744d9
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_entries.scss
@@ -0,0 +1,33 @@
+/* Entries */
+
+StEntry {
+ min-height: 22px; // Yaru change: fix for height shift
+ border-radius: $base_border_radius;
+ padding: 8px;
+ border-width: 1px; // Yaru change: we want bordered entries
+ color: $fg_color;
+
+ @include entry(normal);
+ &:hover { @include entry(hover);}
+ &:focus { @include entry(focus);}
+ &:insensitive { @include entry(insensitive);}
+
+ selection-background-color: $selected_bg_color;
+ selected-color: $selected_fg_color;
+
+ StIcon.capslock-warning {
+ icon-size: 16px;
+ warning-color: $warning_color;
+ padding: 0 4px;
+ }
+
+ StIcon.peek-password {
+ icon-size: $base_icon_size;
+ padding: 0 4px;
+ }
+
+ StLabel.hint-text {
+ margin-left: 2px;
+ color: transparentize($fg_color, 0.3);
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_hotplug.scss b/gnome-shell/src/gnome-shell-sass/widgets/_hotplug.scss
new file mode 100644
index 00000000..acd0265d
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_hotplug.scss
@@ -0,0 +1,10 @@
+// hotplug
+
+.hotplug-notification-item {
+ @extend %bubble_button;
+}
+
+.hotplug-notification-item-icon {
+ icon-size: 24px;
+ padding: 0 4px;
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_ibus-popup.scss b/gnome-shell/src/gnome-shell-sass/widgets/_ibus-popup.scss
new file mode 100644
index 00000000..28f89f33
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_ibus-popup.scss
@@ -0,0 +1,36 @@
+// IBus Candidate Popup
+
+.candidate-popup-boxpointer {
+ @extend .popup-menu-boxpointer;
+}
+
+.candidate-popup-content {
+ padding: $base_padding;
+ spacing: $base_padding;
+ @extend .popup-menu-content;
+}
+
+.candidate-index {
+ padding: 0;
+ padding-right: $base_padding;
+ color: $insensitive_fg_color;
+}
+
+.candidate-box {
+ padding: $base_padding $base_padding*2 $base_padding $base_padding*2;
+ border-radius: $base_border_radius;
+ &:selected { background-color: $selected_bg_color; color: $selected_fg_color; }
+ &:hover { background-color: $hover_bg_color; color: $hover_fg_color; }
+}
+
+.candidate-page-button-box {
+ height: 2em;
+ .vertical & { padding-top: $base_padding*2; }
+ .horizontal & { padding-left: $base_padding*2; }
+}
+
+.candidate-page-button { padding: $base_padding;}
+
+.candidate-page-button-previous { border-radius: $base_border_radius 0px 0px $base_border_radius; border-right-width: 0;box-shadow: none;}
+.candidate-page-button-next { border-radius: 0px $base_border_radius $base_border_radius 0px;box-shadow: none;}
+.candidate-page-button-icon { icon-size: $base_icon_size; }
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_keyboard.scss b/gnome-shell/src/gnome-shell-sass/widgets/_keyboard.scss
new file mode 100644
index 00000000..821b817e
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_keyboard.scss
@@ -0,0 +1,153 @@
+/* On-screen Keyboard */
+
+$key_size: 1.2em;
+$key_border_radius: $base_border_radius + 4px; // 12px
+$key_bg_color: if(variant=='light', $bg_color, darken($bg_color, 1%)); // Yaru: Make keyboard buttons work on both variants
+$default_key_bg_color: $key_bg_color; // Yaru: Make keyboard buttons work on both variants
+// $default_key_bg_color: if($variant=='light', darken($osd_bg_color, 11%), lighten($osd_bg_color, 2%));
+
+
+// draw keys using button function
+#keyboard { // Yaru change: Make keyboard work on both variants
+ background-color: transparentize(if($variant=='light', darken($bg_color, 5%), darken($bg_color, 15%)), 0.1);
+ // background-color: $osd_bg_color;
+ // box-shadow: inset 0 1px 0 0 $osd_outer_borders_color;
+
+ .page-indicator {
+ padding: $base_padding;
+
+ .page-indicator-icon {
+ width: 8px;
+ height: 8px;
+ }
+ }
+}
+
+// the container for individual keys
+.key-container {
+ padding: $base_margin;
+ spacing: $base_margin;
+}
+
+// the keys
+.keyboard-key {
+
+ @include fontsize($base_font_size + 5);
+ font-weight: bold;
+ min-height: $key_size;
+ min-width: $key_size;
+ border-width: 1px;
+ border-style: solid;
+ border-radius: $key_border_radius;
+ box-shadow: 0 1px 0 0 $shadow_color;
+
+ @include keyboard_key(normal, $key_bg_color, $fg_color); // Yaru change: ↑↑↑
+
+ &:focus { @include keyboard_key(focus, $key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:hover { @include keyboard_key(hover, $key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:active { @include keyboard_key(active, $key_bg_color, $fg_color); } // Yaru change: ↑↑↑
+ &:checked { @include keyboard_key(checked, $key_bg_color, $fg_color); } // Yaru change: ↑↑↑
+
+ &:grayed { //FIXMEy
+ background-color: darken($bg_color, 3%);
+ color: $fg_color; // Yaru change: ↑↑↑
+ border-color: $osd_borders_color;
+ }
+
+ // non-character keys
+ &.default-key {
+ @include keyboard_key(normal, $default_key_bg_color, $fg_color); // Yaru change: ↑↑↑
+ &:hover {@include keyboard_key(hover, $default_key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:active { @include keyboard_key(active, $default_key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:checked { @include keyboard_key(checked, $default_key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ border-radius: $key_border_radius;
+ }
+
+ // enter key is suggested-action
+ &.enter-key { // Yaru: our suggested action color is green
+ @include keyboard_key(normal, $suggested_bg_color, $selected_fg_color);
+ &:hover { @include keyboard_key(hover, $suggested_bg_color, $selected_fg_color);}
+ &:active {@include keyboard_key(active, $suggested_bg_color, $selected_fg_color);}
+ &:checked {@include keyboard_key(checked, $suggested_bg_color, $selected_fg_color);}
+ border-radius: $key_border_radius;
+ color: $osd_fg_color;
+ }
+
+ &.shift-key-lowercase {}
+
+ // pressed shift has different style
+ &.shift-key-uppercase {
+ background-color: if($variant=="light", darken($key_bg_color, 10%), lighten($key_bg_color, 20%)); // Yaru change: ↑↑↑
+ color: $fg_color; // Yaru change: ↑↑↑
+ &:hover {
+ background-color: if($variant=="light", darken($key_bg_color, 13%), lighten($key_bg_color, 25%)); // Yaru change: ↑↑↑
+ // color: lighten($osd_bg_color, 5%); // Yaru change: ↑↑↑
+ }
+ }
+
+ // size of icons on keys
+ StIcon { icon-size: 24px; }
+}
+
+// long press on a key popup
+.keyboard-subkeys { // Yaru: Make keyboard popups work on both variants
+ -arrow-border-radius: $base_border_radius*2;
+ -arrow-background-color: transparentize(if($variant=='light', darken($bg_color, 5%), darken($bg_color, 8%)), 0.1);
+ -arrow-border-width: 1px;
+ -arrow-border-color: $borders_color;
+ -arrow-base: 20px;
+ -arrow-rise: 10px;
+ -boxpointer-gap: $base_padding;
+ padding: $base_padding;
+
+ .keyboard-key {
+ @include keyboard_key(normal, $key_bg_color, $fg_color); // Yaru change: ↑↑↑
+
+ &:focus { @include keyboard_key(focus, $key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:hover { @include keyboard_key(hover, $key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:active { @include keyboard_key(active, $key_bg_color, $fg_color); } // Yaru change: ↑↑↑
+ &:checked { @include keyboard_key(checked, $key_bg_color, $fg_color); } // Yaru change: ↑↑↑
+
+ border-radius:$key_border_radius;
+ }
+}
+
+// emoji
+.emoji-page {
+ .keyboard-key {
+ background-color: transparent;
+ border: none;
+ color: initial;
+ }
+}
+
+.emoji-panel {
+ .keyboard-key:latched {
+ border-color: lighten($selected_bg_color, 5%);
+ background-color: $selected_bg_color;
+ }
+}
+
+// suggestions
+.word-suggestions {
+ @include fontsize($base_font_size + 3);
+ spacing: 12px;
+ min-height: 20pt;
+ padding: $base_padding*2;
+ color: $fg_color; // Yaru change: ↑↑↑
+
+ // each suggestion
+ StButton {
+ margin: 0 3px;
+ min-width: 32px;
+ border-radius: $base_border_radius - 2px;
+ padding: $base_padding $base_padding*3;
+
+ @include keyboard_key(undecorated, $key_bg_color, $fg_color); // Yaru change: ↑↑↑
+
+ &:focus { @include keyboard_key(focus, $key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:hover { @include keyboard_key(hover, $key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:active { @include keyboard_key(active, $key_bg_color, $fg_color); } // Yaru change: ↑↑↑
+ &:checked { @include keyboard_key(checked, $key_bg_color, $fg_color); } // Yaru change: ↑↑↑
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_login-dialog.scss b/gnome-shell/src/gnome-shell-sass/widgets/_login-dialog.scss
new file mode 100644
index 00000000..f167807c
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_login-dialog.scss
@@ -0,0 +1,233 @@
+/* Login Dialog */
+
+.login-dialog-banner-view {
+ padding-top: 24px;
+ max-width: 23em;
+}
+
+.login-dialog,
+.unlock-dialog {
+ //reset
+ border: none;
+ background-color: transparent;
+
+ $_gdm_bg: $base_color; // Yaru change: use $base_color for dark/light theme switch
+
+ .modal-dialog-button-box { spacing: 3px; }
+ .modal-dialog-button {
+ padding: 4px 18px;
+ box-shadow: 0 1px 3px rgba(0,0,0,0.2);
+ background-color: $_gdm_bg; // Yaru change: use $_gdm_bg
+ border-color: $borders_color; // Yaru change: use $borders_color
+ color: $fg_color; // Yaru change: use $fg_color for dark/light theme
+
+ $_hover_c: if($variant == 'light', darken($_gdm_bg, 15%), lighten($_gdm_bg, 5%)); // Yaru change: use $_gdm_bg and modify light theme background
+
+ // &:hover, &:focus { // Yaru: no need to change background on focus thanks to focus ring
+ &:hover {
+ background-color: $_hover_c;
+ // border-color: $_hover_c; // Yaru: don't overwrite border on hover
+ }
+ &:focus { // Yaru: add focus ring
+ border-color: $focus_border_color;
+ box-shadow: inset 0 0 0 1px $focus_border_color;
+ }
+ &:active {
+ $_active_c: if($variant == 'light', darken($_gdm_bg, 25%), darken($_gdm_bg, 5%)); // Yaru: adapt active color
+ box-shadow: none;
+ background-color: $_active_c;
+ color: transparentize($osd_fg_color, 0.3);
+ }
+ &:default {
+ @include button(default, $c:$suggested_bg_color, $tc:$selected_fg_color);
+ }
+ }
+
+ .cancel-button,
+ .switch-user-button,
+ .login-dialog-session-list-button {
+ padding: 0;
+ border-radius: 99px;
+ width: $large_icon_size;
+ height: $large_icon_size;
+ // border-color: darken($system_bg_color, 3%); // Yaru change: don't overwrite button look
+ // background-color: darken($system_bg_color, 3%); // Yaru change: don't overwrite button look
+
+ StIcon { icon-size: $base_icon_size; }
+ }
+
+ .caps-lock-warning-label,
+ .login-dialog-message { // Yaru: we want all login messages to use OSD fg color
+ color: $osd_fg_color;
+ }
+}
+
+.login-dialog-logo-bin { padding: 24px 0px; }
+.login-dialog-banner { color: darken($osd_fg_color,10%); }
+.login-dialog-button-box { width: 23em; spacing: 5px; }
+.login-dialog-message { text-align: center; }
+.login-dialog-user-selection-box { padding: 100px 0px; }
+.login-dialog-not-listed-label {
+ padding-left: 2px;
+ .login-dialog-not-listed-button:focus &,
+ .login-dialog-not-listed-button:hover & {
+ color: $osd_fg_color;
+ }
+}
+
+.login-dialog-not-listed-label {
+ @extend %caption;
+ font-weight: bold;
+ color: darken($osd_fg_color,30%);
+ padding-top: 1em;
+}
+
+.login-dialog-auth-list-view { -st-vfade-offset: 1em; }
+.login-dialog-auth-list {
+ spacing: 6px;
+ margin-left: 2em;
+}
+
+.login-dialog-auth-list-title {
+ margin-left: 2em;
+}
+
+.login-dialog-auth-list-item {
+ border-radius: $base_border_radius + 4px;
+ padding: 6px;
+ color: darken($osd_fg_color,30%);
+ &:focus, &:selected { background-color: $selected_bg_color; color: $selected_fg_color; }
+}
+
+.login-dialog-auth-list-label {
+ @include fontsize($base_font_size + 2);
+ font-weight: bold;
+ padding-left: 15px;
+
+ &:ltr { padding-left: 14px; text-align: left; }
+ &:rtl { padding-right: 14px; text-align: right; }
+}
+
+.login-dialog-user-list-view { -st-vfade-offset: 1em; }
+.login-dialog-user-list { // Yaru: we want the gray hover to work on GDM, thus the transparentized fg color
+ spacing: 12px;
+ width: 23em;
+ &:expanded .login-dialog-user-list-item:selected { background-color: transparentize($selected_fg_color, 0.9); color: $selected_fg_color; }
+ &:expanded .login-dialog-user-list-item:logged-in { border-right: 2px solid transparentize($selected_fg_color, 0.9); }
+}
+
+.login-dialog-user-list-item {
+ border-radius: $base_border_radius + 4px;
+ padding: 6px;
+ color: darken($osd_fg_color,30%);
+ &:ltr .user-widget { padding-right: 1em; }
+ &:rtl .user-widget { padding-left: 1em; }
+ .login-dialog-timed-login-indicator {
+ height: 2px;
+ margin-top: 6px;
+ background-color: $osd_fg_color;
+ }
+ &:focus .login-dialog-timed-login-indicator { background-color: $selected_fg_color; }
+}
+
+.user-widget-label {
+ color: $osd_fg_color;
+}
+
+.user-widget.horizontal .user-widget-label {
+ @include fontsize($base_font_size + 2);
+ font-weight: bold;
+ padding-left: 15px;
+
+ &:ltr { padding-left: 14px; text-align: left; }
+ &:rtl { padding-right: 14px; text-align: right; }
+}
+
+.user-widget.vertical .user-widget-label {
+ @include fontsize($base_font_size + 5);
+ text-align: center;
+ font-weight: normal;
+ padding-top: 16px;
+}
+
+.login-dialog-timed-login-indicator {
+ height: 2px;
+ background-color: darken($fg_color,40%);
+}
+
+.login-dialog-prompt-layout {
+ padding-top: 24px;
+ padding-bottom: 12px;
+ spacing: $base_padding * 2;
+ width: 23em;
+}
+
+.login-dialog-prompt-entry {
+ height: 1.5em;
+}
+
+.login-dialog-prompt-label {
+ color: darken($osd_fg_color, 20%);
+ @include fontsize($base_font_size + 1);
+ padding-top: 1em;
+}
+
+.login-dialog {
+ StEntry {
+ @if $variant=='dark' {
+ $_gdm_entry_bg: darken($system_bg_color, 3%);
+ background-color: $_gdm_entry_bg;
+ color: $fg_color;
+ }
+ }
+}
+
+// Custom styling for unlock entry
+.unlock-dialog {
+ StEntry {
+ border:none !important;
+ &, &:focus { // Yaru change: also style unfocused state
+ color: $fg_color_dark; // Yaru change: fix for light theme
+ background-color: transparentize($fg_color_dark, 0.9); // Yaru change: ↑↑↑
+ box-shadow: none; // Yaru change: remove box-shadow because of ugly render
+ }
+
+ &:insensitive { // Yaru change: fix for light theme
+ color: transparentize($fg_color_dark, 0.5);
+ background-color: transparentize($fg_color_dark, 0.95);
+ }
+
+ StLabel.hint-text { // Yaru change: fix for light theme
+ color: transparentize($fg_color_dark, 0.3);
+ }
+ }
+
+ .user-icon { // Yaru change: fix for light theme
+ background-color: transparentize($fg_color_dark,0.9);
+ color: $fg_color_dark;
+ }
+
+ .cancel-button,
+ .switch-user-button,
+ .login-dialog-session-list-button {
+ border-color: transparent;
+ background-color: transparentize($fg_color_dark, 0.9); // Yaru change: fix for light theme
+ box-shadow: none; // Yaru change: remove shadow cause to transparent bg
+
+ &,
+ &:hover,
+ &:focus,
+ &:active { // Yaru change: fix for light theme
+ color: $fg_color_dark;
+ }
+
+ &:hover,
+ &:focus { // Yaru change: ↑↑↑
+ background-color: transparentize($fg_color_dark, 0.85);
+ }
+
+ &:active { // Yaru change: ↑↑↑
+ background-color: transparentize($fg_color_dark, 0.80);
+ }
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_looking-glass.scss b/gnome-shell/src/gnome-shell-sass/widgets/_looking-glass.scss
new file mode 100644
index 00000000..8a79722f
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_looking-glass.scss
@@ -0,0 +1,148 @@
+/* Looking Glass */
+
+// Dialog
+#LookingGlassDialog {
+ background-color: $osd_bg_color;
+ border-radius: 0 0 $modal_radius $modal_radius;
+ border-top-width: 0;
+ border: 1px solid $osd_outer_borders_color;
+ color: $osd_fg_color;
+ padding: $base_padding;
+ spacing: $base_padding;
+ box-shadow: 0 2px 4px 0 rgba(0,0,0,0.1);
+
+ & > #Toolbar {
+ border: none;
+ padding: $base_padding;
+ border-radius: 0;
+ background-color: transparent;
+ spacing: $base_padding;
+
+ .lg-toolbar-button {
+ padding: $base_padding $base_padding*2;
+ @extend %button;
+
+ & > StIcon { icon-size: $base_icon_size; }
+ }
+ }
+
+ .labels {
+ spacing: $base_padding;
+ }
+
+ .notebook-tab {
+ -natural-hpadding: $base_padding*2;
+ -minimum-hpadding: $base_padding*2;
+
+ font-weight: bold;
+ padding: $base_padding $base_padding*2;
+ color: darken($osd_fg_color, 15%);
+ transition-duration: 100ms;
+ box-shadow:none;
+ border:none;
+ border-radius: $base_border_radius - 2px;
+ background-color: transparent;
+
+ &:hover {
+ color: $osd_fg_color;
+ background-color: transparentize($osd_fg_color, 0.95);
+ }
+
+ &:selected {
+ color: $osd_fg_color;
+ background-color: transparentize($osd_fg_color, 0.9);
+ }
+ }
+
+ StBoxLayout#EvalBox { padding: 4px; spacing: $base_padding; padding: $base_padding; }
+ StBoxLayout#ResultsArea { spacing: $base_padding; padding: $base_padding; }
+}
+
+.lg-dialog {
+ color: $osd_fg_color; // Yaru: needed for the light theme
+ StEntry {
+ background-color: transparentize(lighten($osd_bg_color, 5%), 0.4);
+ color: $osd_fg_color;
+ border-color: transparentize($osd_fg_color, 0.8);
+ min-height: 22px;
+ selection-background-color: $selected_bg_color;
+ selected-color: $selected_fg_color;
+ &, &:focus { // Yaru change: remove box-shadow because of ugly render
+ box-shadow: none;
+ }
+ }
+
+ .shell-link {
+ color: $link_color;
+ &:hover { color: lighten($link_color, 10%); }
+ &:active { color: darken($link_color, 10%); }
+ }
+
+ .actor-link {
+ color: $insensitive_fg_color;
+ &:hover { color: lighten($insensitive_fg_color, 20%); }
+ &:active { color: darken($insensitive_fg_color, 20%); }
+ }
+}
+
+.lg-completions-text {
+ @extend %caption;
+ font-style: italic;
+ color: $osd_fg_color; // Yaru: needed for the light theme
+}
+
+.lg-obj-inspector-title {
+ spacing: $base_padding;
+ color: $osd_fg_color; // Yaru: needed for the light theme
+}
+
+.lg-obj-inspector-button {
+ border: 1px solid $osd_borders_color;
+ padding: 4px;
+ border-radius: $base_border_radius;
+ &:hover { border: 1px solid #ffffff; }
+ color: $osd_fg_color; // Yaru: needed for the light theme
+}
+
+// Extensions
+#lookingGlassExtensions { padding: $base_padding; }
+
+.lg-extensions-list {
+ padding: $base_padding;
+ spacing: $base_padding;
+}
+
+.lg-extension {
+ padding: $base_padding*2;
+ @include card;
+}
+
+.lg-extension-name {
+ @extend %heading;
+}
+
+.lg-extension-meta {
+ spacing: $base_padding;
+}
+
+// Inspector
+#LookingGlassPropertyInspector {
+ background: $osd_bg_color;
+ border: 1px solid $osd_borders_color;
+ border-radius: $base_border_radius;
+ padding: $base_padding;
+}
+
+.lg-debug-flag-button {
+ StLabel { padding: $base_padding, 2 * $base_padding; }
+
+ color: $fg_color;
+ &:hover { color: lighten($fg_color, 20%); }
+ &:active { color: darken($fg_color, 20%); }
+}
+
+.lg-debug-flags-header {
+ padding-top: 2 * $base_padding;
+ padding: $base_padding;
+ @extend %title_2;
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_message-list.scss b/gnome-shell/src/gnome-shell-sass/widgets/_message-list.scss
new file mode 100644
index 00000000..3631ed54
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_message-list.scss
@@ -0,0 +1,176 @@
+/* Message List */
+// a.k.a. notifications in the menu
+
+// main list
+.message-list {
+ width: 29em;
+ border: solid $borders_color;
+
+ // padding and margins to account for scrollbar
+ &:ltr {margin-left: 0; margin-right: $base_margin; padding-right: $base_padding; border-right-width: 1px; }
+ &:rtl {margin-right: 0; margin-left: $base_margin; padding-left: $base_padding; border-left-width: 1px; }
+
+ .message-list-placeholder {
+ @extend %title_2;
+ color: transparentize($insensitive_fg_color, .5);
+
+ // icon size and color
+ > StIcon {
+ icon-size: $base_icon_size*3; // 48px
+ margin-bottom: $base_margin*3;
+ -st-icon-style: symbolic;
+ }
+ }
+}
+
+.message-list-sections {
+ spacing: $base_padding;
+ margin: 0;
+ padding-bottom: $base_padding;
+
+ // to account for scrollbar
+ &:ltr {margin-right: $base_margin * 3; }
+ &:rtl {margin-left: $base_margin * 3;}
+}
+
+.message-list-section,
+.message-list-section-list {
+ spacing: $base_padding;
+}
+
+// do-not-disturb + clear button
+.message-list-controls {
+ // NOTE: remove the padding if notification_bubble could remove margin for drop shadow
+ padding: $base_padding;
+ spacing: $base_padding;
+ @extend %heading;
+
+ .dnd-button {
+ // We need this because the focus outline isn't inset like for the buttons
+ // so the dnd button would grow when it gets focus if we didn't change only
+ // its color when focusing.
+ border-width: 2px;
+ border-color: transparent;
+ border-radius: 32px;
+ border-style: solid;
+
+ &:focus {
+ border-color: $focus_border_color; // Yaru: we detached focus from selected
+ }
+ }
+}
+
+// message bubbles
+.message {
+ @include card;
+
+ // icon container
+ .message-icon-bin {
+ padding: ($base_padding * 3);
+
+ &:ltr {padding-right:$base_padding;}
+ &:rtl {padding-left:$base_padding;}
+
+ // icon size and color
+ > StIcon {
+ icon-size: $large_icon_size; // 32px
+ -st-icon-style: symbolic;
+ }
+
+ // fallback
+ > .fallback-app-icon {
+ width: $base_icon_size;
+ height: $base_icon_size;
+ }
+ }
+
+ // content
+ .message-content {
+ spacing: 4px;
+ padding: ($base_padding*1.5);
+ margin-bottom: $base_margin*2;
+ }
+
+ // title
+ .message-title {
+ font-weight: bold;
+ /* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
+ padding-top: 0.57em;
+ }
+
+ // secondary container in title box
+ .message-secondary-bin {
+ padding: 0 $base_margin * 2;
+
+ // notification time stamp
+ > .event-time {
+ color: transparentize($fg_color, 0.5);
+ @include fontsize($base_font_size - 2);
+ /* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
+ padding-bottom: 0.13em;
+
+ &:ltr { text-align: right };
+ &:rtl { text-align: left };
+ }
+ }
+
+ // close button
+ .message-close-button {
+ color: $fg_color;
+ background-color: transparentize($fg_color, 0.9);
+ border-radius: 99px;
+ padding: $base_padding - 1px;
+ margin: 1px;
+ &:hover {background-color: transparentize($fg_color, 0.8);}
+ &:active {background-color: transparentize($fg_color, 0.9);}
+ }
+
+ // body
+ .message-body {color: darken($fg_color, 10%);}
+}
+
+// URLs in messages
+.url-highlighter {
+ link-color: $link_color;
+}
+
+/* Media Controls */
+.message-media-control {
+ padding: 0 $base_padding*3;
+ margin: $base_padding*2 0;
+ border-radius: $base_border_radius;
+ color: $fg_color;
+
+ // colors are lightened since the media controls are in a card
+ &:hover {
+ background-color: lighten($hover_bg_color, 5%);
+ color: $fg_color;
+ }
+
+ &:active {
+ background-color: $active_bg_color; // Yaru: make play/pause/next buttons active visible
+ color: $fg_color;
+ }
+
+ &:insensitive { color: lighten($insensitive_fg_color, 5%); }
+
+ // fix margin for last button
+ &:last-child:ltr { margin-right: $base_margin*3; }
+ &:last-child:rtl { margin-left: $base_margin*3; }
+}
+
+// album-art
+.media-message-cover-icon {
+ icon-size: $base_icon_size*3 !important; // 48px
+ border-radius: $base_border_radius;
+
+ // when there is no artwork
+ &.fallback {
+ color: darken($fg_color, 17%);
+ background-color: $bg_color;
+ border: 1px solid transparent;
+ border-radius: $base_border_radius;
+ icon-size: $large_icon_size !important; // 32px
+ padding: ($base_padding*2 + 2); // 16px
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_misc.scss b/gnome-shell/src/gnome-shell-sass/widgets/_misc.scss
new file mode 100644
index 00000000..b0794b52
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_misc.scss
@@ -0,0 +1,67 @@
+// Rubberband for select-area screenshots
+.select-area-rubberband { // Yaru: orange is too colorful here, thus use grays
+ background-color: transparentize($ash, 0.8);
+ border: 1px solid transparentize($silk, 0.2);
+}
+
+// User icon
+.user-icon {
+ /* Yaru: See commit 3d4aca768250 */
+ background-size: contain;
+ color: $fg_color;
+ border-radius: 99px;
+ icon-size: $base_icon_size * 4; // 64px
+ &:hover {
+ color: lighten($fg_color,30%);
+ }
+
+ & StIcon {
+ background-color: transparentize($fg_color,0.95);
+ border-radius: 99px;
+ padding: $base_padding * 2 ; // 12px
+ width: $base_icon_size * 2.5; height: $base_icon_size * 2.5; // 40px;
+ }
+
+ &.user-avatar {
+ border: 2px $osd_fg_color;
+ }
+}
+
+.user-widget.vertical .user-icon {
+ icon-size: $base_icon_size * 6; // 128px
+
+ & StIcon {
+ padding: $base_padding * 3 + 2px; // 20px
+ padding-top: $base_padding * 3; // 18 px
+ padding-bottom: $base_padding * 3 + 4px; // 22px
+ width: $base_icon_size * 5.5; height: $base_icon_size * 5.5; // 88px;
+ /* Yaru: See commit 3d4aca768250 */
+ }
+}
+
+.lightbox { background-color: black; }
+.flashspot { background-color: white; }
+
+
+// Hidden
+.hidden { color: rgba(0,0,0,0);}
+
+// Caps-lock warning
+.caps-lock-warning-label {
+ text-align: center;
+ padding-bottom: 8px;
+ @extend %caption;
+ color: $warning_color;
+}
+
+/* Workspace animation */
+
+.workspace-animation {
+ background-color: $system_bg_color;
+}
+
+/* Tiled window previews */
+.tile-preview {
+ background-color: transparentize($selected_bg_color,0.5);
+ border: 1px solid $selected_bg_color;
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_network-dialog.scss b/gnome-shell/src/gnome-shell-sass/widgets/_network-dialog.scss
new file mode 100644
index 00000000..11e4e676
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_network-dialog.scss
@@ -0,0 +1,48 @@
+/* Select Network dialogs */
+.nm-dialog {
+ max-height: 34em;
+ min-height: 31em;
+ min-width: 32em;
+}
+
+.nm-dialog-content {
+ spacing: 20px;
+ padding: 24px;
+}
+
+.nm-dialog-header { @extend %heading; }
+.nm-dialog-subheader { color: $insensitive_fg_color;}
+.nm-dialog-header-icon { icon-size: $large_icon_size;}
+.nm-dialog-header-hbox { spacing: 10px; }
+
+.nm-dialog-scroll-view {
+ padding:$base_padding;
+ border-radius: $base_border_radius;
+ background-color: $base_color;
+}
+
+.nm-dialog-item {
+ padding: $base_padding * 2;
+
+ &:selected {
+ background-color: $selected_bg_color;
+ border-radius: $base_border_radius - 3px;
+ color: $selected_fg_color;
+ }
+ &:hover { background-color:$hover_bg_color;}
+}
+
+.nm-dialog-icon { icon-size: $base_icon_size; }
+.nm-dialog-icons { spacing: $base_padding * 2; }
+
+// no networks
+.no-networks-box { spacing: $base_padding; }
+.no-networks-label { color: $insensitive_fg_color; }
+
+// airplane mode
+.nm-dialog-airplane-box {
+ text-align: center;
+ spacing: 12px;
+}
+.nm-dialog-airplane-headline { @extend %title_3;}
+.nm-dialog-airplane-text { color: $insensitive_fg_color;}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_notifications.scss b/gnome-shell/src/gnome-shell-sass/widgets/_notifications.scss
new file mode 100644
index 00000000..89fc0b5f
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_notifications.scss
@@ -0,0 +1,76 @@
+/* Notifications & Message Tray */
+
+$notification_banner_height: 64px;
+$notification_banner_width: 34em;
+$notification_banner_radius: $base_border_radius*1.5;
+
+// Banner notifications
+.notification-banner {
+ min-height: $notification_banner_height;
+ width: $notification_banner_width;
+ box-shadow: 0 2px 4px 2px rgba(0,0,0,0.1);
+ border-radius: $notification_banner_radius;
+ margin: $base_margin;
+ background-color: $bg_color; // Yaru change: use bg_color for better contrast with buttons
+
+ .notification-actions {
+ spacing: 0;
+ }
+
+ .notification-button {
+ @extend %bubble_button;
+ }
+
+ &:hover { // Yaru change: ↑↑↑
+ background-color: if($variant == 'light', darken($bg_color, 2%), lighten($bg_color, 2%));
+ }
+
+ &:active { // Yaru change: ↑↑↑
+ background-color: if($variant == 'light', darken($bg_color, 4%), lighten($bg_color, 4%));
+ }
+
+ // Yaru: make notifications more visible on different headerbars:
+ &, &:hover, &:focus, &:active {
+ box-shadow: 0 0 4px 2px rgba(0,0,0,0.1);
+ border: 1px solid $borders_color;
+ }
+}
+
+// counter
+.summary-source-counter {
+ font-size: $base_font_size - 1pt;
+ font-weight: bold;
+ height: 1.6em;
+ width: 1.6em;
+ -shell-counter-overlap-x: 3px;
+ -shell-counter-overlap-y: 3px;
+ background-color: $selected_bg_color;
+ color: $selected_fg_color;
+ border: 2px solid $fg_color;
+ box-shadow: 0 2px 2px rgba(0,0,0,0.5);
+ border-radius: 0.9em; // should be 0.8 but whatever; wish I could do 50%;
+}
+
+// chat bubbles
+.chat-body { spacing: 5px; }
+.chat-response { margin: 5px; }
+.chat-log-message { color: darken($fg_color,10%); }
+.chat-new-group { padding-top: 1em; }
+.chat-received {
+ padding-left: 4px;
+ &:rtl { padding-left: 0px; padding-right: 4px; }
+}
+
+.chat-sent {
+ padding-left: 18pt;
+ color: lighten($fg_color, 15%);
+ &:rtl { padding-left: 0; padding-right: 18pt; }
+}
+
+.chat-meta-message {
+ padding-left: 4px;
+ @include fontsize($base_font_size - 2);
+ font-weight: bold;
+ color: lighten($fg_color,18%);
+ &:rtl { padding-left: 0; padding-right: 4px; }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_osd.scss b/gnome-shell/src/gnome-shell-sass/widgets/_osd.scss
new file mode 100644
index 00000000..61b763eb
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_osd.scss
@@ -0,0 +1,70 @@
+/* OSD */
+
+$osd_levelbar_height:6px;
+
+.osd-window {
+ @extend %osd_panel;
+ @extend %heading;
+ text-align: center;
+ font-weight: bold;
+ spacing: $base_padding * 2; // 12px
+ padding: $base_padding * 2 $base_padding * 3;
+ & > * { spacing: 8px; }
+ margin-bottom: 4em;
+
+ StIcon { icon-size:$large_icon_size;}
+
+ StLabel {
+ &:ltr { margin-right: 6px; }
+ &:rtl { margin-left: 6px; }
+ }
+
+ .level {
+ margin-bottom: 4px;
+ &:first-child { margin-bottom: 0px; }
+
+ height: $osd_levelbar_height;
+ min-width:$base_icon_size * 10;
+ -barlevel-height: $osd_levelbar_height;
+ -barlevel-background-color: transparentize($osd_fg_color, if($variant=='light', 0.7, 0.9));
+ -barlevel-active-background-color: $osd_fg_color;
+ -barlevel-overdrive-color: $destructive_color;
+ -barlevel-overdrive-separator-width: 3px;
+ &:ltr { margin-right: 6px; }
+ &:rtl { margin-left: 6px; }
+ }
+}
+
+// Monitor number label
+.osd-monitor-label {
+ @extend %osd_panel;
+ border-radius: $modal_radius;
+ font-size: 3em;
+ font-weight: bold;
+ margin: $base_margin * 3;
+ text-align: center;
+ min-width: 1.3em;
+}
+
+/* Pad OSD */
+.pad-osd-window { // Yaru: Make pad OSD visible again in the light theme by using osd colors, should be ported to upstream
+ padding: 32px;
+ background-color: $osd_bg_color;
+ color: $osd_fg_color;
+
+ .button {
+ @extend %button;
+ &:insensitive { color: $fg_color; }
+ }
+
+ .pad-osd-title-box { spacing: 12px; }
+ .pad-osd-title-menu-box { spacing: 6px; }
+}
+
+.combo-box-label {
+ width: 15em;
+}
+
+.resize-popup {
+ @extend %osd_panel;
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_overview.scss b/gnome-shell/src/gnome-shell-sass/widgets/_overview.scss
new file mode 100644
index 00000000..d8e70eaf
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_overview.scss
@@ -0,0 +1,13 @@
+/* OVERVIEW */
+
+.controls-manager, .secondary-monitor-workspaces {
+ spacing: $base_padding * 2;
+}
+
+#overviewGroup {
+ background-color: $system_bg_color;
+}
+
+.overview-controls {
+ padding-bottom: 32px;
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_panel.scss b/gnome-shell/src/gnome-shell-sass/widgets/_panel.scss
new file mode 100644
index 00000000..cdd39fe6
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_panel.scss
@@ -0,0 +1,208 @@
+/* Top Bar */
+// a.k.a. the panel
+
+// $panel_bg_color: #000; // Yaru: we define those colors in _colors.scss for _dock.scss to use it
+// $panel_fg_color: #ccc;
+$panel_height: 1.86em; // Yaru reduce panel height
+$panel_transition_duration: 250ms; // same as the overview transition duration
+
+#panel {
+ background-color: $panel_bg_color;
+ font-weight: bold;
+ height: $panel_height;
+ @extend %numeric;
+ transition-duration: $panel_transition_duration;
+
+ // transparent panel on lock & login screens
+ &.unlock-screen,
+ &.login-screen {
+ // &:overview { Yaru change: static background into overview
+ background-color: transparent;
+ }
+
+ // panel menus
+ .panel-button {
+ font-weight: bold;
+ color: $panel_fg_color;
+ -natural-hpadding: $base_padding * 2;
+ -minimum-hpadding: $base_padding;
+ transition-duration: 150ms;
+ border: 3px solid transparent;
+ border-radius: 99px;
+
+ &.clock-display {
+ .clock {
+ transition-duration: 150ms;
+ border: 3px solid transparent;
+ border-radius: 99px;
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px $screenshot_ui_button_red;
+
+ StBoxLayout {
+ spacing: $base_padding;
+ }
+
+ StIcon {
+ icon-size: $base_icon_size;
+ }
+ }
+
+ &:active, &:overview, &:focus, &:checked {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.8);
+
+ // The clock display needs to have the background on .clock because
+ // we want to exclude the do-not-disturb indicator from the background
+ &.clock-display {
+ box-shadow: none;
+
+ .clock {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.8);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.15);
+ }
+ }
+
+ &:hover {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.85);
+ &.clock-display {
+ box-shadow: none;
+ .clock {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.85);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.1);
+ }
+ }
+
+ &:active:hover, &:overview:hover, &:focus:hover, &:checked:hover {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.75);
+ &.clock-display {
+ box-shadow: none;
+ .clock {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.75);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.2);
+ }
+ }
+
+ // status area icons
+ .system-status-icon {
+ icon-size: $base_icon_size;
+ padding: $base_padding - 1px;
+ margin: 0 $base_margin;
+ }
+
+ .panel-status-indicators-box .system-status-icon,
+ .panel-status-menu-box .system-status-icon {
+ margin: 0;
+ }
+
+ // app menu icon
+ .app-menu-icon {
+ -st-icon-style: symbolic;
+ // dimensions of the icon are hardcoded
+ }
+
+ panelActivities {
+ -natural-hpadding: $base_padding * 3;
+ }
+ }
+
+ &.unlock-screen,
+ &.login-screen,
+ &:overview {
+ .panel-button {
+ &:active, &:overview, &:focus, &:checked {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.15);
+
+ &.clock-display {
+ box-shadow: none;
+
+ .clock {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.15);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.15);
+ }
+ }
+
+ &:hover {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.10);
+ &.clock-display {
+ box-shadow: none;
+ .clock {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.10);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.1);
+ }
+ }
+
+ &:active:hover, &:overview:hover, &:focus:hover, &:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.2);
+ &.clock-display {
+ box-shadow: none;
+ .clock {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.2);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.2);
+ }
+ }
+ }
+ }
+
+ .panel-status-indicators-box,
+ .panel-status-menu-box {
+ spacing: 2px;
+ }
+
+ // spacing between power icon and (optional) percentage label
+ .power-status.panel-status-indicators-box {
+ spacing: 0;
+ }
+
+ // indicator for active
+ .screencast-indicator,
+ .remote-access-indicator { color: $warning_color; }
+}
+
+// App Menu
+#appMenu {
+ spacing: $base_padding;
+ .label-shadow { color: transparent; }
+}
+
+#appMenu .panel-status-menu-box {
+ padding: 0 $base_padding;
+ spacing: $base_padding;
+}
+
+
+// Clock
+
+.clock-display-box {
+ spacing: 2px;
+
+ .clock {
+ padding-left: $base_padding * 2;
+ padding-right: $base_padding * 2;
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_popovers.scss b/gnome-shell/src/gnome-shell-sass/widgets/_popovers.scss
new file mode 100644
index 00000000..fd2634fe
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_popovers.scss
@@ -0,0 +1,204 @@
+/* Popovers/Menus */
+
+// the popover itself
+.popup-menu-boxpointer {
+ -arrow-rise: $base_margin+2px; // distance from the panel & screen edge
+}
+
+// container of the popover menu
+.popup-menu {
+ min-width: 15em;
+ color: $fg_color;
+
+ //.popup-status-menu-item {font-weight: normal; color: pink;} //dunno what that is
+ &.panel-menu {
+ margin-bottom: 1.75em; // so it doesn't touch the bottom of the screen
+ }
+}
+
+// popover content
+.popup-menu-content {
+ padding: $base_padding;
+
+ border-radius: $modal_radius - 2px;
+ border: 1px solid $borders_edge;
+ box-shadow: 0 2px 4px 0 rgba(0,0,0,0.1);
+ background-color: $bg_color;
+}
+
+// menu items
+.popup-menu-item {
+ padding: $base_padding*1.5 $base_padding*2;
+ border-radius: $base_border_radius;
+ spacing: $base_padding;
+ transition: 0.2s all ease;
+ background-color: transparent;
+
+ &:ltr {padding-left: $base_padding;}
+ &:rtl {padding-right: $base_padding;}
+
+ &:focus, &:hover {
+ background-color: $hover_bg_color !important;
+ &:active { background-color: $active_bg_color !important;}
+ }
+
+ &:checked {background-color: $checked_bg_color !important;}
+
+ &:checked {
+ margin-bottom: 0;
+ box-shadow: inset 0 -1px 0 0 darken($checked_bg_color, 5%);
+ border-radius: $base_border_radius $base_border_radius 0 0;
+ &:focus,&:hover { background-color: if($variant == 'light', darken($checked_bg_color, 6%), lighten($checked_bg_color, 6%)) !important;} // Yaru change: add support for light theme
+ &:active { background-color: if($variant == 'light', darken($checked_bg_color, 9%), lighten($checked_bg_color, 9%)) !important;} // Yaru change: ↑↑↑
+ }
+
+ &:active {
+ background-color: if($variant == 'light', darken($checked_bg_color, 9%), lighten($checked_bg_color, 9%)); // Yaru change: ↑↑↑
+ color: $active_fg_color;
+ }
+
+ &:insensitive {color: transparentize($fg_color,0.5);}
+
+ // add margin to switches in menu items
+ .toggle-switch {
+ &:ltr { margin-left: $base_margin;}
+ &:rtl { margin-right: $base_margin;}
+ }
+}
+
+
+// all other graphical elements (sliders)
+.popup-inactive-menu-item {
+ color: $fg_color;
+ &:insensitive { color: $insensitive_fg_color; }
+}
+
+// symbolic icons in popover
+.popup-menu-arrow,
+.popup-menu-icon {
+ icon-size: 16px !important; // for some reason the variable doesn't work here
+}
+
+.popup-menu-arrow {
+}
+
+
+// popover submenus
+.popup-sub-menu {
+ background-color: $checked_bg_color;
+ border-radius: 0 0 $base_border_radius $base_border_radius;
+
+ .popup-menu-ornament {
+ min-width: $base_icon_size !important;
+ }
+
+ // submenu specific styles
+ .popup-menu-item {
+ border-radius: 0;
+ margin: 0;
+
+ &:last-child {
+ border-radius: 0 0 $base_border_radius $base_border_radius;
+ }
+
+ &:focus,&:hover { background-color: lighten($hover_bg_color, 10%) !important;}
+ &:checked {
+ background-color: lighten($checked_bg_color, 10%) !important;
+ &:focus,&:hover { background-color: lighten($checked_bg_color, 8%) !important;}
+ }
+ &:active { background-color: lighten($active_bg_color, 10%) !important;}
+ }
+
+ .popup-menu-section {
+ .popup-menu-item:last-child {
+ &:hover,&:focus { border-radius: 0;}
+ }
+ &:last-child .popup-menu-item:last-child {
+ border-radius: 0 0 $base_border_radius $base_border_radius;
+ }
+ }
+}
+
+// container for radio and check boxes
+.popup-menu-ornament {
+ @extend %heading;
+ width: 1.2em;
+ text-align: center !important;
+
+ &:ltr { text-align: right;}
+ &:rtl { text-align: left;}
+}
+
+// separator
+.popup-separator-menu-item {
+ margin: 6px 0;
+ padding:0 !important;
+ &:ltr { margin-right: $base_margin;}
+ &:rtl { margin-left: $base_margin;}
+
+ .popup-separator-menu-item-separator {
+ height: 1px; //not really the whole box
+ background-color: $borders_color;
+ }
+
+ .popup-menu-ornament {
+ width: 0 !important;
+ }
+
+ .popup-sub-menu & {
+ background-color: transparent;
+
+ // account for ornament
+ &:ltr { margin-right: 2.5em;}
+ &:rtl { margin-left: 2.5em;}
+
+ .popup-separator-menu-item-separator {
+ background-color: lighten($borders_color, 7%);
+ }
+ }
+}
+
+// desktop background menu
+.background-menu {
+ -boxpointer-gap: 0px;
+ -arrow-rise: 0px; // hide the beak on the menu
+}
+
+// system status menu
+.aggregate-menu {
+ min-width: 22em;
+
+ // this is unneeded at the top-level in this menu, hide it
+ .popup-menu-ornament { width: 0 !important; }
+
+ // lock screen, shutdown, etc. buttons
+ .popup-menu-icon {
+ -st-icon-style: symbolic;
+ &:ltr {margin-right: $base_margin*2;}
+ &:rtl {margin-left: $base_margin*2;}
+ }
+
+ // account for ornaments in submenus with padding
+ .popup-sub-menu .popup-menu-item > :first-child {
+ // this value is hardcoded for visual effect
+ &:ltr { margin-left: 1em;}
+ &:rtl { margin-right: 1em;}
+ }
+}
+
+// right-click (and panel) app menu
+.app-menu {
+ max-width: 27.25em;
+
+ // this is unneeded at the top-level in this menu, hide it
+ .popup-menu-ornament { width: 0 !important; }
+
+ .popup-inactive-menu-item:first-child {
+ // "Open Windows" label
+ > StLabel {
+ @extend %caption_heading;
+ &:ltr {margin-right: $base_margin*2;}
+ &:rtl {margin-left: $base_margin*2;}
+ }
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_screen-shield.scss b/gnome-shell/src/gnome-shell-sass/widgets/_screen-shield.scss
new file mode 100644
index 00000000..6550e5bc
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_screen-shield.scss
@@ -0,0 +1,76 @@
+/* Screen Shield */
+
+.unlock-dialog-clock {
+ color: white;
+ font-weight: 300;
+ text-align: center;
+ spacing: 24px;
+ padding-bottom: 2.5em;
+}
+
+.unlock-dialog-clock-time {
+ font-size: 64pt;
+ padding-top: 42px;
+ @extend %numeric;
+}
+
+.unlock-dialog-clock-date {
+ font-size: 16pt;
+ font-weight: normal;
+}
+
+.unlock-dialog-clock-hint {
+ font-weight: normal;
+ padding-top: 48px;
+}
+
+.unlock-dialog-notifications-container {
+ margin: 12px;
+ spacing: 6px;
+ width: 23em;
+ background-color: transparent;
+
+ .summary-notification-stack-scrollview {
+ padding-top: 0;
+ padding-bottom: 0;
+ }
+
+ .notification,
+ .unlock-dialog-notification-source {
+ padding: 12px 16px;
+ border: none;
+ background-color: transparentize($osd_fg_color,0.9);
+ color: $osd_fg_color;
+ border-radius: $modal_radius;
+
+ &.critical { background-color: transparentize($osd_fg_color,0.8) }
+ }
+}
+
+.unlock-dialog-notification-label {
+ padding: 0 0 0 12px;
+}
+
+.unlock-dialog-notification-count-text {
+ font-weight: bold;
+ padding: 0 12px;
+ color: $osd_fg_color;
+ background-color: transparentize($osd_fg_color, 0.9);
+ border-radius: 99px;
+}
+
+.screen-shield-background { //just the shadow, really
+ background: black;
+ box-shadow: 0 2px 4px rgba(0,0,0,0.6);
+}
+
+#lockDialogGroup {
+ background-color: $system_bg_color;
+}
+#unlockDialogNotifications {
+ StButton#vhandle, StButton#hhandle {
+ background-color: transparentize($bg_color,0.7);
+ &:hover, &:focus { background-color: transparentize($bg_color,0.5); }
+ &:active { background-color: transparentize($selected_bg_color,0.5); }
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_screenshot.scss b/gnome-shell/src/gnome-shell-sass/widgets/_screenshot.scss
new file mode 100644
index 00000000..6be3f948
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_screenshot.scss
@@ -0,0 +1,202 @@
+// Screenshot UI
+.icon-label-button-container {
+ spacing: $base_padding;
+ @extend %caption;
+
+ StIcon { icon-size: 32px;}
+}
+
+$screenshot_ui_panel_padding: $base_padding*3;
+$screenshot_ui_shot_cast_margin: 21px;
+$screenshot_ui_panel_border_radius: $modal_radius + $screenshot_ui_shot_cast_margin;
+$screenshot_ui_shot_cast_spacing: 3px;
+
+$screenshot_ui_button_red: $red; // Yaru: Use our palette's color
+
+.screenshot-ui-panel {
+ @extend %osd_panel;
+ border-radius: $screenshot_ui_panel_border_radius;
+ padding: $screenshot_ui_panel_padding;
+ // Reduce the bottom padding a little to accommodate the large capture button.
+ padding-bottom: $screenshot_ui_panel_padding - 6px;
+ margin-bottom: 4em;
+ spacing: $base_padding * 2;
+}
+
+.screenshot-ui-close-button {
+ @extend .window-close; // copy window close button
+ padding: $base_padding; // but with more padding
+ &.left { margin-left: 8px;}
+ &.right { margin-right: 8px;}
+}
+
+.screenshot-ui-type-button {
+ @extend %osd_button;
+ padding: $base_padding * 2 $base_padding * 3 !important;
+ border-radius: $screenshot_ui_panel_border_radius - $screenshot_ui_panel_padding;
+}
+
+.screenshot-ui-capture-button {
+ width: 36px;
+ height: 36px;
+ border-radius: 99px;
+ border: 4px $osd_fg_color;
+ padding: 4px;
+
+ .screenshot-ui-capture-button-circle {
+ background-color: $osd_fg_color;
+ transition-duration: 200ms;
+ &:hover, &:focus { background-color: $hover_bg_color;}
+ border-radius: 99px;
+ }
+
+ &:hover, &:focus {
+ .screenshot-ui-capture-button-circle {
+ background-color: darken($osd_fg_color, 15%);
+ }
+ }
+
+ &:active {
+ .screenshot-ui-capture-button-circle {
+ background-color: darken($osd_fg_color, 50%);
+ }
+ }
+
+ &:cast {
+ .screenshot-ui-capture-button-circle {
+ background-color: $screenshot_ui_button_red;
+ }
+
+ &:hover, &:focus {
+ .screenshot-ui-capture-button-circle {
+ background-color: lighten($screenshot_ui_button_red, 5%);
+ }
+ }
+
+ &:active {
+ .screenshot-ui-capture-button-circle {
+ background-color: darken($screenshot_ui_button_red, 7%);
+ }
+ }
+ }
+}
+
+.screenshot-ui-shot-cast-container {
+ background-color: $hover_bg_color;
+ border-radius: $modal_radius;
+ padding: $screenshot_ui_shot_cast_spacing;
+ spacing: $screenshot_ui_shot_cast_spacing;
+
+ &:ltr { margin-left: $screenshot_ui_shot_cast_margin - $screenshot_ui_panel_padding;}
+ &:rtl { margin-right: $screenshot_ui_shot_cast_margin - $screenshot_ui_panel_padding;}
+}
+
+.screenshot-ui-shot-cast-button {
+ padding: $base_padding $base_padding*2;
+ background-color: transparent;
+ &:hover, &:focus { background-color: lighten($hover_bg_color, 5%);}
+ &:active { background-color: lighten($active_bg_color,5%);}
+ &:checked { background-color: white; color: black;}
+
+ border-radius: $modal_radius - $screenshot_ui_shot_cast_spacing;
+
+ StIcon { icon-size: $base_icon_size;}
+}
+
+.screenshot-ui-show-pointer-button {
+ @extend %osd_button;
+ border-radius: 99px;
+ padding: $base_padding * 2 !important;
+ StIcon { icon-size: $base_icon_size;}
+}
+
+.screenshot-ui-area-indicator-shade {
+ background-color: rgba(0,0,0,.3);
+}
+
+.screenshot-ui-area-selector {
+ .screenshot-ui-area-indicator-shade {
+ background-color: rgba(0,0,0,.5);
+ }
+
+ .screenshot-ui-area-indicator-selection {
+ border: 2px white;
+ }
+}
+
+.screenshot-ui-area-selector-handle {
+ border-radius: 99px;
+ background-color: white;
+ box-shadow: 0 1px 3px 2px rgba(0,0,0,0.2);
+ width: 24px;
+ height: 24px;
+}
+
+.screenshot-ui-window-selector {
+ background-color: $system_bg_color;
+
+ .screenshot-ui-window-selector-window-container {
+ margin: 100px;
+ }
+
+ &:primary-monitor {
+ .screenshot-ui-window-selector-window-container {
+ // Make some room for the panel.
+ margin-bottom: 200px;
+ }
+ }
+}
+
+.screenshot-ui-window-selector-window-border {
+ transition-duration: 200ms;
+ border-radius: $modal_radius;
+ border: 6px transparent;
+}
+
+.screenshot-ui-window-selector-check {
+ transition-duration: 200ms;
+ color: transparent;
+ border-radius: 99px;
+ border-width: 12px;
+ icon-size: 24px;
+}
+
+.screenshot-ui-window-selector-window {
+ &:hover {
+ .screenshot-ui-window-selector-window-border {
+ border-color: darken($selected_bg_color, 15%);
+ }
+ }
+ &:checked {
+ .screenshot-ui-window-selector-window-border {
+ border-color: $selected_bg_color;
+ background-color: transparentize($selected_bg_color, 0.8);
+ }
+
+ .screenshot-ui-window-selector-check {
+ color: $selected_fg_color;
+ background-color: $selected_bg_color;
+ }
+ }
+}
+
+.screenshot-ui-screen-selector {
+ transition-duration: 200ms;
+ background-color: rgba(0,0,0,.5);
+
+ &:hover { background-color: rgba(0,0,0,.3);}
+ &:active { background-color: rgba(0,0,0,.7);}
+ &:checked {
+ background-color: transparent;
+ border: 2px white;
+ }
+}
+
+.screenshot-ui-tooltip {
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border-radius: 99px;
+ padding: $base_padding $base_padding * 2;
+ text-align: center;
+ -y-offset: 24px;
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_scrollbars.scss b/gnome-shell/src/gnome-shell-sass/widgets/_scrollbars.scss
new file mode 100644
index 00000000..77cde653
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_scrollbars.scss
@@ -0,0 +1,29 @@
+/* Scrollbars */
+
+StScrollView {
+ &.vfade { -st-vfade-offset: 68px; }
+ &.hfade { -st-hfade-offset: 68px; }
+}
+
+StScrollBar {
+ padding: 0;
+
+ StScrollView & {
+ min-width: 8px;
+ min-height: 8px;
+ }
+
+ StBin#trough {
+ border-radius: 0;
+ background-color: transparent;
+ }
+
+ StButton#vhandle, StButton#hhandle {
+ border-radius: 8px;
+ background-color: mix($fg_color, $bg_color, 30%);
+ border: 3px solid transparent; //would be nice to margin or at least to transparent
+ transition: 500ms all ease;
+ &:hover {background-color: mix($fg_color, $bg_color, 50%);}
+ &:active {background-color: mix($fg_color, $bg_color, 40%);}
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_search-entry.scss b/gnome-shell/src/gnome-shell-sass/widgets/_search-entry.scss
new file mode 100644
index 00000000..ce6c093c
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_search-entry.scss
@@ -0,0 +1,26 @@
+// Search entry
+
+$search_entry_width: 320px;
+$search_entry_height: 36px;
+
+%search_entry,
+.search-entry {
+ border-radius: $search_entry_height * 0.5; // half the height
+
+ margin-top: $base_padding * 4; // Yaru change: realign search entry due to fixed panel opacity
+ margin-bottom: $base_padding * 2; // Yaru change: realign search entry due to fixed panel opacity
+ padding: $base_padding+1 $base_padding+3;
+ width: $search_entry_width;
+
+ @include entry(normal);
+ &:hover { @include entry(hover);}
+ &:focus { @include entry(focus);}
+ &:insensitive { @include entry(insensitive);}
+
+ .search-entry-icon {
+ color: inherit;
+ icon-size: $base_icon_size;
+ margin-top: 2px; // center vertically
+ padding: 0 4px;
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_search-results.scss b/gnome-shell/src/gnome-shell-sass/widgets/_search-results.scss
new file mode 100644
index 00000000..f9155840
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_search-results.scss
@@ -0,0 +1,96 @@
+/* Search */
+
+// search overview container
+#searchResults {
+ margin: 0 $base_margin;
+}
+
+#searchResultsContent {
+ max-width: 1072px;
+}
+
+// search results sections "the boxes"
+.search-section {
+ // This should be equal to #searchResultsContent spacing
+ spacing: $base_padding*3;
+
+ // separator (unstyled)
+ .search-section-separator {
+ height: $base_margin*2; // use it as a spacer
+ background-color: transparent;
+ }
+}
+
+// content
+.search-section-content {
+ background-color: $dash_background_color; // Yaru: use same background as dash
+ border-radius: $modal_radius*1.5;
+ border: 1px solid $borders_color_dark; // Yaru: use same border-color as dash
+ color: $osd_fg_color;
+ padding: $base_padding*2;
+ margin:0 $base_margin*3;
+}
+
+%search_section_content_item {
+ @include tile_button($osd_fg_color);
+ border-radius: $base_border_radius+3px;
+}
+
+// "no results" text
+.search-statustext {
+ @extend %title_1;
+}
+
+.grid-search-results {
+ spacing: $base_padding*5;
+ margin:0 $base_margin*3;
+}
+
+// Search results with icons
+.grid-search-result {
+ @extend .app-well-app;
+}
+
+// search result provider
+.search-provider-icon {
+ @extend %search_section_content_item;
+ &:ltr {margin-right: $base_margin;}
+ &:rtl {margin-left: $base_margin;}
+
+ // content
+ .list-search-provider-content {
+ spacing: $base_padding * 2;
+
+ // provider labels
+ .list-search-provider-details {
+ width: 120px;
+ color: $osd_fg_color;
+ }
+ }
+}
+
+// search results list
+.list-search-results {
+ spacing: $base_padding;
+}
+
+// search result listitem
+.list-search-result {
+ @extend %search_section_content_item;
+
+ // content
+ .list-search-result-content {
+ spacing: $base_padding;
+ }
+
+ // list item title (with leading icon)
+ .list-search-result-title {
+ spacing: $base_padding * 2;
+ // font-weight: bold;
+ }
+
+ // list item description
+ .list-search-result-description {
+ color: $osd_insensitive_fg_color;
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_slider.scss b/gnome-shell/src/gnome-shell-sass/widgets/_slider.scss
new file mode 100644
index 00000000..18cdb0e3
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_slider.scss
@@ -0,0 +1,25 @@
+/* Slider */
+
+$slider_size: 16px;
+
+.slider {
+ // slider trough
+ -barlevel-height: 4px;
+ -barlevel-background-color: if($variant == 'light', transparentize($fg_color, 0.6), transparentize($fg_color, 0.8)); //background of the trough
+ -barlevel-border-width: 2px;
+ -barlevel-border-color: transparent; // trough border color
+ // fill style
+ -barlevel-active-background-color: $progress_bg_color; //active trough fill // Yaru change: we detached progress from selected
+ -barlevel-active-border-color: transparent;
+ // overfill style (red in this case)
+ -barlevel-overdrive-color: $destructive_color;
+ -barlevel-overdrive-border-color: transparent; //trough border when red;
+ -barlevel-overdrive-separator-width:1px;
+ // slider handler
+ -slider-handle-border-width: if($variant=='light', 1px, 0); // Yaru change: add border on light theme
+ -slider-handle-border-color: if($variant=='light', darken($alt_borders_color, 3%), transparent); // because 0 width - Yaru change: the handle border needs to be darker for the light theme
+ -slider-handle-radius: $slider_size * 0.5; // half the size of the size
+
+ color: darken(white, 1%); // Yaru change: adapt knob to gtk
+ height: if($variant == 'light', $slider_size + 2px, $slider_size); // Yaru change: increase height in light theme due to border
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_switcher-popup.scss b/gnome-shell/src/gnome-shell-sass/widgets/_switcher-popup.scss
new file mode 100644
index 00000000..2c29dd0f
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_switcher-popup.scss
@@ -0,0 +1,71 @@
+/* App Switcher */
+
+// same as dash
+$switcher_padding: $base_padding + 4px; // 10px
+$switcher_border_radius: $modal_radius + 8px;
+
+
+// the full screen container of the switcher
+.switcher-popup {
+ padding: 0;
+ spacing: $base_padding * 4;
+}
+
+// switcher onscreen panel
+.switcher-list {
+ @extend %osd_panel;
+ padding: $switcher_padding;
+ border-radius: $switcher_border_radius;
+ box-shadow: 0 8px 8px 0 rgba(0,0,0,0.1);
+
+ // container for items in list
+ .switcher-list-item-container {
+ spacing: $base_padding * 2;
+ }
+
+ // each item in the list
+ .item-box {
+ @include tile_button($osd_fg_color);
+ // override over style so mouse doesn't steal focus
+ &:hover {background: none;}
+ }
+
+ .separator {
+ width: 1px;
+ background: $borders_color;
+ }
+
+ // container of thumbnails
+ .thumbnail-box {
+ padding: 2px;
+ spacing: $base_padding;
+ }
+
+ // window thumbnail itself
+ .thumbnail {
+ width: 256px; // equal to THUMBNAIL_DEFAULT_SIZE in altTab.js
+ border-radius:$base_border_radius;
+ }
+}
+
+.switcher-arrow { // Yaru: make arrow visible in the light theme, should be ported to upstream
+ border-color: rgba(0,0,0,0);
+ color: transparentize($osd_fg_color,0.2);
+
+ &:highlighted {
+ border-color: $osd_fg_color;
+ color: $osd_fg_color;
+ }
+}
+
+// Input Source Switcher
+.input-source-switcher-symbol {
+ font-size: 34pt;
+ width: 96px;
+ height: 96px;
+}
+
+// Window cycler highlight
+.cycler-highlight {
+ border: 5px solid $selected_bg_color;
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_switches.scss b/gnome-shell/src/gnome-shell-sass/widgets/_switches.scss
new file mode 100644
index 00000000..b6d8fe83
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_switches.scss
@@ -0,0 +1,16 @@
+/* Switches */
+
+// these are equal to the size of the SVG assets
+$switch_height: 26px;
+$switch_width: 48px;
+
+.toggle-switch {
+ color: $fg_color;
+ height: $switch_height;
+ width: $switch_width;
+ background-size: contain;
+ background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/toggle-off-light.svg"),url("resource:///org/gnome/shell/theme/toggle-off.svg"));
+ &:checked {
+ background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/toggle-on-light.svg"),url("resource:///org/gnome/shell/theme/toggle-on.svg"));
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_window-picker.scss b/gnome-shell/src/gnome-shell-sass/widgets/_window-picker.scss
new file mode 100644
index 00000000..2716ad58
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_window-picker.scss
@@ -0,0 +1,54 @@
+/* Window Picker */
+
+$window_picker_spacing: $base_padding; // 6px
+$window_picker_padding: $base_padding * 2; // 12px
+
+$window_thumbnail_label_color: transparentize($osd_bg_color, 0.4);
+
+$window_close_button_color: lighten($osd_bg_color, 10%); // Yaru: lighter close button because of our darker overview bg
+$window_close_button_size: 30px;
+$window_close_button_padding: 3px;
+
+// Window picker
+.window-picker {
+ // Space between window thumbnails
+ spacing: $window_picker_spacing;
+}
+
+// Window titles
+.window-caption {
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border-radius: 99px;
+ padding: $base_padding $base_padding * 2;
+ border: 1px solid $borders_color_dark; // Yaru: add border
+}
+
+// Close button
+.window-close {
+ background-color: $window_close_button_color;
+ color: $osd_fg_color;
+ border-radius: 99px;
+ padding: $window_close_button_padding;
+ height: $window_close_button_size;
+ width: $window_close_button_size;
+ transition-duration: 300ms;
+ border: 1px solid $borders_color_dark; // Yaru: add border
+
+ & StIcon { icon-size: 24px; } // uses non standard icon size
+
+ &:hover {
+ background-color: lighten($window_close_button_color, 5%); // Yaru: lighter close button because of our darker overview bg
+ }
+
+ &:active {
+ // color: transparentize($osd_fg_color, 0.2); // Yaru: don't change icon color when :active
+ background-color: darken($window_close_button_color, 5%);
+ }
+}
+
+.workspace-background {
+ // keep in sync with BACKGROUND_CORNER_RADIUS_PIXELS in workspace.js
+ border-radius: 30px;
+ box-shadow: 0 4px 16px 4px transparentize(darken($osd_bg_color, 30%), 0.7);
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_workspace-switcher.scss b/gnome-shell/src/gnome-shell-sass/widgets/_workspace-switcher.scss
new file mode 100644
index 00000000..f06130ba
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_workspace-switcher.scss
@@ -0,0 +1,25 @@
+/* Workspace Switcher */
+
+$ws_indicator_height: $large_icon_size;
+$ws_dot_active: $ws_indicator_height / 3;
+$ws_dot_inactive: $ws_indicator_height / 6;
+
+.workspace-switcher {
+ @extend %osd_panel;
+ margin-bottom: 4em;
+ spacing: $base_padding * 2;
+ padding: $base_padding * 2 $base_padding * 3;
+}
+
+.ws-switcher-indicator {
+ background-color: transparentize($osd_fg_color,0.5);
+ padding: $ws_dot_inactive / 2;
+ margin: ($ws_indicator_height - $ws_dot_inactive) / 2;
+ border-radius: $ws_indicator_height;
+
+ &:active {
+ background-color: $osd_fg_color;
+ padding: $ws_dot_active / 2;
+ margin: ($ws_indicator_height - $ws_dot_active) / 2;
+ }
+}
diff --git a/gnome-shell/src/gnome-shell-sass/widgets/_workspace-thumbnails.scss b/gnome-shell/src/gnome-shell-sass/widgets/_workspace-thumbnails.scss
new file mode 100644
index 00000000..1fa1f24a
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-sass/widgets/_workspace-thumbnails.scss
@@ -0,0 +1,31 @@
+/* Workspace pager */
+
+// thumbnails in overview
+.workspace-thumbnails {
+ visible-width: 32px; //amount visible before hover
+ spacing: $base_padding;
+ padding: $base_padding;
+ border-color: transparent; // Yaru: adapt the workspace osd border to the dock border
+
+ .workspace-thumbnail {
+ @extend %overview_panel;
+ border-radius: 3px;
+ background-color: $dash_background_color; // Yaru: use same background as dash
+ border: 1px solid $borders_color_dark; // Yaru: use same border as dash
+ }
+
+ // drag and drop indicator
+ .placeholder {
+ background-image: url("resource:///org/gnome/shell/theme/workspace-placeholder.svg");
+ background-size: contain;
+ width: 18px;
+ }
+}
+
+// selected indicator
+.workspace-thumbnail-indicator {
+ border: 2px solid $focus_border_color; // Yaru: we detached focus from selected
+ border-radius: 3px;
+ padding: 0px;
+ // background-color: transparentize($selected_bg_color, 0.9);
+}
diff --git a/gnome-shell/src/gnome-shell-start.svg b/gnome-shell/src/gnome-shell-start.svg
new file mode 100644
index 00000000..f409cfe3
--- /dev/null
+++ b/gnome-shell/src/gnome-shell-start.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/gnome-shell.scss.in b/gnome-shell/src/gnome-shell.scss.in
new file mode 100644
index 00000000..0136af97
--- /dev/null
+++ b/gnome-shell/src/gnome-shell.scss.in
@@ -0,0 +1,77 @@
+$variant: if(@DarkVariant@, 'dark', 'light');
+$yaru_variant: '@YaruVariant@';
+$use_gresource: @UseGResource@;
+$high_contrast: @HighContrast@;
+$UPSTREAM_VARIANTS: ['dark', 'light'];
+
+@import 'sass-utils';
+
+@function is-asset-colorable($asset) {
+ $COLORABLE_ASSETS: @ColorableAssets@; // This is going to be a list.
+
+ @return list-index($COLORABLE_ASSETS, $asset) != null;
+}
+
+@function maybe-add-variant-to-colorable-asset($url) {
+ $path: str-dirname($url);
+ $path: if($path == '.', '', $path + '/');
+ $asset: str-basename($url);
+ $extension: str-extension($asset);
+ $extension: if($extension, '.' + $extension, '');
+
+ /* First remove the upstream variant (if any) from the asset */
+ @each $v in $UPSTREAM_VARIANTS {
+ $suffix: '-' + $v + $extension;
+ @if str-ends-with($asset, $suffix) {
+ $asset: str-slice($asset, 1, - (str-length($suffix) + 1)) + $extension;
+ }
+ }
+
+ @if is-asset-colorable($asset) {
+ $url: $path + str-insert($asset, '-' + $yaru_variant, str-index($asset, $extension));
+ }
+
+ @return $url;
+}
+
+@function yaru_url_handler($arg) {
+ $url: unquote($arg);
+
+ @if not $use_gresource {
+ $resource_prefix: "resource://";
+ @if str-starts-with($url, $resource_prefix) {
+ $url: str-basename($url);
+ }
+ }
+
+ $url: maybe-add-variant-to-colorable-asset($url);
+
+ @if $url != $arg {
+ @debug($arg + " -> " + $url);
+ }
+
+ @return url(quote($url));
+}
+
+@debug 'Generating GNOME Shell ' + $yaru_variant + ' theme (' + $variant +' variant, hc: '+ $high_contrast+')';
+
+@import "gnome-shell-sass/_@Colors@";
+@import "gnome-shell-sass/_drawing";
+@import "gnome-shell-sass/_common";
+@import "gnome-shell-sass/_widgets";
+@import "gnome-shell-sass/_dock";
+
+@if $high_contrast {
+ //force symbolic icons
+ stage {
+ -st-icon-style: symbolic;
+ }
+
+ .toggle-switch {
+ width: 48px;
+ background-image: yaru-url-handler("resource:///org/gnome/shell/theme/toggle-off-hc.svg");
+ &:checked {
+ background-image: yaru-url-handler("resource:///org/gnome/shell/theme/toggle-on-hc.svg");
+ }
+ }
+}
diff --git a/gnome-shell/src/install-shell.sh b/gnome-shell/src/install-shell.sh
new file mode 100755
index 00000000..fc07c034
--- /dev/null
+++ b/gnome-shell/src/install-shell.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+# -*- coding: UTF-8 -*-
+
+project_name="$1"
+destdir_prefix="${MESON_INSTALL_DESTDIR_PREFIX}/share"
+install_prefix="${MESON_INSTALL_PREFIX}/share"
+
+mkdir -p "${destdir_prefix}/themes/${project_name}"
+ln -sf "${install_prefix}/gnome-shell/theme/${project_name}" "${destdir_prefix}/themes/${project_name}/gnome-shell"
diff --git a/gnome-shell/src/meson.build b/gnome-shell/src/meson.build
new file mode 100644
index 00000000..01fbcafb
--- /dev/null
+++ b/gnome-shell/src/meson.build
@@ -0,0 +1,299 @@
+gnomeshell_theme_dir = join_paths(gnomeshell_default_theme_dir,
+ meson.project_name())
+
+styles = [
+ 'gnome-shell',
+ 'gnome-shell-high-contrast',
+]
+
+variants = [
+ 'light',
+ 'dark',
+]
+
+DEFAULT_VARIANT = get_option('gnome-shell-default-variant')
+DEFAULT_GDM_VARIANT = get_option('gdm-default-variant')
+INCLUDE_HIGH_CONTRAST_VARIANTS = false
+
+foreach accent: enabled_accent_colors
+ if enabled_accent_colors.contains(accent)
+ variants += (get_option('default') ? [accent] : [])
+ variants += (get_option('dark') ? [ accent + '-dark' ] : [])
+ endif
+endforeach
+
+if not variants.contains(DEFAULT_VARIANT)
+ error('Invalid gnome-shell default variant selected')
+endif
+
+if not variants.contains(DEFAULT_GDM_VARIANT)
+ error('Invalid default gdm variant selected')
+endif
+
+theme_css = []
+theme_sources = files(
+ run_command(
+ 'find', meson.current_source_dir(), '-name', '*.scss'
+ ).stdout().strip().split('\n')
+)
+assert(theme_sources.length() > 0, 'No theme sources found')
+
+theme_assets = files(
+ run_command(
+ 'find', meson.current_source_dir(), '-maxdepth', '1',
+ '(',
+ '-name', '*.svg',
+ '-or',
+ '-name', '*.css',
+ ')',
+ ).stdout().strip().split('\n')
+)
+
+colorable_theme_assets = files(
+ run_command(
+ 'find', meson.current_source_dir() / 'colorable-assets', '-maxdepth', '1', '-name', '*.svg'
+ ).stdout().strip().split('\n')
+)
+
+colorable_assets_names = []
+foreach asset: colorable_theme_assets
+ basename = fs.name(asset)
+ colorable_assets_names += basename
+endforeach
+
+theme_gresource_files = theme_assets
+theme_gresource_deps = []
+
+source_deps = []
+
+css_sources_path = meson.current_build_dir()
+foreach src: theme_sources
+ out_name = '___'.join('@0@'.format(src).split('/'))
+ source_deps += custom_target(out_name,
+ input: src,
+ output: out_name,
+ command: [
+ 'bash', '-c',
+ ';'.join([
+ 'output="$1/$(realpath --relative-to="'+ meson.current_source_dir() + '" $0)"',
+ 'mkdir -p "$(dirname "$output")"',
+ # Can't use proper regex ("s,\(\b\)url\(\s*(\),\1yaru-url-handler\2,g") as per
+ # https://github.com/mesonbuild/meson/issues/1564
+ 'sed "s,[[:space:]]*url[[:space:]]*(, yaru_url_handler(,g;" "$0" > "$output"',
+ ]),
+ '@INPUT@',
+ '@OUTDIR@',
+ ],
+ install: false,
+ )
+endforeach
+
+theme_gresource_xml = files('data/gnome-shell-theme.gresource.xml')[0]
+icons_gresource_xml = files('data/gnome-shell-icons.gresource.xml')[0]
+
+foreach variant: variants
+ is_dark = variant == 'dark' or variant.endswith('-dark')
+ is_variant = variant != DEFAULT_VARIANT
+ variant_base_name = is_dark ? variant.split('-dark')[0] : variant
+ variant_suffix = is_variant ? '-@0@'.format(variant) : ''
+ theme_full_name = meson.project_name() + variant_suffix
+ is_custom_accent = enabled_accent_colors.contains(variant_base_name)
+
+ install_theme_sources = not gnomeshell_user_themes_suport.disabled()
+ install_dir = gnomeshell_theme_dir + variant_suffix
+
+ accent_configuration = {
+ 'yaru_dark_variant': is_dark ? 'true' : 'false',
+ 'yaru_accent_color': is_custom_accent ? variant_base_name : 'default',
+ }
+
+ # Prepare colorable assets
+ shell_yaru_colors_defs_scss = configure_file(
+ configuration: accent_configuration + {
+ 'yaru_theme_entry_point': yaru_colors_defs_scss
+ },
+ input: accent_colors_definitions_scss,
+ output: 'gnome-shell-yaru-colors-defs-@0@.scss'.format(variant),
+ )
+
+ shell_yaru_colors_defs = custom_target(
+ 'gnome-shell-yaru-color-definitions-@0@'.format(variant),
+ input: shell_yaru_colors_defs_scss,
+ output: '@BASENAME@.css'.format(variant),
+ command: [
+ sassc, '-a', '@INPUT@', '@OUTPUT@',
+ '-I', css_sources_path / 'gnome-shell-sass',
+ ],
+ depends: source_deps,
+ depend_files: [
+ yaru_colors_defs_scss,
+ theme_sources,
+ ]
+ )
+
+ foreach colorable_asset: colorable_theme_assets
+ basename = fs.name(colorable_asset)
+
+ # We don't support other variants here...
+ if is_variant and basename.endswith('-hc.svg') and not INCLUDE_HIGH_CONTRAST_VARIANTS
+ continue
+ endif
+
+ asset_target = custom_target(
+ fs.stem(basename) + '-' + variant + '.svg',
+ input: colorable_asset,
+ output: '@BASENAME@-@0@.svg'.format(variant),
+ command: [
+ colorize_dummy_svg,
+ shell_yaru_colors_defs,
+ '--input-file', '@INPUT@',
+ '--output-folder', '@OUTDIR@',
+ '--variant', variant,
+ ],
+ depends: shell_yaru_colors_defs,
+ install: install_theme_sources,
+ install_dir: install_dir,
+ )
+ theme_gresource_files += asset_target.full_path()
+ theme_gresource_deps += asset_target
+ endforeach
+
+ # generate .css files
+ style_css = []
+ variant_styles = []
+ output_styles = []
+
+ foreach style: styles
+ stylename = style + variant_suffix
+ high_contrast = style.endswith('high-contrast')
+
+ if (is_variant and high_contrast and not INCLUDE_HIGH_CONTRAST_VARIANTS)
+ continue
+ endif
+
+ variant_styles += '@0@.css'.format(stylename)
+ output_styles += '@0@.css'.format(style)
+
+ theme_main_file = configure_file(
+ input: 'gnome-shell.scss.in',
+ output: '@0@.scss'.format(stylename),
+ configuration: {
+ 'DarkVariant': is_dark ? 'true' : 'false',
+ 'YaruVariant': variant,
+ 'UseGResource': gnomeshell_use_gresource ? 'true' : 'false',
+ 'HighContrast': high_contrast ? 'true' : 'false',
+ 'Colors': (high_contrast ? 'high-contrast-' : '') + 'colors',
+ 'ColorableAssets': '@0@'.format(colorable_assets_names),
+ },
+ )
+
+ if is_custom_accent and (not high_contrast or INCLUDE_HIGH_CONTRAST_VARIANTS)
+ theme_sources += theme_main_file
+ theme_main_file = configure_file(
+ configuration: accent_configuration + {
+ 'yaru_theme_entry_point': meson.project_build_root() / '@0@'.format(theme_main_file),
+ },
+ input: accent_colors_definitions_scss,
+ output: '@0@-accent-colors.scss'.format(stylename),
+ )
+ endif
+
+ style_css += custom_target(
+ 'style-@0@'.format(stylename),
+ input: theme_main_file,
+ output: '@0@.css'.format(stylename),
+ command: [
+ sassc, '-a', '@INPUT@', '@OUTPUT@',
+ '-I', css_sources_path,
+ '-I', meson.project_source_root() / 'common',
+ ],
+ install: install_theme_sources,
+ install_dir: install_dir,
+ depends: source_deps,
+ depend_files: theme_sources + sass_utils_scss,
+ )
+
+ theme_gresource_files += style_css[-1].full_path()
+ theme_gresource_deps += style_css[-1]
+ endforeach
+
+ # This is an hack we need to remove once meson fixes this issue:
+ # https://github.com/mesonbuild/meson/issues/2320
+ # by just making the style_css to have an output in the 'variant' subdir
+ if install_theme_sources and is_variant
+ assert(output_styles.length() == variant_styles.length(), 'Output styles length mismatch')
+ foreach i: range(output_styles.length())
+ meson.add_install_script('bash', '-c',
+ 'mv -v ${MESON_INSTALL_DESTDIR_PREFIX}/@0@ ${MESON_INSTALL_DESTDIR_PREFIX}/@1@'.format(
+ install_dir / variant_styles[i], install_dir / output_styles[i]))
+ endforeach
+ endif
+
+ # static files to copy
+ data_sources = install_theme_sources ? theme_assets : []
+
+ # install static data files
+ install_data(data_sources, install_dir: install_dir)
+
+ if install_theme_sources
+ if meson.version().version_compare('>= 0.61')
+ install_symlink('gnome-shell',
+ install_dir: gnomeshell_alt_themes_dir / theme_full_name,
+ # We could use a simpler definition, but that breaks $DESTDIR usage
+ # https://github.com/mesonbuild/meson/pull/10176
+ #pointing_to: get_option('prefix') / install_dir`
+ pointing_to: run_command(python, '-c',
+ 'import os, sys; print(os.path.relpath(sys.argv[1], sys.argv[2]))',
+ install_dir,
+ gnomeshell_alt_themes_dir / theme_full_name
+ ).stdout().strip(),
+ )
+ else
+ meson.add_install_script('install-shell.sh', theme_full_name)
+ endif
+ endif
+endforeach
+
+if gnomeshell_use_gresource
+ theme_gresource_files_xml = []
+
+ foreach gfile: theme_gresource_files
+ filepath = '@0@'.format(gfile)
+ alias = filepath[0] == '/' ? '@0@'.format(gfile).split('/')[-1] : filepath
+ if alias == 'gnome-shell@0@.css'.format(DEFAULT_GDM_VARIANT != '' ? '-' + DEFAULT_GDM_VARIANT : '')
+ # Use Yaru files for ubuntu's special gdm
+ theme_gresource_files_xml += '@0@'.format(gfile)
+ endif
+
+ if alias.endswith('.css') and filepath.contains(meson.current_build_dir())
+ # This is kept for compatibility reasons, but we may drop it once shell is updated too
+ alias = 'Yaru' / alias
+ endif
+
+ theme_gresource_files_xml += '@1@'.format(alias, gfile)
+ endforeach
+
+ gnome.compile_resources(
+ 'gnome-shell-theme',
+ configure_file(
+ input: theme_gresource_xml,
+ output: '@PLAINNAME@',
+ configuration: {
+ 'YARU_SHELL_THEME_RESOURCES': '\n '.join(theme_gresource_files_xml),
+ },
+ ),
+ dependencies: theme_gresource_deps,
+ gresource_bundle: true,
+ install: true,
+ install_dir: gnomeshell_theme_dir,
+ )
+
+ gnome.compile_resources(
+ 'gnome-shell-icons',
+ icons_gresource_xml,
+ source_dir: 'data/icons',
+ gresource_bundle: true,
+ install: true,
+ install_dir: gnomeshell_theme_dir,
+ )
+endif
diff --git a/gnome-shell/src/process-working.svg b/gnome-shell/src/process-working.svg
new file mode 100644
index 00000000..a8a1dd3a
--- /dev/null
+++ b/gnome-shell/src/process-working.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/running-indicator.svg b/gnome-shell/src/running-indicator.svg
new file mode 100644
index 00000000..4d72720b
--- /dev/null
+++ b/gnome-shell/src/running-indicator.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/src/workspace-placeholder.svg b/gnome-shell/src/workspace-placeholder.svg
new file mode 100644
index 00000000..6871b0ad
--- /dev/null
+++ b/gnome-shell/src/workspace-placeholder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/README.md b/gnome-shell/upstream/README.md
new file mode 100644
index 00000000..7f6b135b
--- /dev/null
+++ b/gnome-shell/upstream/README.md
@@ -0,0 +1,32 @@
+## Summary
+
+Do not edit the CSS directly, edit the source SCSS files and the CSS files
+will be generated automatically when building with meson + ninja and left
+inside the build directory to be incorporated into the gresource XML (you'll
+need to have sassc installed).
+
+## How to tweak the theme
+
+Yaru is a complex theme, so to keep it maintainable it's written and
+processed in SASS, the generated CSS is then transformed into a gresource
+file during gtk build and used at runtime in a non-legible or editable form.
+
+It is very likely your change will happen in the [_common.scss][common] file.
+That's where all the widget selectors are defined. Here's a rundown of
+the "supporting" stylesheets, that are unlikely to be the right place
+for a drive by stylesheet fix:
+
+| File | Description |
+| ------------------------ | ----------------- |
+| [_colors.scss][colors] | global color definitions. We keep the number of defined colors to a necessary minimum, most colors are derived from a handful of basics. It is an exact copy of the gtk+ counterpart. Light theme is used for the classic theme and dark is for GNOME3 shell default. |
+| [_drawing.scss][drawing] | drawing helper mixings/functions to allow easier definition of widget drawing under specific context. This is why Adwaita isn't 15000 LOC. |
+| [_common.scss][common] | actual definitions of style for each widget. This is where you are likely to add/remove your changes. |
+
+You can read about SASS on its [web page][sass-web]. Once you make your
+changes to the [_common.scss][common] file, you can run ninja to generate the
+final CSS files.
+
+[common]: data/theme/gnome-shell-sass/_common.scss
+[colors]: data/theme/gnome-shell-sass/_colors.scss
+[drawing]: data/theme/gnome-shell-sass/_drawing.scss
+[sass-web]: http://sass-lang.com/documentation/
diff --git a/gnome-shell/upstream/calendar-today-light.svg b/gnome-shell/upstream/calendar-today-light.svg
new file mode 100644
index 00000000..ebf45dcb
--- /dev/null
+++ b/gnome-shell/upstream/calendar-today-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/calendar-today.svg b/gnome-shell/upstream/calendar-today.svg
new file mode 100644
index 00000000..bc9b53d8
--- /dev/null
+++ b/gnome-shell/upstream/calendar-today.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/colorable-assets/README.md b/gnome-shell/upstream/colorable-assets/README.md
new file mode 100644
index 00000000..73a5bf9c
--- /dev/null
+++ b/gnome-shell/upstream/colorable-assets/README.md
@@ -0,0 +1,5 @@
+### GNOME Shell Dummy Assets
+
+These assets are the base for building the final assets that are used by the
+GNOME shell theme, needs to be generated using colorize_dummy_svg.py using
+a yaru colors definitions CSS (that will be generated at build time)
diff --git a/gnome-shell/upstream/colorable-assets/checkbox-focused.svg b/gnome-shell/upstream/colorable-assets/checkbox-focused.svg
new file mode 100644
index 00000000..ee812fc3
--- /dev/null
+++ b/gnome-shell/upstream/colorable-assets/checkbox-focused.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/colorable-assets/checkbox-off-focused.svg b/gnome-shell/upstream/colorable-assets/checkbox-off-focused.svg
new file mode 100644
index 00000000..420eb4f2
--- /dev/null
+++ b/gnome-shell/upstream/colorable-assets/checkbox-off-focused.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/colorable-assets/checkbox-off.svg b/gnome-shell/upstream/colorable-assets/checkbox-off.svg
new file mode 100644
index 00000000..cb8373f7
--- /dev/null
+++ b/gnome-shell/upstream/colorable-assets/checkbox-off.svg
@@ -0,0 +1 @@
+
diff --git a/gnome-shell/upstream/colorable-assets/checkbox.svg b/gnome-shell/upstream/colorable-assets/checkbox.svg
new file mode 100644
index 00000000..f152c948
--- /dev/null
+++ b/gnome-shell/upstream/colorable-assets/checkbox.svg
@@ -0,0 +1 @@
+
diff --git a/gnome-shell/upstream/colorable-assets/toggle-off-hc.svg b/gnome-shell/upstream/colorable-assets/toggle-off-hc.svg
new file mode 100644
index 00000000..5d60857a
--- /dev/null
+++ b/gnome-shell/upstream/colorable-assets/toggle-off-hc.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/colorable-assets/toggle-off.svg b/gnome-shell/upstream/colorable-assets/toggle-off.svg
new file mode 100644
index 00000000..79150525
--- /dev/null
+++ b/gnome-shell/upstream/colorable-assets/toggle-off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/colorable-assets/toggle-on-hc.svg b/gnome-shell/upstream/colorable-assets/toggle-on-hc.svg
new file mode 100644
index 00000000..2c110d4e
--- /dev/null
+++ b/gnome-shell/upstream/colorable-assets/toggle-on-hc.svg
@@ -0,0 +1 @@
+
diff --git a/gnome-shell/upstream/colorable-assets/toggle-on.svg b/gnome-shell/upstream/colorable-assets/toggle-on.svg
new file mode 100644
index 00000000..7e23201f
--- /dev/null
+++ b/gnome-shell/upstream/colorable-assets/toggle-on.svg
@@ -0,0 +1 @@
+
diff --git a/gnome-shell/upstream/dash-placeholder.svg b/gnome-shell/upstream/dash-placeholder.svg
new file mode 100644
index 00000000..650dfb9b
--- /dev/null
+++ b/gnome-shell/upstream/dash-placeholder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/gnome-shell-icons.gresource.xml b/gnome-shell/upstream/data/gnome-shell-icons.gresource.xml
new file mode 100644
index 00000000..c110026c
--- /dev/null
+++ b/gnome-shell/upstream/data/gnome-shell-icons.gresource.xml
@@ -0,0 +1,32 @@
+
+
+
+ scalable/actions/color-pick.svg
+ scalable/actions/carousel-arrow-next-symbolic.svg
+ scalable/actions/carousel-arrow-previous-symbolic.svg
+ scalable/actions/pointer-double-click-symbolic.svg
+ scalable/actions/pointer-drag-symbolic.svg
+ scalable/actions/pointer-primary-click-symbolic.svg
+ scalable/actions/pointer-secondary-click-symbolic.svg
+ scalable/actions/preview-close-symbolic.svg
+ scalable/actions/screenshot-ui-area-symbolic.svg
+ scalable/actions/screenshot-ui-display-symbolic.svg
+ scalable/actions/screenshot-ui-show-pointer-symbolic.svg
+ scalable/actions/screenshot-ui-window-symbolic.svg
+ scalable/actions/record-screen-symbolic.svg
+ scalable/actions/screencast-recorded-symbolic.svg
+ scalable/actions/screenshot-recorded-symbolic.svg
+ scalable/status/keyboard-caps-lock-symbolic.svg
+ scalable/status/keyboard-enter-symbolic.svg
+ scalable/status/keyboard-hide-symbolic.svg
+ scalable/status/keyboard-layout-symbolic.svg
+ scalable/status/keyboard-shift-symbolic.svg
+ scalable/status/message-indicator-symbolic.svg
+ scalable/status/no-events-symbolic.svg
+ scalable/status/no-notifications-symbolic.svg
+ scalable/status/screen-privacy-disabled-symbolic.svg
+ scalable/status/screen-privacy-symbolic.svg
+ scalable/status/stop-symbolic.svg
+
+
+
diff --git a/gnome-shell/upstream/data/gnome-shell-theme.gresource.xml b/gnome-shell/upstream/data/gnome-shell-theme.gresource.xml
new file mode 100644
index 00000000..20d1892c
--- /dev/null
+++ b/gnome-shell/upstream/data/gnome-shell-theme.gresource.xml
@@ -0,0 +1,6 @@
+
+
+
+ @YARU_SHELL_THEME_RESOURCES@
+
+
diff --git a/gnome-shell/upstream/data/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg b/gnome-shell/upstream/data/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg
new file mode 100644
index 00000000..e13eab4f
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/hicolor/scalable/apps/org.gnome.Shell.Extensions.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg b/gnome-shell/upstream/data/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg
new file mode 100644
index 00000000..f39defaa
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/hicolor/symbolic/apps/org.gnome.Shell.Extensions-symbolic.svg
@@ -0,0 +1,5 @@
+
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/carousel-arrow-next-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/carousel-arrow-next-symbolic.svg
new file mode 100644
index 00000000..cb61abde
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/carousel-arrow-next-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg
new file mode 100644
index 00000000..6db5165c
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/carousel-arrow-previous-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/color-pick.svg b/gnome-shell/upstream/data/icons/scalable/actions/color-pick.svg
new file mode 100644
index 00000000..d9af6902
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/color-pick.svg
@@ -0,0 +1,94 @@
+
+
+
+
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/pointer-double-click-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/pointer-double-click-symbolic.svg
new file mode 100644
index 00000000..f249aaae
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/pointer-double-click-symbolic.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/pointer-drag-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/pointer-drag-symbolic.svg
new file mode 100644
index 00000000..7ad81215
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/pointer-drag-symbolic.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/pointer-primary-click-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/pointer-primary-click-symbolic.svg
new file mode 100644
index 00000000..7a99169a
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/pointer-primary-click-symbolic.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/pointer-secondary-click-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/pointer-secondary-click-symbolic.svg
new file mode 100644
index 00000000..4fccfb8a
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/pointer-secondary-click-symbolic.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/preview-close-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/preview-close-symbolic.svg
new file mode 100644
index 00000000..a00fcb4a
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/preview-close-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/record-screen-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/record-screen-symbolic.svg
new file mode 100644
index 00000000..7650969f
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/record-screen-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/screencast-recorded-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/screencast-recorded-symbolic.svg
new file mode 100644
index 00000000..7ed9292f
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/screencast-recorded-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/screenshot-recorded-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/screenshot-recorded-symbolic.svg
new file mode 100644
index 00000000..20ef0f57
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/screenshot-recorded-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-area-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-area-symbolic.svg
new file mode 100644
index 00000000..3481f1b9
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-area-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-display-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-display-symbolic.svg
new file mode 100644
index 00000000..0fc86d0d
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-display-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg
new file mode 100644
index 00000000..f29009a5
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-show-pointer-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-window-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-window-symbolic.svg
new file mode 100644
index 00000000..e40bae53
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/actions/screenshot-ui-window-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/status/keyboard-caps-lock-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/status/keyboard-caps-lock-symbolic.svg
new file mode 100644
index 00000000..20734607
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/status/keyboard-caps-lock-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/status/keyboard-enter-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/status/keyboard-enter-symbolic.svg
new file mode 100644
index 00000000..eb924373
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/status/keyboard-enter-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/status/keyboard-hide-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/status/keyboard-hide-symbolic.svg
new file mode 100644
index 00000000..a899db5b
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/status/keyboard-hide-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/status/keyboard-layout-filled-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/status/keyboard-layout-filled-symbolic.svg
new file mode 100644
index 00000000..a017ab13
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/status/keyboard-layout-filled-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/status/keyboard-layout-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/status/keyboard-layout-symbolic.svg
new file mode 100644
index 00000000..a017ab13
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/status/keyboard-layout-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/status/keyboard-shift-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/status/keyboard-shift-symbolic.svg
new file mode 100644
index 00000000..3a43203e
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/status/keyboard-shift-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/status/message-indicator-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/status/message-indicator-symbolic.svg
new file mode 100644
index 00000000..fb9afe3a
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/status/message-indicator-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/status/no-events-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/status/no-events-symbolic.svg
new file mode 100644
index 00000000..baa6700a
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/status/no-events-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/status/no-notifications-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/status/no-notifications-symbolic.svg
new file mode 100644
index 00000000..f1d23d28
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/status/no-notifications-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/status/screen-privacy-disabled-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/status/screen-privacy-disabled-symbolic.svg
new file mode 100644
index 00000000..39321986
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/status/screen-privacy-disabled-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/status/screen-privacy-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/status/screen-privacy-symbolic.svg
new file mode 100644
index 00000000..ded540b7
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/status/screen-privacy-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/data/icons/scalable/status/stop-symbolic.svg b/gnome-shell/upstream/data/icons/scalable/status/stop-symbolic.svg
new file mode 100644
index 00000000..315c3f38
--- /dev/null
+++ b/gnome-shell/upstream/data/icons/scalable/status/stop-symbolic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/gnome-shell-sass/COPYING b/gnome-shell/upstream/gnome-shell-sass/COPYING
new file mode 100644
index 00000000..e55e5b8a
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/gnome-shell/upstream/gnome-shell-sass/NEWS b/gnome-shell/upstream/gnome-shell-sass/NEWS
new file mode 100644
index 00000000..e69de29b
diff --git a/gnome-shell/upstream/gnome-shell-sass/README.md b/gnome-shell/upstream/gnome-shell-sass/README.md
new file mode 100644
index 00000000..a5f219ae
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/README.md
@@ -0,0 +1,16 @@
+# GNOME Shell Sass
+GNOME Shell Sass is a project intended to allow the sharing of the
+theme sources in sass between gnome-shell and other projects like
+gnome-shell-extensions.
+
+Any changes should be done in the [GNOME Shell subtree][shell-subtree]
+and not the stand-alone [gnome-shell-sass repository][sass-repo]. They
+will then be synchronized periodically before releases.
+
+## License
+GNOME Shell Sass is distributed under the terms of the GNU General Public
+License, version 2 or later. See the [COPYING][license] file for details.
+
+[shell-subtree]: https://gitlab.gnome.org/GNOME/gnome-shell/tree/master/data/theme/gnome-shell-sass
+[sass-repo]: https://gitlab.gnome.org/GNOME/gnome-shell-sass
+[license]: COPYING
diff --git a/gnome-shell/upstream/gnome-shell-sass/_colors.scss b/gnome-shell/upstream/gnome-shell-sass/_colors.scss
new file mode 100644
index 00000000..76e5c9c3
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/_colors.scss
@@ -0,0 +1,83 @@
+// When color definition differs for dark and light variant,
+// it gets @if-ed depending on $variant
+@import 'palette';
+
+$base_color: if($variant=='light', #ffffff, lighten($jet, 4%));
+$bg_color_dark: lighten($jet, 2%);
+$bg_color: if($variant=='light', #FAFAFA, $bg_color_dark);
+$fg_color_dark: $porcelain;
+$fg_color: if($variant=='light', $inkstone, $fg_color_dark);
+
+$selected_fg_color: $accent_fg_color;
+$selected_bg_color: if($variant=='light', $accent_bg_color, darken($accent_bg_color, 4%));
+// Yaru: Ignore transformations when using dark accent colors
+$selected_bg_color: $accent_bg_color;
+$selected_borders_color: if($variant=='light', darken($selected_bg_color, 15%), darken($selected_bg_color, 30%));
+
+$borders_color_dark: lighten(desaturate(lighten($jet, 4%), 100%), 14%); // Yaru: used for dash and other dark elements on light theme
+$borders_color: if($variant=='light', darken($bg_color, 20%), $borders_color_dark);
+$alt_borders_color: if($variant=='light', darken($bg_color, 24%), darken($bg_color, 10%));
+$borders_edge: if($variant=='light', transparentize(white, 0.2), transparentize($fg_color, 0.85));
+
+$link_color: if($variant=='light', darken($selected_bg_color, 10%), lighten($selected_bg_color, 20%));
+$link_visited_color: if($variant=='light', darken($selected_bg_color, 20%), lighten($selected_bg_color, 10%));
+$top_hilight: $borders_edge;
+
+$warning_color: $yellow;
+$error_color: $red;
+$success_color: lighten($green, 5%);
+$destructive_color: if($variant=='light', $red, darken($red, 10%));
+
+$osd_fg_color: #eeeeec;
+$osd_bg_color: transparentize(lighten($jet, 2%), 0.025);
+$osd_insensitive_bg_color: transparentize(mix($osd_fg_color, opacify($osd_bg_color, 1), 10%), 0.5);
+$osd_insensitive_fg_color: mix($osd_fg_color, opacify($osd_bg_color, 1), 50%);
+$osd_borders_color: transparentize(black, 0.3);
+$osd_outer_borders_color: transparentize(white, 0.84);
+
+$shadow_color: transparentize(black, 0.9);
+
+// overview background color
+$system_bg_color: lighten($jet, 4%); // Lighten than dash but darken than bg-color
+
+//insensitive state derived colors
+$insensitive_fg_color: mix($fg_color, $bg_color, 50%);
+$insensitive_bg_color: mix($bg_color, $base_color, 60%);
+$insensitive_borders_color: $borders_color;
+
+//colors for the backdrop state, derived from the main colors.
+$backdrop_base_color: if($variant=='light', darken($base_color, 1%), lighten($base_color, 1%));
+$backdrop_bg_color: $bg_color;
+$backdrop_fg_color: mix($fg_color, $backdrop_bg_color, 80%);
+$backdrop_insensitive_color: if($variant=='light', darken($backdrop_bg_color, 15%), lighten($backdrop_bg_color, 15%));
+$backdrop_borders_color: mix($borders_color, $bg_color, 90%);
+$backdrop_dark_fill: mix($backdrop_borders_color, $backdrop_bg_color, 35%);
+
+$base_hover_color: transparentize(white, 0.8);
+$base_active_color: transparentize(white, 0.75);
+$hover_fg_color: lighten($selected_fg_color, .25);
+$active_fg_color: transparentize($selected_fg_color, .5);
+
+$panel_bg_color: darken($jet, 2%);
+$panel_fg_color: darken($porcelain, 2%);
+$dash_background_color: lighten($jet, 2%);
+$panel-alpha-value: 0.6;
+$panel_opaque_value: 0.0;
+
+$dash-alpha-value: 0.6;
+$dash-opaque-alpha-value: 0.0;
+
+//special cased widget colors
+$suggested_bg_color: if($variant=='light', lighten($green, 5%), darken($green, 5%));
+$suggested_border_color: if($variant=='light', darken($suggested_bg_color, 5%), darken($suggested_bg_color, 10%));
+$progress_bg_color: if($variant=='light', lighten($accent_bg_color, 10%), lighten($accent_bg_color, 5%));
+$checkradio_bg_color: if($variant=='light', lighten($accent_bg_color, 5%), $accent_bg_color);
+$checkradio_fg_color: $accent_fg_color;
+$switch_bg_color: if($variant=='light', $accent_bg_color, darken($accent_bg_color, 8%));
+$switch_border_color: if($variant=='light', darken($accent_bg_color, 15%), darken($borders_color, 5%));
+$focus_border_color: lighten($accent_bg_color, 14%);
+
+// Yaru: Ignore transformations when using dark accent colors
+$selected_bg_color: $accent_bg_color;
+$progress_bg_color: $accent_bg_color;
+$checkradio_bg_color: $accent_bg_color;
diff --git a/gnome-shell/upstream/gnome-shell-sass/_common.scss b/gnome-shell/upstream/gnome-shell-sass/_common.scss
new file mode 100644
index 00000000..3bc2d912
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/_common.scss
@@ -0,0 +1,235 @@
+//This is the RIGHT PLACE to edit the stylesheet
+
+//let's start by telling people not to edit the generated CSS:
+$cakeisalie: "This stylesheet is generated, DO NOT EDIT";
+/* #{$cakeisalie} */
+
+/* Copyright 2009, 2015 Red Hat, Inc.
+ *
+ * Portions adapted from Mx's data/style/default.css
+ * Copyright 2009 Intel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/* Global Values */
+
+// padding, margin and spacing
+$base_padding: 6px;
+$base_margin: 4px;
+
+// border radii
+$base_border_radius: 6px; // Yaru change: sync radius with Gtk4
+
+// radii of things that display over other things, e.g. popovers
+$modal_radius: $base_border_radius*2; // 24px
+
+// derived hover colors - Yaru: we want the hover bg to be a visible gray for dark and light shell themes
+$hover_bg_color: transparentize($fg_color, 0.9);
+$hover_fg_color: $fg_color;
+$hover_borders_color: lighten($borders_color,if($variant=='light', 5%, 5%));
+
+// derived active colors - Yaru: we want the active bg to be a visible gray for dark and light shell themes
+$active_bg_color: transparentize($fg_color, 0.8);
+$active_fg_color: darken($fg_color, if($variant=='light', 5%, 3%));
+
+// derived checked colors
+$checked_bg_color: if($variant=='light', darken($bg_color, 7%), lighten($bg_color, 9%));
+$checked_fg_color: if($variant=='light', darken($fg_color, 7%), lighten($fg_color, 9%));
+
+// fonts
+$base_font_size: 11;
+$text_shadow_color: if($variant=='light', rgba(255, 255, 255, 0.3), rgba(0, 0, 0, 0.2));
+
+// icons
+$base_icon_size: 1.09em;
+$large_icon_size: $base_icon_size*2; // 32px
+// $base_icon_size: 16px;
+
+// Stage
+stage {
+ @include fontsize($base_font_size);
+ color: $fg_color;
+}
+
+/* Common Stylings */
+
+// osd panels
+%osd_panel {
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border: 1px solid $borders_color_dark; // Yaru: use our border
+ border-radius: 999px;
+ padding: $base_padding*2;
+ box-shadow: 0 3px 9px 1px transparentize(black, 0.5); // Yaru: OSDs need to be visible on dark backgrounds
+}
+
+// Overview panels
+// for the dash and workspace switcher
+%overview_panel {
+ color: $osd_fg_color;
+ background-color: transparentize($osd_fg_color, 0.9);
+}
+
+// icon tiles
+%tile {
+ border-radius: $base_border_radius * 2; // 16px
+ padding: $base_padding;
+ spacing: $base_padding;
+ border: 2px solid transparent;
+ transition-duration: 100ms;
+ text-align: center;
+ color: $osd_fg_color; // Yaru change: fix for light theme
+}
+
+// dialogs
+%bubble_panel {
+ color: $fg_color;
+ background-color: $bg_color;
+ border-radius: $base_border_radius*1.25 + 1px;
+ border: 1px solid $borders_edge;
+}
+
+// normal button styling
+%button {
+ border-radius: $base_border_radius - 2px; // 6px
+ border-style: solid;
+ border-width: 1px;
+ font-weight: bold;
+ padding: $base_padding*.5 $base_padding*4;
+
+ @include button(normal);
+ &:focus { @include button(focus);}
+ &:hover { @include button(hover);}
+ &:insensitive { @include button(insensitive);}
+ &:active { @include button(active);}
+ &:checked { @include button(checked);}
+}
+
+%button_dark { // Yaru change: add dark variant (for light theme)
+ @extend %button;
+ @include button(normal, $tc: $fg_color_dark, $c: $bg_color_dark);
+ &:focus { @include button(focus, $tc: $fg_color_dark, $c: $bg_color_dark);}
+ &:hover { @include button(hover, $tc: $fg_color_dark, $c: $bg_color_dark);}
+ &:insensitive { @include button(insensitive, $tc: $fg_color_dark, $c: $bg_color_dark);}
+ &:active { @include button(active, $tc: $fg_color_dark, $c: $bg_color_dark);}
+ &:checked { @include button(checked, $tc: $fg_color_dark, $c: $bg_color_dark);}
+}
+
+// buttons in dialogs/notifications
+// lighter in color and have a greater radius
+
+$bubble_button_radius:$base_border_radius*1.25;
+$bubble_buttons_color: $bg_color; // Yaru change: use regular color
+
+// buttons in dialogs
+%bubble_button {
+ padding: $base_padding * 2;
+ // font-weight: bold !important; // Yaru change: use normal font weight
+
+ &:ltr {margin-right: 1px;}
+ &:rtl {margin-left: 1px;}
+
+ @include button(normal, $c:$bubble_buttons_color);
+ &:insensitive { @include button(insensitive, $c:$bubble_buttons_color);}
+ &:focus { @include button(focus, $c:$bubble_buttons_color);}
+ &:hover { @include button(hover, $c:$bubble_buttons_color);}
+ &:active { @include button(active, $c:$bubble_buttons_color);} // Yaru change: add missing active state
+
+ &:first-child:ltr {
+ border-radius: 0 0 0 $bubble_button_radius;
+ }
+
+ &:last-child:ltr {
+ border-radius: 0 0 $bubble_button_radius 0;
+ margin-right: 0 !important;
+ }
+
+ &:first-child:rtl {
+ border-radius: 0 0 $bubble_button_radius 0;
+ margin-left: 0 !important;
+ }
+
+ &:last-child:rtl {
+ border-radius: 0 0 0 $bubble_button_radius;
+ margin-right: 0 !important;
+ }
+
+ &:first-child:last-child {
+ border-radius: 0 0 $bubble_button_radius $bubble_button_radius !important;
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ }
+}
+
+// buttons on OSD elements
+// that are undecorated by default and use OSD colors
+%osd_button {
+ @include button(undecorated);
+ &:insensitive { @include button(undecorated, $tc:$osd_fg_color, $c:$osd_bg_color);}
+ &:focus { @include button(focus, $tc:$osd_fg_color, $c:$osd_bg_color);}
+ &:hover { @include button(hover, $tc:$osd_fg_color, $c:$osd_bg_color);}
+ &:active { @include button(active, $tc:$osd_fg_color, $c:$osd_bg_color);}
+ &:outlined,&:checked { @include button(checked, $tc:$osd_fg_color, $c:$osd_bg_color);}
+}
+
+/* General Typography */
+
+%large_title {
+ font-weight: 300;
+ @include fontsize(24);
+}
+
+%title_1 {
+ font-weight: 800;
+ @include fontsize(20);
+}
+
+%title_2 {
+ font-weight: 800;
+ @include fontsize(15);
+}
+
+%title_3 {
+ font-weight: 700;
+ @include fontsize(15);
+}
+
+%title_4 {
+ font-weight: 700;
+ @include fontsize(13);
+}
+
+%heading {
+ font-weight: 700;
+ @include fontsize(11);
+}
+
+%caption_heading {
+ font-weight: 700;
+ @include fontsize(9);
+}
+
+%caption {
+ font-weight: 400;
+ @include fontsize(9);
+}
+
+%smaller {
+ font-weight: 400;
+ @include fontsize(8);
+}
+
+%monospace {font-family: monospace;}
+%numeric { font-feature-settings: "tnum";}
diff --git a/gnome-shell/upstream/gnome-shell-sass/_dock.scss b/gnome-shell/upstream/gnome-shell-sass/_dock.scss
new file mode 100644
index 00000000..5ddfb403
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/_dock.scss
@@ -0,0 +1,416 @@
+/* Default Ubuntu Dock styling, append !important to any changed rules
+ This must be in sync with
+ - https://github.com/micheleg/dash-to-dock/blob/ubuntu-dock/_stylesheet.scss
+ */
+
+$dash_bottom_margin: $base_margin * 4;
+$dash_spacing: round($base_padding / 4);
+
+// Stock
+$dash_edge_items_padding: $dash_padding - $dash_spacing;
+$dock_start_margin: $dash_bottom_margin;
+$dock_side_margin: $dock_start_margin / 4;
+$dock_fixed_inner_margin: $dock_side_margin;
+
+// Adapted to $dock_bottom_margin
+
+@function shrink($val) {
+ @return round($val / 4);
+}
+
+@function shrink_light($val) {
+ @return round($val * 0.75);
+}
+
+@function is_horizontal($side) {
+ @return $side == top or $side == bottom;
+}
+
+@function opposite($val) {
+ @return map-get(
+ (
+ left: right,
+ right: left,
+ top: bottom,
+ bottom: top,
+ ),
+ $val
+ );
+}
+
+$osd_fg_color: #eeeeec;
+
+@each $side in bottom, top, left, right {
+ #dashtodockContainer.#{$side} {
+ #dash {
+ margin: 0px;
+ padding: 0px;
+
+ .dash-background {
+ margin: 0;
+ margin-#{$side}: $dock_side_margin;
+ padding: 0;
+ }
+
+ .dash-separator {
+ background-color: transparentize($osd_fg_color, 0.7);
+ @if is_horizontal($side) {
+ margin-bottom: 0;
+ } @else {
+ height: 1px;
+ margin: ($dash_spacing + ($dash_padding / 2)) 0;
+ }
+ }
+
+ #dashtodockDashContainer {
+ padding: $dash_padding;
+ padding-#{$side}: 0;
+ padding-#{opposite($side)}: 0;
+ }
+
+ .dash-item-container {
+ .app-well-app,
+ .show-apps {
+ padding: $dash_spacing;
+ padding-#{$side}: $dash_padding + $dock_side_margin;
+ padding-#{opposite($side)}: $dash_padding;
+ }
+
+ .app-well-app {
+ &.running .overview-icon {
+ background-image: none;
+ }
+ &.focused .overview-icon {
+ background-color: rgba(238, 238, 236, 0.2);
+ }
+ }
+
+ > StButton {
+ transition-duration: 250;
+ background-size: contain;
+ }
+ }
+ }
+
+ &.shrink {
+ #dash {
+ .dash-background {
+ margin-#{$side}: $dock_side_margin;
+ padding: shrink($dash_padding);
+ border-radius: shrink_light($dash_border_radius);
+ }
+
+ #dashtodockDashContainer {
+ padding: shrink($dash_padding);
+ }
+
+ .dash-item-container {
+ .app-well-app,
+ .show-apps {
+ padding: shrink($dash_spacing);
+ padding-#{$side}: shrink($dash_padding) + $dock_side_margin;
+ padding-#{opposite($side)}: shrink($dash_padding);
+ }
+ }
+ }
+
+ &.fixed {
+ #dash {
+ .dash-background {
+ margin-#{opposite($side)}: shrink($dock_fixed_inner_margin);
+ }
+
+ .dash-item-container {
+ .app-well-app,
+ .show-apps {
+ padding-#{opposite($side)}: shrink($dash_padding + $dock_fixed_inner_margin);
+ }
+ }
+ }
+ }
+ }
+
+ &.fixed {
+ #dash {
+ .dash-background {
+ margin-#{opposite($side)}: $dock_fixed_inner_margin;
+ }
+
+ .dash-item-container {
+ .app-well-app,
+ .show-apps {
+ padding-#{opposite($side)}: $dash_padding + $dock_fixed_inner_margin;
+ }
+ }
+ }
+ }
+ }
+}
+
+@mixin padded-edge-child($chid, $side, $padding) {
+ @if $chid == first {
+ @if is_horizontal($side) {
+ padding-left: $padding;
+ } @else {
+ padding-top: $padding;
+ }
+ } @else if $chid == last {
+ @if is_horizontal($side) {
+ padding-right: $padding;
+ } @else {
+ padding-bottom: $padding;
+ }
+ } @else {
+ @error "Invalid rule";
+ }
+}
+
+/* In extended mode we need to use the first and last .dash-item-container's
+ * to apply the padding on the dock, to ensure that the actual first or last
+ * child show-apps item will actually include the padding area so that it will
+ * be clickable up to the dock edge, and make Fitts happy.
+ * I don't think the same should happen for normal icons, so in the other side
+ * the padding will be applied via the scrolled area, given we can't get the
+ * parent of the first/last app-well-app icon to apply a rule there.
+ */
+@mixin padded-dash-edge-items($side, $padding) {
+ @each $child_pos in first, last {
+ > :#{$child_pos}-child {
+ /* Use this instead of #dashtodockDashScrollview rule to apply the
+ * padding via the last app-icon item */
+ // .dash-item-container:#{$child_pos}-child .app-well-app,
+ .show-apps {
+ @include padded-edge-child($child_pos, $side, $padding);
+ }
+ }
+
+ #dashtodockDashScrollview:#{$child_pos}-child {
+ @include padded-edge-child($child_pos, $side, $padding);
+ }
+ }
+}
+
+@each $side in bottom, top, left, right {
+ #dashtodockContainer.extended.#{$side} {
+ #dash {
+ .dash-background {
+ margin: 0;
+ border-radius: 0;
+ }
+
+ #dashtodockDashContainer {
+ padding: 0;
+ padding-#{$side}: 0;
+ padding-#{opposite($side)}: 0;
+
+ @include padded-dash-edge-items($side, $dash_edge_items_padding);
+ }
+
+ .dash-item-container {
+ .app-well-app,
+ .show-apps {
+ padding-#{$side}: $dash_padding;
+ padding-#{opposite($side)}: $dash_padding;
+ }
+ }
+ }
+
+ &.shrink {
+ #dash {
+ #dashtodockDashContainer {
+ padding: 0;
+
+ @include padded-dash-edge-items($side, $dash_edge_items_padding);
+ }
+
+ .dash-item-container {
+ .app-well-app,
+ .show-apps {
+ padding-#{$side}: shrink($dash_padding);
+ padding-#{opposite($side)}: shrink($dash_padding);
+ }
+ }
+ }
+ }
+
+ &.shrink.fixed {
+ #dash {
+ .dash-background {
+ margin-#{opposite($side)}: 0;
+ }
+ }
+ }
+ }
+}
+
+#dashtodockContainer.top.shrink #dash .dash-background {
+ margin-top: 4px;
+ margin-bottom: 0;
+}
+
+#dashtodockContainer.straight-corner #dash .dash-background,
+#dashtodockContainer.shrink.straight-corner #dash .dash-background {
+ border-radius: 0px;
+}
+
+/* Scrollview style */
+.bottom #dashtodockDashScrollview,
+.top #dashtodockDashScrollview {
+ -st-hfade-offset: 24px;
+}
+
+.left #dashtodockDashScrollview,
+.right #dashtodockDashScrollview {
+ -st-vfade-offset: 24px;
+}
+
+#dashtodockContainer.dashtodock #dash .dash-background {
+ background: #2e3436;
+}
+
+#dashtodockContainer.dashtodock .progress-bar {
+ /* Customization of the progress bar style, e.g.:
+ -progress-bar-background: rgba(0.8, 0.8, 0.8, 1);
+ -progress-bar-border: rgba(0.9, 0.9, 0.9, 1);
+ */
+}
+
+#dashtodockContainer.top #dash .placeholder,
+#dashtodockContainer.bottom #dash .placeholder {
+ width: 32px;
+ height: 1px;
+}
+
+/*
+ * This is applied to a dummy actor. Only the alpha value for the background and border color
+ * and the transition-duration are used
+ */
+#dashtodockContainer.dummy-opaque {
+ background-color: rgba(0, 0, 0, 0.8);
+ border-color: rgba(0, 0, 0, 0.4);
+ transition-duration: 300ms;
+}
+
+/*
+ * This is applied to a dummy actor. Only the alpha value for the background and border color
+ * and the transition-duration are used
+ */
+#dashtodockContainer.dummy-transparent {
+ background-color: rgba(0, 0, 0, 0.2);
+ border-color: rgba(0, 0, 0, 0.1);
+ transition-duration: 500ms;
+}
+
+#dashtodockContainer .number-overlay {
+ color: rgba(255, 255, 255, 1);
+ background-color: rgba(0, 0, 0, 0.8);
+ text-align: center;
+}
+
+#dashtodockContainer .notification-badge {
+ color: rgba(255, 255, 255, 1);
+ background-color: rgba(255, 0, 0, 1);
+ padding: 0.2em 0.5em;
+ border-radius: 1em;
+ font-weight: bold;
+ text-align: center;
+ margin: 2px;
+}
+
+#dashtodockPreviewSeparator.popup-separator-menu-item-horizontal {
+ width: 1px;
+ height: auto;
+ border-right-width: 1px;
+ margin: 32px 0px;
+}
+
+.dashtodock-app-well-preview-menu-item {
+ padding: 1em 1em 0.5em 1em;
+}
+
+#dashtodockContainer .metro .overview-icon {
+ border-radius: 0px;
+}
+
+@for $i from 2 through 4 {
+ #dashtodockContainer.bottom .metro.running#{$i}.focused,
+ #dashtodockContainer.top .metro.running#{$i}.focused {
+ background-image: url("./media/highlight_stacked_bg.svg");
+ background-position: 0px 0px;
+ background-size: contain;
+ }
+
+ #dashtodockContainer.left .metro.running#{$i}.focused,
+ #dashtodockContainer.right .metro.running#{$i}.focused {
+ background-image: url("./media/highlight_stacked_bg_h.svg");
+ background-position: 0px 0px;
+ background-size: contain;
+ }
+}
+
+/* Yaru Dock styling */
+
+$dock_color: $panel_bg_color;
+
+@each $side in bottom, top, left, right {
+ #dashtodockContainer.#{$side} {
+ #dash,
+ &.dashtodock #dash,
+ &.shrink #dash {
+ margin: 0px;
+ padding: 0px;
+
+ .dash-background {
+ background: transparentize($dock_color, 0.25);
+ transition-duration: $panel_transition_duration;
+ }
+
+ .dash-separator {
+ background: transparentize($osd_fg_color, 0.7);
+ }
+ }
+
+ &.overview {
+ #dash,
+ &.dashtodock #dash,
+ &.shrink #dash {
+ .dash-background {
+ background-color: $dock_color;
+ }
+ }
+ }
+
+ &.extended {
+ #dash,
+ &.dashtodock #dash,
+ &.shrink #dash {
+ .dash-background {
+ // Yaru: remove the border we apply to the upstream dock
+ border: none;
+ }
+ }
+
+ &.shrink #dash #dashtodockDashContainer {
+ // Yaru: do not shrink start/end padding in shrink mode
+ @include padded-dash-edge-items($side, $dash_edge_items_padding);
+ }
+ }
+
+ .dash-item-container {
+ .show-apps, .app-well-app {
+ border-radius: $dash_border_radius;
+ &:active, &:checked {
+ .overview-icon {
+ background-color: $base_active_color; box-shadow: none;
+ }
+ }
+ }
+ }
+
+ .notification-badge {
+ background-color: $success_color;
+ border: 1px solid darken($success_color,10%);
+ box-shadow: -1px 1px 5px 0px transparentize(black, 0.5);
+ }
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/_drawing.scss b/gnome-shell/upstream/gnome-shell-sass/_drawing.scss
new file mode 100644
index 00000000..e9c5ecf2
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/_drawing.scss
@@ -0,0 +1,321 @@
+// Drawing mixins
+
+// generic drawing of more complex things
+
+@function draw_widget_edge($c:$borders_edge) {
+// outer highlight "used" on most widgets
+ @return 0 1px $c;
+}
+
+// provide font size in rem, with px fallback
+@mixin fontsize($size: 24, $base: 16) {
+ font-size: round($size) + pt;
+ //font-size: ($size / $base) * 1rem;
+}
+
+@mixin draw_shadows($shadow1, $shadow2:none, $shadow3:none, $shadow4:none) {
+//
+// Helper function to stack up to 4 box-shadows;
+//
+ @if $shadow4!=none { box-shadow: $shadow1, $shadow2, $shadow3, $shadow4; }
+ @else if $shadow3!=none { box-shadow: $shadow1, $shadow2, $shadow3; }
+ @else if $shadow2!=none { box-shadow: $shadow1, $shadow2; }
+ @else { box-shadow: $shadow1; }
+}
+
+// entries
+
+@mixin entry($t, $fc:$focus_border_color) { // Yaru: we detached focus from selected
+//
+// Entries drawing function
+//
+// $t: entry type
+// $fc: focus color
+//
+// possible $t values:
+// normal, focus, insensitive
+//
+
+ @if $t==normal {
+ background-color: if($variant == 'light', lighten($bg_color, 5%), $dash_background_color); // Yaru: use same background as dash for dark theme
+ color: transparentize($fg_color,0.3);
+ border: 1px solid $borders_color; // Yaru change: use our own border-color
+ }
+
+ @if $t==focus {
+ background-color: if($variant == 'light', lighten($bg_color, 5%), $dash_background_color); // Yaru: use same background as dash for dark theme
+ border-color: $fc;
+ box-shadow: 0 0 0 1px $fc inset; // Yaru change: trick to get 2px border on focus without layout shifting
+ color: $fg_color;
+ &:hover {}
+ }
+
+ @if $t==hover {
+ background-color: if($variant == 'light', lighten($bg_color, 5%), $dash_background_color); // Yaru: use same background as dash for dark theme
+ border-color: $hover_borders_color; // Yaru change: don't change color on hover
+ color: $fg_color; // Yaru change: don't change color on hover
+ }
+
+ @if $t==insensitive {
+ background-color:lighten($insensitive_bg_color, 5%);
+ border-color: lighten($insensitive_bg_color, 5%);
+ color: $insensitive_fg_color;
+ }
+}
+
+// On-screen Keyboard
+@mixin keyboard_key($t, $c:$osd_bg_color, $tc:$osd_fg_color) {
+// Yaru: FIXME:?! Make keyboard work in both variants
+//
+// Keyboard key drawing function
+//
+// $t: key type,
+// $c: base key color for colored* types
+// $tc: optional text color for colored* types
+//
+// possible $t values:
+// normal, hover, active, insensitive, insensitive-active,
+// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
+// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
+//
+
+ // normal key
+ @if $t==normal {
+ color: $tc;
+ background-color: lighten($c, 3%);
+ }
+
+ // focused key
+ @if $t==focus {
+ color: $tc;
+ background-color: mix(lighten($c, 3%), $selected_bg_color, 90%);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4);
+ &:hover {
+ background-color: mix(lighten($c, 8%), $selected_bg_color, 90%);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3);
+ }
+ &:active {
+ background-color: mix(lighten($c, 10%), $selected_bg_color, 90%);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.3);
+ }
+ }
+
+ // hover key
+ @else if $t==hover {
+ color: $tc;
+ background-color: if($variant=="light", lighten($c, 1%), lighten($c, 7%)); // Yaru change: Make keyboard work on both variants
+ }
+
+ // active key
+ @else if $t==active {
+ color: $tc;
+ background-color: if($variant=="light", darken($c, 2%), lighten($c, 10%)); // Yaru change: ↑↑↑
+ }
+
+ // checked key
+ @else if $t==checked {
+ color: $tc;
+ background-color: if($variant=="light", darken($c, 5%), lighten($c, 15%)); // Yaru change: ↑↑↑
+ }
+
+ // insensitive key
+ @else if $t==insensitive {
+ color: $insensitive_fg_color;
+ background-color: $insensitive_bg_color;
+ }
+
+ // reset
+ @else if $t==undecorated {
+ background-color: transparent;
+ background-image: none;
+ }
+}
+
+
+// buttons
+// since buttons are all flat an borderless now the mixin is simpler
+
+@mixin button($t, $tc:$fg_color, $c:$bg_color) {
+
+$button_bg_color: mix($tc, $c, 7%); // Yaru change: increase contrast
+//
+// Button drawing function
+//
+// $t: button type,
+// $c: base button colors, derived from fg_color
+// $tc: base button colors, derived from fg_color
+//
+// possible $t values:
+// normal, hover, active, insensitive, insensitive-active,
+// backdrop, backdrop-active, backdrop-insensitive, backdrop-insensitive-active,
+// osd, osd-hover, osd-active, osd-insensitive, osd-backdrop, undecorated
+//
+
+ // normal button
+ @if $t==normal {
+ color: $tc;
+ background-color: $button_bg_color;
+ }
+
+ // focused button
+ @if $t==focus {
+ color: $tc;
+ background-color: $button_bg_color; // Yaru: keep regular bg on focused buttons
+ box-shadow: inset 0 0 0 2px $focus_border_color; // Yaru: we detached focus from selected
+ &:hover {
+ background-color: if($variant == 'light', darken($button_bg_color, 3%), lighten($button_bg_color, 3%)); // Yaru: keep regular bg on focused buttons
+ box-shadow: inset 0 0 0 2px $focus_border_color; // Yaru: we detached focus from selected
+ }
+ &:active {
+ background-color: if($variant == 'light', darken($button_bg_color, 6%), lighten($button_bg_color, 6%)); // Yaru: keep regular bg on focused buttons
+ box-shadow: inset 0 0 0 2px $focus_border_color; // Yaru: we detached focus from selected
+ }
+ }
+
+ // hover button
+ @else if $t==hover {
+ color: $tc;
+ background-color: if($variant == 'light', darken($button_bg_color, 3%), lighten($button_bg_color, 3%)); // Yaru change: adapt for light theme
+ }
+
+ // active button
+ @else if $t==active {
+ color: $tc;
+ background-color: if($variant == 'light', darken($button_bg_color, 6%), lighten($button_bg_color, 6%)); // Yaru change: adapt for light theme
+ }
+
+ // checked button
+ @else if $t==checked {
+ color: $tc;
+ background-color: if($variant == 'light', darken($button_bg_color, 9%), lighten($button_bg_color, 9%)); // Yaru change: adapt for light theme
+ &:hover { background-color: if($variant == 'light', darken($button_bg_color, 12%), lighten($button_bg_color, 12%));} // Yaru change: ↑↑↑
+ &:active { background-color: if($variant == 'light', darken($button_bg_color, 15%), lighten($button_bg_color, 15%));} // Yaru change: ↑↑↑
+ }
+
+ // insensitive button
+ @else if $t==insensitive {
+ color: transparentize($tc, 0.5);
+ background-color: transparentize($tc, .95);
+ }
+
+ // default/suggested button
+ @else if $t==default {
+ background-color: $selected_bg_color;
+ color: $selected_fg_color;
+ &:focus {
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, 0.4);
+ }
+ &:hover, &:focus {
+ background-color: lighten($selected_bg_color, 5%);
+ color: lighten($selected_fg_color, 5%);
+ }
+ &:active {
+ background-color: darken($selected_bg_color, 7%);
+ color: darken($selected_fg_color, 7%);
+ }
+ &:insensitive {
+ @include button(insensitive);
+ background-color: transparentize($selected_bg_color, .5);
+ color: transparentize($selected_fg_color, .5);
+ }
+ }
+
+ // reset
+ @else if $t==undecorated {
+ background-color: transparent;
+ background-color: none;
+ &:insensitive {
+ @include button(insensitive);
+ background-color: transparent;
+ color: transparentize($selected_fg_color, .5);
+ }
+ }
+}
+
+// tile
+@mixin tile_button($color, $flat: true) {
+ @extend %tile;
+ @if $flat {
+ background-color: transparent;
+ } @else {
+ background-color: transparentize($color, .84);
+ }
+ &:hover { background-color: transparentize($color, .9);}
+ &:selected, &:focus {
+ background-color: transparentize($color, .87);
+ &:hover { background-color: transparentize($color, .84);}
+ &:active { background-color: transparentize($color, .87);}
+ }
+ &:active { background-color: transparentize($color, .84);}
+ &:outlined, &:checked {
+ background-color: transparentize($color, .81);
+ &:active { background-color: transparentize($color, .78);}
+ &:hover { background-color: transparentize($color, .75);}
+ }
+ &:drop {
+ border: 2px solid transparentize($selected_bg_color, .2); //already 2px transparent so no jumping
+ background-color: transparentize($selected_bg_color, .8);
+ }
+}
+
+// overview icon, dash, app grid
+@mixin overview_icon($color, $flat: true) {
+ .overview-icon { @extend %tile; }
+ @if $flat {
+ .overview-icon { background-color: transparent;}
+ } @else {
+ .overview-icon { background-color: transparentize($color, .95);} // Yaru change: softer non-flat icon
+ }
+ &:hover .overview-icon { background-color: transparentize($color, .9);}
+
+ &:selected .overview-icon,
+ &:focus .overview-icon {
+ background-color: transparentize($color, .87);
+ &:hover .overview-icon { background-color: transparentize($color, .84);}
+ &:active .overview-icon { background-color: transparentize($color, .87);}
+ }
+ &:active .overview-icon { background-color: transparentize($color, .84);}
+ &:outlined .overview-icon,
+ &:checked .overview-icon {
+ background-color: transparentize($color, .81);
+ &:active .overview-icon { background-color: transparentize($color, .78);}
+ &:hover .overview-icon { background-color: transparentize($color, .75);}
+ }
+ &:drop .overview-icon {
+ border: 2px solid transparentize($selected_bg_color, .2); //already 2px transparent so no jumping
+ background-color: transparentize($selected_bg_color, .8);
+ }
+ &:focus,
+ &:active,
+ &:checked {
+ .overview-icon {
+ background-color: transparentize($color, .8); // Yaru: use lighten color instead of dark color
+ }
+ }
+}
+
+// styling for elements within popovers that look like notifications
+@mixin card($flat: false) {
+ border-radius: $base_border_radius;
+ margin: $base_margin;
+ box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
+
+ @if $flat {
+ @include button(undecorated);
+ box-shadow: none !important;
+ } @else {
+ @include button(normal);
+ }
+
+ &:focus {
+ @include button(focus);
+ }
+
+ &:hover {
+ @include button(hover);
+ }
+
+ &:active {
+ @include button(active);
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/_high-contrast-colors.scss b/gnome-shell/upstream/gnome-shell-sass/_high-contrast-colors.scss
new file mode 100644
index 00000000..ccdee87e
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/_high-contrast-colors.scss
@@ -0,0 +1,47 @@
+// When color definition differs for dark and light variant,
+// it gets @if ed depending on $variant
+
+$base_color: #222;
+$bg_color: #000;
+$fg_color: #fff;
+
+$selected_fg_color: #ffffff;
+$selected_bg_color: darken(#4a90d9,20%);
+$selected_borders_color: darken($selected_bg_color, 20%);
+$borders_color: darken($bg_color,12%);
+$borders_edge: transparentize($fg_color, 0.9);
+$link_color: lighten($selected_bg_color,20%);
+$link_visited_color: lighten($selected_bg_color,10%);
+
+$warning_color: #f57900;
+$error_color: #cc0000;
+$success_color: darken(#73d216,10%);
+$destructive_color: darken(#ef2929,10%);
+
+$osd_fg_color: #eeeeec;
+$osd_bg_color: #2e3436;
+$osd_borders_color: rgba(0,0,0, 0.7);
+$osd_outer_borders_color: rgba(255,255,255, 0.1);
+$osd_insensitive_bg_color: mix($osd_fg_color, $osd_bg_color, 10%);
+$osd_insensitive_fg_color: if($variant == 'light', mix($osd_fg_color, $osd_bg_color, 80%), mix($osd_fg_color, $osd_bg_color, 70%));
+
+$shadow_color: rgba(0,0,0, 0.1);
+$system_bg_color: desaturate(#241f31,100%); //neutralize the HIG color
+
+//insensitive state derived colors
+$insensitive_fg_color: mix($fg_color, $bg_color, 50%);
+$insensitive_bg_color: mix($bg_color, $base_color, 60%);
+$insensitive_borders_color: $borders_color;
+
+//colors for the backdrop state, derived from the main colors.
+$backdrop_base_color: lighten($base_color,1%);
+$backdrop_bg_color: $bg_color;
+$backdrop_fg_color: mix($fg_color, $backdrop_bg_color, 80%);
+$backdrop_insensitive_color: lighten($backdrop_bg_color,15%);
+$backdrop_borders_color: mix($borders_color, $bg_color, 90%);
+$backdrop_dark_fill: mix($backdrop_borders_color,$backdrop_bg_color, 35%);
+
+// Yaru: we need hc and imports to for our build to work:
+$variant: hc;
+@import "palette";
+@import "colors";
diff --git a/gnome-shell/upstream/gnome-shell-sass/_palette.scss b/gnome-shell/upstream/gnome-shell-sass/_palette.scss
new file mode 100644
index 00000000..979b0156
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/_palette.scss
@@ -0,0 +1,41 @@
+// Blacks
+$jet: #181818;
+$inkstone: #3D3D3D;
+$slate: #5D5D5D;
+$graphite: #666666;
+
+// Whites
+$white: #FFFFFF;
+$porcelain: #F7F7F7;
+$silk: #CCC;
+$warm_gray: #AEA79F;
+$ash: #878787;
+
+// Purples
+$aubergine: #924D8B;
+$purple: #762572;
+$light_aubergine: #77216F;
+$mid_aubergine: #5E2750;
+$dark_aubergine: #2C001E;
+
+// Reds
+$red: #c7162b;
+
+// Oranges
+$orange: #E95420;
+
+// Yellows
+$yellow: #f99b11;
+
+// Greens
+$green: #0e8420;
+
+// Blues
+$blue: #19B6EE;
+$linkblue: #007aa6;
+$darkblue: #335280;
+
+
+// Semantic colors
+$accent_bg_color: $orange !default;
+$accent_fg_color: $white !default;
diff --git a/gnome-shell/upstream/gnome-shell-sass/_widgets.scss b/gnome-shell/upstream/gnome-shell-sass/_widgets.scss
new file mode 100644
index 00000000..b7ecce4a
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/_widgets.scss
@@ -0,0 +1,62 @@
+//
+// Shell widgets stylesheets are placed in separate .scss files
+// in 'widgets' and imported into the main stylesheet in this file.
+// To create or update a widget for the shell modify the list below.
+//
+
+/* WIDGETS */
+
+// Primary widgets
+@import 'widgets/base';
+@import 'widgets/entries';
+@import 'widgets/buttons';
+@import 'widgets/check-box';
+@import 'widgets/switches';
+@import 'widgets/slider';
+@import 'widgets/scrollbars';
+// Popovers
+@import 'widgets/popovers';
+@import 'widgets/calendar';
+@import 'widgets/message-list';
+@import 'widgets/ibus-popup';
+// Notifications
+@import 'widgets/notifications';
+@import 'widgets/hotplug';
+// Dialogs
+@import 'widgets/dialogs';
+@import 'widgets/network-dialog';
+// OSDs
+@import 'widgets/osd';
+@import 'widgets/switcher-popup';
+@import 'widgets/workspace-switcher';
+@import 'widgets/screenshot';
+// Panel
+@import 'widgets/panel';
+@import 'widgets/corner-ripple';
+// Overview
+@import 'widgets/overview';
+@import 'widgets/window-picker';
+@import 'widgets/search-entry';
+@import 'widgets/search-results';
+@import 'widgets/dash';
+@import 'widgets/app-grid';
+@import 'widgets/workspace-thumbnails';
+// A11y / misc
+@import 'widgets/a11y';
+@import 'widgets/misc';
+@import 'widgets/keyboard';
+@import 'widgets/looking-glass';
+// Lock / login screens
+@import 'widgets/login-dialog';
+@import 'widgets/screen-shield';
+
+// Yaru change: make font normal here to have less diff in the widgets
+* {
+ font-weight: normal !important;
+ text-shadow: none !important;
+}
+
+// gnome-shell-extension-desktop-icons styling
+.file-item {
+ border-radius: $base_border_radius;
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/gnome-shell-sass.doap b/gnome-shell/upstream/gnome-shell-sass/gnome-shell-sass.doap
new file mode 100644
index 00000000..f18ec1b8
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/gnome-shell-sass.doap
@@ -0,0 +1,37 @@
+
+
+ GNOME Shell Sass
+ Sass sources of GNOME Shell
+ GNOME Shell Sass is a project intended to allow the sharing of the
+ sass theme sources between gnome-shell and other projects like gnome-shell-extensions.
+
+
+ sass
+ css
+
+
+
+ Carlos Soriano
+
+ csoriano
+
+
+
+
+ Florian Müllner
+
+ fmuellner
+
+
+
+
+ Jakub Steiner
+
+ jimmac
+
+
+
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_a11y.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_a11y.scss
new file mode 100644
index 00000000..31b5c4b7
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_a11y.scss
@@ -0,0 +1,24 @@
+// Pointer location
+.ripple-pointer-location {
+ width: $ripple_size;
+ height: $ripple_size;
+ border-radius: $ripple_size * 0.5; // radius equals the size of the box to give us the curve
+ background-color: lighten(transparentize($selected_bg_color, 0.7), 30%);
+ box-shadow: 0 0 2px 2px lighten($selected_bg_color, 20%);
+}
+
+// Pointer accessibility notifications
+.pie-timer {
+ width: 60px;
+ height: 60px;
+ -pie-border-width: 3px;
+ -pie-border-color: $selected_bg_color;
+ -pie-background-color: lighten(transparentize($selected_bg_color, 0.7), 40%);
+}
+
+// Screen zoom/Magnifier
+.magnifier-zoom-region {
+ border: 2px solid $selected_bg_color;
+
+ &.full-screen { border-width: 0; }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_app-grid.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_app-grid.scss
new file mode 100644
index 00000000..efc6f4b6
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_app-grid.scss
@@ -0,0 +1,158 @@
+/* App Grid */
+
+$app_icon_size: 96px;
+
+// app icons
+.icon-grid {
+ row-spacing: $base_padding * 2;
+ column-spacing: $base_padding * 2;
+ max-row-spacing: $base_padding * 7;
+ max-column-spacing: $base_padding * 7;
+ page-padding-top: $base_padding * 4;
+ page-padding-bottom: $base_padding * 4;
+ page-padding-left: $base_padding * 3;
+ page-padding-right: $base_padding * 3;
+}
+
+/* App Icons */
+
+// Icon tiles in the app grid
+.app-well-app {
+ @include overview_icon($osd_fg_color);
+
+ .overview-icon { padding: $base_padding*2;}
+ .overview-icon.overview-icon-with-label {
+ > StBoxLayout {
+ spacing: $base_padding;
+ }
+ }
+}
+
+// app folders
+.app-well-app.app-folder {
+ @include overview_icon($osd_fg_color, $flat: false);
+}
+
+// expanded folder
+.app-folder-dialog {
+ border-radius: $modal_radius*2;
+ background-color: $dash_background_color;
+ border: 1px solid $borders_color_dark; // Yaru: add border
+
+ & .folder-name-container {
+ padding: 24px 36px 0;
+ spacing: 12px;
+
+ & .folder-name-label,
+ & .folder-name-entry {
+ @extend %title_1;
+ color: $osd_fg_color; // Yaru change: needed for light theme, otherwise invisible text
+ }
+ // Yaru change: needed for the light theme, otherwise dark text in orange selection, can't set selected-color here
+ & .folder-name-entry { width: 300px; background-color: lighten($osd_bg_color, 4%); border-color: $osd_outer_borders_color;}
+
+ /* FIXME: this is to keep the label in sync with the entry */
+ & .folder-name-label { padding: 5px 7px; color: $osd_fg_color; }
+
+ & .edit-folder-button {
+ @extend %button_dark; // Yaru change: fix for light theme
+ padding: 0;
+ width: 36px;
+ height: 36px;
+ border-radius: 99px;
+
+ & > StIcon { icon-size: $base_icon_size }
+ }
+ }
+
+ & .icon-grid {
+ row-spacing: $base_padding * 2;
+ column-spacing: $base_padding * 5;
+ page-padding-top: 0;
+ page-padding-bottom: 0;
+ page-padding-left: 0;
+ page-padding-right: 0;
+ }
+
+ & .page-indicators {
+ margin-bottom: 18px;
+ }
+}
+
+.app-folder-dialog-container {
+ padding: $base_padding*2;
+ width: 640px;
+ height: 640px;
+}
+
+// Running app indicator (also shown in dash)
+.app-well-app-running-dot {
+ height: 5px;
+ width: 5px;
+ border-radius:5px;
+ margin-bottom: 8px;
+ background-color: $selected_bg_color; // Yaru: we want an orange dot
+}
+
+// Rename popup for app folders
+.rename-folder-popup {
+ .rename-folder-popup-item {
+ spacing: $base_padding;
+ &:ltr, &:rtl { padding: 0 $base_padding * 2; }
+ }
+}
+
+// App Grid pagination indicators
+.page-indicator {
+ padding: $base_padding $base_padding * 2 0;
+
+ .page-indicator-icon {
+ width: 10px;
+ height: 10px;
+ border-radius: 10px; // the same as height&width
+ background-color: white;
+ }
+}
+
+.apps-scroll-view {
+ padding: 0;
+}
+
+// shutdown and other actions in the grid
+.system-action-icon {
+ background-color: rgba(0,0,0,0.8);
+ color: #fff;
+ border-radius: 99px;
+ icon-size: $app_icon_size * 0.5;
+}
+
+.page-navigation-hint {
+ width: 300px;
+
+ &.dnd {
+ background: rgba(255, 255, 255, 0.1);
+ }
+
+ &.next:ltr,
+ &.previous:rtl {
+ background-gradient-start: rgba(255, 255, 255, 0.05);
+ background-gradient-end: transparent;
+ background-gradient-direction: horizontal;
+ border-radius: $modal_radius*1.5 0px 0px $modal_radius*1.5;
+ }
+
+ &.previous:ltr,
+ &.next:rtl {
+ background-gradient-start: transparent;
+ background-gradient-end: rgba(255, 255, 255, 0.05);
+ background-gradient-direction: horizontal;
+ border-radius: 0px $modal_radius*1.5 $modal_radius*1.5 0px;
+ }
+}
+
+.page-navigation-arrow {
+ margin: 6px;
+ width: 24px;
+ height: 24px;
+ color: $osd_fg_color; // Yaru change: light theme support
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_base.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_base.scss
new file mode 100644
index 00000000..69ebb301
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_base.scss
@@ -0,0 +1,18 @@
+// Links
+.shell-link {
+ color: $link_color;
+
+ &:hover {
+ color: lighten($link_color, 10%);
+ }
+}
+
+// Outline for low res icons
+.lowres-icon {
+ icon-shadow: 0 1px 2px rgba(black, 0.3);
+}
+
+// Dropshadow for large icons
+.icon-dropshadow {
+ icon-shadow: 0 1px 5px rgba(black, 0.8);
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_buttons.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_buttons.scss
new file mode 100644
index 00000000..6a72c079
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_buttons.scss
@@ -0,0 +1,6 @@
+/* Buttons */
+
+.button {
+ @extend %button; // that's it
+ min-height: 22px;
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_calendar.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_calendar.scss
new file mode 100644
index 00000000..3447125f
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_calendar.scss
@@ -0,0 +1,262 @@
+/* Date/Time Menu */
+
+// overall menu
+#calendarArea {
+ padding: $base_padding - 2px;
+}
+
+// Calendar menu side column
+.datemenu-calendar-column {
+ spacing: $base_padding;
+ &:ltr {padding-left: $base_padding;}
+ &:rtl {padding-right: $base_padding;}
+ .datemenu-displays-box {spacing: $base_padding;}
+}
+
+/* today button (the date) */
+.datemenu-today-button {
+ @include card($flat: true);
+ padding: $base_padding * 1.5;
+
+ // weekday label
+ .day-label {
+ @extend %heading;
+ }
+
+ // date label
+ .date-label {
+ @extend %title_2;
+ }
+
+ &:insensitive { // Yaru change: fix insensitive state in light theme
+ .day-label, .date-label {
+ color: $insensitive_fg_color;
+ }
+ }
+}
+
+/* Calendar */
+.calendar {
+ @include card(flat);
+ margin-top: 0;
+
+ // month header
+ .calendar-month-header {
+
+ // prev/next month icons
+ .calendar-change-month-back StIcon,
+ .calendar-change-month-forward StIcon {
+ icon-size: $base_icon_size;
+ }
+
+ // month label
+ .calendar-month-label {
+ color: lighten($fg_color,5%);
+ @extend %heading;
+ padding: 8px 0;
+ }
+ .pager-button {
+ background-color: transparent;
+ height: 32px;
+ width: 32px;
+ margin: 2px;
+ border-radius: $base_border_radius - 2px;
+ &:hover, &:focus {background-color: $hover_bg_color;}
+ &:active {background-color: $active_bg_color;}
+ }
+ }
+
+ $calendar_day_size: 3em;
+
+ .calendar-day-base {
+ text-align: center;
+ margin: 2px;
+ padding: 0 !important;
+ height: $calendar_day_size !important;
+ width: $calendar_day_size !important;
+ border-radius: 99px;
+ @extend %numeric;
+ @extend %smaller;
+
+ &:hover {background-color: $hover_bg_color;}
+ &:focus {
+ background-color: mix($bg_color, $selected_bg_color, 80%);
+ // color: $selected_fg_color; // Yaru change: fix unfocused selected color
+ box-shadow:inset 0 0 0 2px transparentize($selected_bg_color, 0.4);
+ }
+
+ &:active,&:selected {
+ color: $active_fg_color;
+ background-color: $active_bg_color;
+ &:focus {
+ background-color: mix($active_bg_color, $selected_bg_color, 80%);
+ }
+ }
+
+ // day of week heading
+ &.calendar-day-heading {
+ color: $insensitive_fg_color;
+ padding-top: $base_padding;
+ height: 16px !important; // force heading to be smaller height
+ font-weight: bold;
+ @extend %smaller;
+ }
+ }
+
+ .calendar-day {}
+ .calendar-work-day {}
+ .calendar-nonwork-day {color: $insensitive_fg_color;}
+ .calendar-other-month-day {
+ color: transparentize($fg_color, 0.5);
+ &.calendar-nonwork-day {
+ color: transparentize($insensitive_fg_color, 0.5);
+ }
+ }
+
+ // Today
+ .calendar-today {
+ background-color: $selected_bg_color;
+ font-weight: 800;
+ color: $selected_fg_color !important;
+
+ &:hover,&:focus {
+ background-color:lighten($selected_bg_color, 3%);
+ color: inherit;
+ }
+
+ &:active,&:selected {
+ background-color: $selected_bg_color;
+ color: inherit;
+
+ &:hover,&:focus {
+ background-color:lighten($selected_bg_color, 3%);
+ color: inherit;
+ }
+ }
+ }
+
+ .calendar-day-with-events {
+ background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/calendar-today-light.svg"),url("resource:///org/gnome/shell/theme/calendar-today.svg"));
+ background-size: contain;
+ }
+
+ .calendar-week-number {
+ @include fontsize($base_font_size - 4);
+ font-weight: bold;
+ font-feature-settings: "tnum";
+ margin: 6px;
+ padding: 0 $base_padding;
+ border-radius: 3px;
+ background-color: darken($bg_color, 2%);
+ color: $insensitive_fg_color
+ }
+}
+
+/* Events */
+.events-button {
+ @include card;
+ padding: $base_padding * 2;
+
+ .events-box {
+ spacing: $base_padding;
+ }
+
+ .events-list {
+ spacing: 2 * $base_padding;
+ }
+
+ .events-title {
+ @extend %heading;
+ color: $insensitive_fg_color;
+ margin-bottom: $base_margin;
+ }
+
+ .event-time {
+ @extend %numeric;
+ @extend %caption;
+ color: $insensitive_fg_color;
+ }
+}
+
+/* World clocks */
+.world-clocks-button {
+ @include card;
+ padding: $base_padding * 2;
+
+ .world-clocks-grid {
+ spacing-rows: $base_padding;
+ spacing-columns: $base_padding * 2;
+ }
+
+ // title
+ .world-clocks-header {
+ @extend %heading;
+ color: $insensitive_fg_color;
+ }
+
+ // city label
+ .world-clocks-city {
+ color: $fg_color;
+ }
+
+ // timezone time
+ .world-clocks-time {
+ @extend %heading;
+ @extend %numeric;
+ color: $fg_color;
+
+ &:ltr {text-align: right;}
+ &:rtl {text-align: left;}
+ }
+
+ // timezone offset label
+ .world-clocks-timezone {
+ @extend %numeric;
+ @extend %caption;
+ color: $insensitive_fg_color;
+ }
+}
+
+/* Weather */
+.weather-button {
+ @include card;
+ padding: $base_padding * 2;
+
+ .weather-box {
+ spacing: $base_padding + $base_margin;
+ }
+
+ .weather-header-box {
+ spacing: $base_padding;
+ }
+
+ .weather-header {
+ color: $insensitive_fg_color;
+ @extend %heading;
+
+ &.location {
+ font-weight: normal;
+ }
+ }
+
+ .weather-grid {
+ spacing-rows: $base_padding;
+ spacing-columns: $base_padding * 2;
+ }
+
+ .weather-forecast-time {
+ @extend %numeric;
+ @extend %caption;
+ color: darken($fg_color,30%);
+ padding-top: 0.2em;
+ padding-bottom: 0.4em;
+ }
+
+ .weather-forecast-icon {
+ icon-size: $large_icon_size;
+ }
+
+ .weather-forecast-temp {
+ @extend %heading;
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_check-box.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_check-box.scss
new file mode 100644
index 00000000..53a51619
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_check-box.scss
@@ -0,0 +1,18 @@
+/* Check Boxes */
+
+// these are equal to the size of the SVG assets
+$check_height: 22px;
+$check_width: 24px;
+
+// Yaru: we also provide check box assets for the light theme
+.check-box {
+ StBoxLayout { spacing: .8em; }
+ StBin {
+ width: $check_width;
+ height: $check_height;
+ background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox-off-light.svg"), url("resource:///org/gnome/shell/theme/checkbox-off.svg"));
+ }
+ &:focus StBin { background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox-off-focused-light.svg"), url("resource:///org/gnome/shell/theme/checkbox-off-focused.svg")); }
+ &:checked StBin { background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox.svg"), url("resource:///org/gnome/shell/theme/checkbox-dark.svg")); }
+ &:focus:checked StBin { background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/checkbox-focused.svg"), url("resource:///org/gnome/shell/theme/checkbox-focused-dark.svg")); }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_corner-ripple.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_corner-ripple.scss
new file mode 100644
index 00000000..9137b67c
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_corner-ripple.scss
@@ -0,0 +1,15 @@
+/* Activities Ripple */
+
+$ripple_size: 50px;
+
+.ripple-box {
+ background-color: lighten(transparentize($selected_bg_color, 0.7), 40%);
+ box-shadow: 0 0 2px 2px lighten($selected_bg_color, 20%);
+ // plus + 2px for the border (box-shadow)
+ width: $ripple_size + 2px;
+ height: $ripple_size + 2px;
+ border-radius: 0 0 $ripple_size + 2px 0; // radius equals the size of the box to give us the curve
+
+ // just a simple change to the border radius position
+ &:rtl { border-radius: 0 0 0 $ripple_size + 2px; }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_dash.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_dash.scss
new file mode 100644
index 00000000..03958726
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_dash.scss
@@ -0,0 +1,78 @@
+/* Dash */
+
+//$dash_background_color: lighten($system_bg_color, 5%); // Yaru: we define those colors in _colors.scss for _dock.scss to use it
+$dash_placeholder_size: 32px;
+$dash_padding: $base_padding*2; // 12px
+$dash_border_radius: $modal_radius + $dash_padding;
+
+// container for the dash
+#dash {
+ @extend %caption;
+ margin-top: $dash_padding;
+
+ .placeholder {
+ // background-image: url("resource:///org/gnome/shell/theme/dash-placeholder.svg");
+ background-image:none;
+ background-size: contain;
+ height: $dash_placeholder_size;
+ }
+
+ .empty-dash-drop-target {
+ width: $dash_placeholder_size;
+ height: $dash_placeholder_size;
+ }
+
+ // Running app indicator (also shown in app grid)
+ .app-well-app-running-dot {
+ margin-bottom: 13px; // hardcoded - Yaru change: move dot a bit down
+ background-color: $selected_bg_color; // Yaru: we want an orange dot
+ }
+}
+
+// background of the dash behind app icons
+.dash-background {
+ background-color: $dash_background_color;
+ border-radius: $dash_border_radius;
+ padding: $dash_padding;
+ border: 1px solid $borders_color_dark; // Yaru: add border
+ spacing: $base_padding;
+ margin-bottom: $dash_padding;
+}
+
+// items on the dash
+.dash-item-container {
+ > * {margin: 0 2px;}
+ &:ltr:first-child {margin-left: 0;}
+ &:rtl:first-child {margin-right: 0;}
+
+ // each app item on the dash
+ .app-well-app .overview-icon {
+ padding: $base_padding;
+ }
+
+ // show apps button
+ .show-apps { @include overview_icon($osd_fg_color);}
+
+ .show-apps, .app-well-app {
+ padding-bottom: $dash_padding;
+ }
+}
+
+// separator between favourites and running apps
+.dash-separator {
+ width: 1px;
+ margin: 0 $base_margin;
+ background-color: $borders_color_dark; // Yaru change: fix light dash separator
+ margin-bottom: $dash_padding;
+}
+
+// OSD Tooltip
+.dash-label {
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border-radius: 99px;
+ padding: $base_padding $base_padding * 2;
+ text-align: center;
+ -y-offset: $base_margin * 2; // distance from the dash edge
+ border: 1px solid $borders_color_dark; // Yaru change: add border
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_dialogs.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_dialogs.scss
new file mode 100644
index 00000000..6ac4e8fd
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_dialogs.scss
@@ -0,0 +1,167 @@
+/* Modal Dialogs */
+
+.headline {
+ @extend %title_4;
+}
+
+.modal-dialog {
+ @extend %bubble_panel;
+
+ .modal-dialog-content-box {
+ margin: 32px 40px;
+ spacing: 32px;
+ max-width: 28em;
+ }
+
+ .modal-dialog-linked-button {
+ @extend %bubble_button;
+ }
+}
+
+/* End Session Dialog */
+.end-session-dialog {
+ width: 30em;
+
+ .end-session-dialog-battery-warning,
+ .dialog-list-title {
+ color: $warning_color;
+ }
+}
+
+/* Message Dialog */
+.message-dialog-content {
+ spacing: 18px;
+
+ .message-dialog-title {
+ text-align: center;
+ @extend %title_2;
+
+ &.lightweight { @extend %title_4;}
+ }
+ .message-dialog-description { text-align: center; }
+}
+
+/* Dialog List */
+.dialog-list {
+ spacing: 18px;
+
+ .dialog-list-title {
+ text-align: center;
+ @extend %heading;
+ }
+
+ .dialog-list-scrollview { max-height: 200px; }
+ .dialog-list-box {
+ spacing: 1em;
+
+ .dialog-list-item {
+ spacing: 1em;
+
+ .dialog-list-item-title { font-weight: bold; }
+ .dialog-list-item-description {
+ color: darken($fg_color,5%);
+ @extend %caption;
+ }
+ }
+ }
+}
+
+/* Run Dialog */
+.run-dialog {
+ .modal-dialog-content-box {
+ margin-top: 24px;
+ margin-bottom: 14px;
+ }
+ .run-dialog-entry { width: 20em; }
+ .run-dialog-description {
+ @extend %caption;
+ text-align: center;
+ color: darken($fg_color, 20%);
+ }
+}
+
+/* Password or Authentication Dialog */
+
+.prompt-dialog {
+ width: 28em;
+
+ .modal-dialog-content-box {
+ margin-bottom: 24px;
+ }
+}
+
+.prompt-dialog-password-grid {
+ spacing-rows: 8px;
+ spacing-columns: 4px;
+
+ .prompt-dialog-password-entry {
+ width: auto;
+
+ // 4px (spacing) + 16px (spinner-width)
+ &:ltr { margin-left: 20px; }
+ &:rtl { margin-right: 20px; }
+ }
+}
+
+.prompt-dialog-password-layout {
+ spacing: 8px;
+}
+
+.prompt-dialog-password-entry {
+ width: 20em;
+}
+
+.prompt-dialog-error-label,
+.prompt-dialog-info-label,
+.prompt-dialog-null-label {
+ text-align: center;
+ @extend %caption;
+}
+
+.prompt-dialog-error-label {
+ color: $warning_color;
+}
+
+
+/* Polkit Dialog */
+
+.polkit-dialog-user-layout {
+ text-align: center;
+ spacing: 8px;
+ margin-bottom: 6px;
+
+ .polkit-dialog-user-root-label { color: $warning_color; }
+}
+
+/* Audio selection dialog */
+.audio-device-selection-dialog {
+ .modal-dialog-content-box { margin-bottom: 28px; }
+ .audio-selection-box { spacing: 20px; }
+}
+
+.audio-selection-device {
+ border-radius: $base_border_radius*2;
+ &:hover,&:focus { background-color: $hover_bg_color; }
+ &:active {
+ background-color: $selected_bg_color;
+ color: $selected_fg_color;
+ }
+}
+
+.audio-selection-device-box {
+ padding: 20px;
+ spacing: 20px;
+}
+
+.audio-selection-device-icon {
+ icon-size: $base_icon_size * 4;
+}
+
+/* Welcome dialog */
+.welcome-dialog-image {
+ background-image: url("resource:///org/gnome/shell/theme/gnome-shell-start.svg");
+ background-size: contain;
+ /* Reasonable maximum dimensions */
+ height: 300px;
+ width: 300px;
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_entries.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_entries.scss
new file mode 100644
index 00000000..613744d9
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_entries.scss
@@ -0,0 +1,33 @@
+/* Entries */
+
+StEntry {
+ min-height: 22px; // Yaru change: fix for height shift
+ border-radius: $base_border_radius;
+ padding: 8px;
+ border-width: 1px; // Yaru change: we want bordered entries
+ color: $fg_color;
+
+ @include entry(normal);
+ &:hover { @include entry(hover);}
+ &:focus { @include entry(focus);}
+ &:insensitive { @include entry(insensitive);}
+
+ selection-background-color: $selected_bg_color;
+ selected-color: $selected_fg_color;
+
+ StIcon.capslock-warning {
+ icon-size: 16px;
+ warning-color: $warning_color;
+ padding: 0 4px;
+ }
+
+ StIcon.peek-password {
+ icon-size: $base_icon_size;
+ padding: 0 4px;
+ }
+
+ StLabel.hint-text {
+ margin-left: 2px;
+ color: transparentize($fg_color, 0.3);
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_hotplug.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_hotplug.scss
new file mode 100644
index 00000000..acd0265d
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_hotplug.scss
@@ -0,0 +1,10 @@
+// hotplug
+
+.hotplug-notification-item {
+ @extend %bubble_button;
+}
+
+.hotplug-notification-item-icon {
+ icon-size: 24px;
+ padding: 0 4px;
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_ibus-popup.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_ibus-popup.scss
new file mode 100644
index 00000000..28f89f33
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_ibus-popup.scss
@@ -0,0 +1,36 @@
+// IBus Candidate Popup
+
+.candidate-popup-boxpointer {
+ @extend .popup-menu-boxpointer;
+}
+
+.candidate-popup-content {
+ padding: $base_padding;
+ spacing: $base_padding;
+ @extend .popup-menu-content;
+}
+
+.candidate-index {
+ padding: 0;
+ padding-right: $base_padding;
+ color: $insensitive_fg_color;
+}
+
+.candidate-box {
+ padding: $base_padding $base_padding*2 $base_padding $base_padding*2;
+ border-radius: $base_border_radius;
+ &:selected { background-color: $selected_bg_color; color: $selected_fg_color; }
+ &:hover { background-color: $hover_bg_color; color: $hover_fg_color; }
+}
+
+.candidate-page-button-box {
+ height: 2em;
+ .vertical & { padding-top: $base_padding*2; }
+ .horizontal & { padding-left: $base_padding*2; }
+}
+
+.candidate-page-button { padding: $base_padding;}
+
+.candidate-page-button-previous { border-radius: $base_border_radius 0px 0px $base_border_radius; border-right-width: 0;box-shadow: none;}
+.candidate-page-button-next { border-radius: 0px $base_border_radius $base_border_radius 0px;box-shadow: none;}
+.candidate-page-button-icon { icon-size: $base_icon_size; }
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_keyboard.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_keyboard.scss
new file mode 100644
index 00000000..821b817e
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_keyboard.scss
@@ -0,0 +1,153 @@
+/* On-screen Keyboard */
+
+$key_size: 1.2em;
+$key_border_radius: $base_border_radius + 4px; // 12px
+$key_bg_color: if(variant=='light', $bg_color, darken($bg_color, 1%)); // Yaru: Make keyboard buttons work on both variants
+$default_key_bg_color: $key_bg_color; // Yaru: Make keyboard buttons work on both variants
+// $default_key_bg_color: if($variant=='light', darken($osd_bg_color, 11%), lighten($osd_bg_color, 2%));
+
+
+// draw keys using button function
+#keyboard { // Yaru change: Make keyboard work on both variants
+ background-color: transparentize(if($variant=='light', darken($bg_color, 5%), darken($bg_color, 15%)), 0.1);
+ // background-color: $osd_bg_color;
+ // box-shadow: inset 0 1px 0 0 $osd_outer_borders_color;
+
+ .page-indicator {
+ padding: $base_padding;
+
+ .page-indicator-icon {
+ width: 8px;
+ height: 8px;
+ }
+ }
+}
+
+// the container for individual keys
+.key-container {
+ padding: $base_margin;
+ spacing: $base_margin;
+}
+
+// the keys
+.keyboard-key {
+
+ @include fontsize($base_font_size + 5);
+ font-weight: bold;
+ min-height: $key_size;
+ min-width: $key_size;
+ border-width: 1px;
+ border-style: solid;
+ border-radius: $key_border_radius;
+ box-shadow: 0 1px 0 0 $shadow_color;
+
+ @include keyboard_key(normal, $key_bg_color, $fg_color); // Yaru change: ↑↑↑
+
+ &:focus { @include keyboard_key(focus, $key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:hover { @include keyboard_key(hover, $key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:active { @include keyboard_key(active, $key_bg_color, $fg_color); } // Yaru change: ↑↑↑
+ &:checked { @include keyboard_key(checked, $key_bg_color, $fg_color); } // Yaru change: ↑↑↑
+
+ &:grayed { //FIXMEy
+ background-color: darken($bg_color, 3%);
+ color: $fg_color; // Yaru change: ↑↑↑
+ border-color: $osd_borders_color;
+ }
+
+ // non-character keys
+ &.default-key {
+ @include keyboard_key(normal, $default_key_bg_color, $fg_color); // Yaru change: ↑↑↑
+ &:hover {@include keyboard_key(hover, $default_key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:active { @include keyboard_key(active, $default_key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:checked { @include keyboard_key(checked, $default_key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ border-radius: $key_border_radius;
+ }
+
+ // enter key is suggested-action
+ &.enter-key { // Yaru: our suggested action color is green
+ @include keyboard_key(normal, $suggested_bg_color, $selected_fg_color);
+ &:hover { @include keyboard_key(hover, $suggested_bg_color, $selected_fg_color);}
+ &:active {@include keyboard_key(active, $suggested_bg_color, $selected_fg_color);}
+ &:checked {@include keyboard_key(checked, $suggested_bg_color, $selected_fg_color);}
+ border-radius: $key_border_radius;
+ color: $osd_fg_color;
+ }
+
+ &.shift-key-lowercase {}
+
+ // pressed shift has different style
+ &.shift-key-uppercase {
+ background-color: if($variant=="light", darken($key_bg_color, 10%), lighten($key_bg_color, 20%)); // Yaru change: ↑↑↑
+ color: $fg_color; // Yaru change: ↑↑↑
+ &:hover {
+ background-color: if($variant=="light", darken($key_bg_color, 13%), lighten($key_bg_color, 25%)); // Yaru change: ↑↑↑
+ // color: lighten($osd_bg_color, 5%); // Yaru change: ↑↑↑
+ }
+ }
+
+ // size of icons on keys
+ StIcon { icon-size: 24px; }
+}
+
+// long press on a key popup
+.keyboard-subkeys { // Yaru: Make keyboard popups work on both variants
+ -arrow-border-radius: $base_border_radius*2;
+ -arrow-background-color: transparentize(if($variant=='light', darken($bg_color, 5%), darken($bg_color, 8%)), 0.1);
+ -arrow-border-width: 1px;
+ -arrow-border-color: $borders_color;
+ -arrow-base: 20px;
+ -arrow-rise: 10px;
+ -boxpointer-gap: $base_padding;
+ padding: $base_padding;
+
+ .keyboard-key {
+ @include keyboard_key(normal, $key_bg_color, $fg_color); // Yaru change: ↑↑↑
+
+ &:focus { @include keyboard_key(focus, $key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:hover { @include keyboard_key(hover, $key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:active { @include keyboard_key(active, $key_bg_color, $fg_color); } // Yaru change: ↑↑↑
+ &:checked { @include keyboard_key(checked, $key_bg_color, $fg_color); } // Yaru change: ↑↑↑
+
+ border-radius:$key_border_radius;
+ }
+}
+
+// emoji
+.emoji-page {
+ .keyboard-key {
+ background-color: transparent;
+ border: none;
+ color: initial;
+ }
+}
+
+.emoji-panel {
+ .keyboard-key:latched {
+ border-color: lighten($selected_bg_color, 5%);
+ background-color: $selected_bg_color;
+ }
+}
+
+// suggestions
+.word-suggestions {
+ @include fontsize($base_font_size + 3);
+ spacing: 12px;
+ min-height: 20pt;
+ padding: $base_padding*2;
+ color: $fg_color; // Yaru change: ↑↑↑
+
+ // each suggestion
+ StButton {
+ margin: 0 3px;
+ min-width: 32px;
+ border-radius: $base_border_radius - 2px;
+ padding: $base_padding $base_padding*3;
+
+ @include keyboard_key(undecorated, $key_bg_color, $fg_color); // Yaru change: ↑↑↑
+
+ &:focus { @include keyboard_key(focus, $key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:hover { @include keyboard_key(hover, $key_bg_color, $fg_color);} // Yaru change: ↑↑↑
+ &:active { @include keyboard_key(active, $key_bg_color, $fg_color); } // Yaru change: ↑↑↑
+ &:checked { @include keyboard_key(checked, $key_bg_color, $fg_color); } // Yaru change: ↑↑↑
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_login-dialog.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_login-dialog.scss
new file mode 100644
index 00000000..f167807c
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_login-dialog.scss
@@ -0,0 +1,233 @@
+/* Login Dialog */
+
+.login-dialog-banner-view {
+ padding-top: 24px;
+ max-width: 23em;
+}
+
+.login-dialog,
+.unlock-dialog {
+ //reset
+ border: none;
+ background-color: transparent;
+
+ $_gdm_bg: $base_color; // Yaru change: use $base_color for dark/light theme switch
+
+ .modal-dialog-button-box { spacing: 3px; }
+ .modal-dialog-button {
+ padding: 4px 18px;
+ box-shadow: 0 1px 3px rgba(0,0,0,0.2);
+ background-color: $_gdm_bg; // Yaru change: use $_gdm_bg
+ border-color: $borders_color; // Yaru change: use $borders_color
+ color: $fg_color; // Yaru change: use $fg_color for dark/light theme
+
+ $_hover_c: if($variant == 'light', darken($_gdm_bg, 15%), lighten($_gdm_bg, 5%)); // Yaru change: use $_gdm_bg and modify light theme background
+
+ // &:hover, &:focus { // Yaru: no need to change background on focus thanks to focus ring
+ &:hover {
+ background-color: $_hover_c;
+ // border-color: $_hover_c; // Yaru: don't overwrite border on hover
+ }
+ &:focus { // Yaru: add focus ring
+ border-color: $focus_border_color;
+ box-shadow: inset 0 0 0 1px $focus_border_color;
+ }
+ &:active {
+ $_active_c: if($variant == 'light', darken($_gdm_bg, 25%), darken($_gdm_bg, 5%)); // Yaru: adapt active color
+ box-shadow: none;
+ background-color: $_active_c;
+ color: transparentize($osd_fg_color, 0.3);
+ }
+ &:default {
+ @include button(default, $c:$suggested_bg_color, $tc:$selected_fg_color);
+ }
+ }
+
+ .cancel-button,
+ .switch-user-button,
+ .login-dialog-session-list-button {
+ padding: 0;
+ border-radius: 99px;
+ width: $large_icon_size;
+ height: $large_icon_size;
+ // border-color: darken($system_bg_color, 3%); // Yaru change: don't overwrite button look
+ // background-color: darken($system_bg_color, 3%); // Yaru change: don't overwrite button look
+
+ StIcon { icon-size: $base_icon_size; }
+ }
+
+ .caps-lock-warning-label,
+ .login-dialog-message { // Yaru: we want all login messages to use OSD fg color
+ color: $osd_fg_color;
+ }
+}
+
+.login-dialog-logo-bin { padding: 24px 0px; }
+.login-dialog-banner { color: darken($osd_fg_color,10%); }
+.login-dialog-button-box { width: 23em; spacing: 5px; }
+.login-dialog-message { text-align: center; }
+.login-dialog-user-selection-box { padding: 100px 0px; }
+.login-dialog-not-listed-label {
+ padding-left: 2px;
+ .login-dialog-not-listed-button:focus &,
+ .login-dialog-not-listed-button:hover & {
+ color: $osd_fg_color;
+ }
+}
+
+.login-dialog-not-listed-label {
+ @extend %caption;
+ font-weight: bold;
+ color: darken($osd_fg_color,30%);
+ padding-top: 1em;
+}
+
+.login-dialog-auth-list-view { -st-vfade-offset: 1em; }
+.login-dialog-auth-list {
+ spacing: 6px;
+ margin-left: 2em;
+}
+
+.login-dialog-auth-list-title {
+ margin-left: 2em;
+}
+
+.login-dialog-auth-list-item {
+ border-radius: $base_border_radius + 4px;
+ padding: 6px;
+ color: darken($osd_fg_color,30%);
+ &:focus, &:selected { background-color: $selected_bg_color; color: $selected_fg_color; }
+}
+
+.login-dialog-auth-list-label {
+ @include fontsize($base_font_size + 2);
+ font-weight: bold;
+ padding-left: 15px;
+
+ &:ltr { padding-left: 14px; text-align: left; }
+ &:rtl { padding-right: 14px; text-align: right; }
+}
+
+.login-dialog-user-list-view { -st-vfade-offset: 1em; }
+.login-dialog-user-list { // Yaru: we want the gray hover to work on GDM, thus the transparentized fg color
+ spacing: 12px;
+ width: 23em;
+ &:expanded .login-dialog-user-list-item:selected { background-color: transparentize($selected_fg_color, 0.9); color: $selected_fg_color; }
+ &:expanded .login-dialog-user-list-item:logged-in { border-right: 2px solid transparentize($selected_fg_color, 0.9); }
+}
+
+.login-dialog-user-list-item {
+ border-radius: $base_border_radius + 4px;
+ padding: 6px;
+ color: darken($osd_fg_color,30%);
+ &:ltr .user-widget { padding-right: 1em; }
+ &:rtl .user-widget { padding-left: 1em; }
+ .login-dialog-timed-login-indicator {
+ height: 2px;
+ margin-top: 6px;
+ background-color: $osd_fg_color;
+ }
+ &:focus .login-dialog-timed-login-indicator { background-color: $selected_fg_color; }
+}
+
+.user-widget-label {
+ color: $osd_fg_color;
+}
+
+.user-widget.horizontal .user-widget-label {
+ @include fontsize($base_font_size + 2);
+ font-weight: bold;
+ padding-left: 15px;
+
+ &:ltr { padding-left: 14px; text-align: left; }
+ &:rtl { padding-right: 14px; text-align: right; }
+}
+
+.user-widget.vertical .user-widget-label {
+ @include fontsize($base_font_size + 5);
+ text-align: center;
+ font-weight: normal;
+ padding-top: 16px;
+}
+
+.login-dialog-timed-login-indicator {
+ height: 2px;
+ background-color: darken($fg_color,40%);
+}
+
+.login-dialog-prompt-layout {
+ padding-top: 24px;
+ padding-bottom: 12px;
+ spacing: $base_padding * 2;
+ width: 23em;
+}
+
+.login-dialog-prompt-entry {
+ height: 1.5em;
+}
+
+.login-dialog-prompt-label {
+ color: darken($osd_fg_color, 20%);
+ @include fontsize($base_font_size + 1);
+ padding-top: 1em;
+}
+
+.login-dialog {
+ StEntry {
+ @if $variant=='dark' {
+ $_gdm_entry_bg: darken($system_bg_color, 3%);
+ background-color: $_gdm_entry_bg;
+ color: $fg_color;
+ }
+ }
+}
+
+// Custom styling for unlock entry
+.unlock-dialog {
+ StEntry {
+ border:none !important;
+ &, &:focus { // Yaru change: also style unfocused state
+ color: $fg_color_dark; // Yaru change: fix for light theme
+ background-color: transparentize($fg_color_dark, 0.9); // Yaru change: ↑↑↑
+ box-shadow: none; // Yaru change: remove box-shadow because of ugly render
+ }
+
+ &:insensitive { // Yaru change: fix for light theme
+ color: transparentize($fg_color_dark, 0.5);
+ background-color: transparentize($fg_color_dark, 0.95);
+ }
+
+ StLabel.hint-text { // Yaru change: fix for light theme
+ color: transparentize($fg_color_dark, 0.3);
+ }
+ }
+
+ .user-icon { // Yaru change: fix for light theme
+ background-color: transparentize($fg_color_dark,0.9);
+ color: $fg_color_dark;
+ }
+
+ .cancel-button,
+ .switch-user-button,
+ .login-dialog-session-list-button {
+ border-color: transparent;
+ background-color: transparentize($fg_color_dark, 0.9); // Yaru change: fix for light theme
+ box-shadow: none; // Yaru change: remove shadow cause to transparent bg
+
+ &,
+ &:hover,
+ &:focus,
+ &:active { // Yaru change: fix for light theme
+ color: $fg_color_dark;
+ }
+
+ &:hover,
+ &:focus { // Yaru change: ↑↑↑
+ background-color: transparentize($fg_color_dark, 0.85);
+ }
+
+ &:active { // Yaru change: ↑↑↑
+ background-color: transparentize($fg_color_dark, 0.80);
+ }
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_looking-glass.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_looking-glass.scss
new file mode 100644
index 00000000..8a79722f
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_looking-glass.scss
@@ -0,0 +1,148 @@
+/* Looking Glass */
+
+// Dialog
+#LookingGlassDialog {
+ background-color: $osd_bg_color;
+ border-radius: 0 0 $modal_radius $modal_radius;
+ border-top-width: 0;
+ border: 1px solid $osd_outer_borders_color;
+ color: $osd_fg_color;
+ padding: $base_padding;
+ spacing: $base_padding;
+ box-shadow: 0 2px 4px 0 rgba(0,0,0,0.1);
+
+ & > #Toolbar {
+ border: none;
+ padding: $base_padding;
+ border-radius: 0;
+ background-color: transparent;
+ spacing: $base_padding;
+
+ .lg-toolbar-button {
+ padding: $base_padding $base_padding*2;
+ @extend %button;
+
+ & > StIcon { icon-size: $base_icon_size; }
+ }
+ }
+
+ .labels {
+ spacing: $base_padding;
+ }
+
+ .notebook-tab {
+ -natural-hpadding: $base_padding*2;
+ -minimum-hpadding: $base_padding*2;
+
+ font-weight: bold;
+ padding: $base_padding $base_padding*2;
+ color: darken($osd_fg_color, 15%);
+ transition-duration: 100ms;
+ box-shadow:none;
+ border:none;
+ border-radius: $base_border_radius - 2px;
+ background-color: transparent;
+
+ &:hover {
+ color: $osd_fg_color;
+ background-color: transparentize($osd_fg_color, 0.95);
+ }
+
+ &:selected {
+ color: $osd_fg_color;
+ background-color: transparentize($osd_fg_color, 0.9);
+ }
+ }
+
+ StBoxLayout#EvalBox { padding: 4px; spacing: $base_padding; padding: $base_padding; }
+ StBoxLayout#ResultsArea { spacing: $base_padding; padding: $base_padding; }
+}
+
+.lg-dialog {
+ color: $osd_fg_color; // Yaru: needed for the light theme
+ StEntry {
+ background-color: transparentize(lighten($osd_bg_color, 5%), 0.4);
+ color: $osd_fg_color;
+ border-color: transparentize($osd_fg_color, 0.8);
+ min-height: 22px;
+ selection-background-color: $selected_bg_color;
+ selected-color: $selected_fg_color;
+ &, &:focus { // Yaru change: remove box-shadow because of ugly render
+ box-shadow: none;
+ }
+ }
+
+ .shell-link {
+ color: $link_color;
+ &:hover { color: lighten($link_color, 10%); }
+ &:active { color: darken($link_color, 10%); }
+ }
+
+ .actor-link {
+ color: $insensitive_fg_color;
+ &:hover { color: lighten($insensitive_fg_color, 20%); }
+ &:active { color: darken($insensitive_fg_color, 20%); }
+ }
+}
+
+.lg-completions-text {
+ @extend %caption;
+ font-style: italic;
+ color: $osd_fg_color; // Yaru: needed for the light theme
+}
+
+.lg-obj-inspector-title {
+ spacing: $base_padding;
+ color: $osd_fg_color; // Yaru: needed for the light theme
+}
+
+.lg-obj-inspector-button {
+ border: 1px solid $osd_borders_color;
+ padding: 4px;
+ border-radius: $base_border_radius;
+ &:hover { border: 1px solid #ffffff; }
+ color: $osd_fg_color; // Yaru: needed for the light theme
+}
+
+// Extensions
+#lookingGlassExtensions { padding: $base_padding; }
+
+.lg-extensions-list {
+ padding: $base_padding;
+ spacing: $base_padding;
+}
+
+.lg-extension {
+ padding: $base_padding*2;
+ @include card;
+}
+
+.lg-extension-name {
+ @extend %heading;
+}
+
+.lg-extension-meta {
+ spacing: $base_padding;
+}
+
+// Inspector
+#LookingGlassPropertyInspector {
+ background: $osd_bg_color;
+ border: 1px solid $osd_borders_color;
+ border-radius: $base_border_radius;
+ padding: $base_padding;
+}
+
+.lg-debug-flag-button {
+ StLabel { padding: $base_padding, 2 * $base_padding; }
+
+ color: $fg_color;
+ &:hover { color: lighten($fg_color, 20%); }
+ &:active { color: darken($fg_color, 20%); }
+}
+
+.lg-debug-flags-header {
+ padding-top: 2 * $base_padding;
+ padding: $base_padding;
+ @extend %title_2;
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_message-list.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_message-list.scss
new file mode 100644
index 00000000..3631ed54
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_message-list.scss
@@ -0,0 +1,176 @@
+/* Message List */
+// a.k.a. notifications in the menu
+
+// main list
+.message-list {
+ width: 29em;
+ border: solid $borders_color;
+
+ // padding and margins to account for scrollbar
+ &:ltr {margin-left: 0; margin-right: $base_margin; padding-right: $base_padding; border-right-width: 1px; }
+ &:rtl {margin-right: 0; margin-left: $base_margin; padding-left: $base_padding; border-left-width: 1px; }
+
+ .message-list-placeholder {
+ @extend %title_2;
+ color: transparentize($insensitive_fg_color, .5);
+
+ // icon size and color
+ > StIcon {
+ icon-size: $base_icon_size*3; // 48px
+ margin-bottom: $base_margin*3;
+ -st-icon-style: symbolic;
+ }
+ }
+}
+
+.message-list-sections {
+ spacing: $base_padding;
+ margin: 0;
+ padding-bottom: $base_padding;
+
+ // to account for scrollbar
+ &:ltr {margin-right: $base_margin * 3; }
+ &:rtl {margin-left: $base_margin * 3;}
+}
+
+.message-list-section,
+.message-list-section-list {
+ spacing: $base_padding;
+}
+
+// do-not-disturb + clear button
+.message-list-controls {
+ // NOTE: remove the padding if notification_bubble could remove margin for drop shadow
+ padding: $base_padding;
+ spacing: $base_padding;
+ @extend %heading;
+
+ .dnd-button {
+ // We need this because the focus outline isn't inset like for the buttons
+ // so the dnd button would grow when it gets focus if we didn't change only
+ // its color when focusing.
+ border-width: 2px;
+ border-color: transparent;
+ border-radius: 32px;
+ border-style: solid;
+
+ &:focus {
+ border-color: $focus_border_color; // Yaru: we detached focus from selected
+ }
+ }
+}
+
+// message bubbles
+.message {
+ @include card;
+
+ // icon container
+ .message-icon-bin {
+ padding: ($base_padding * 3);
+
+ &:ltr {padding-right:$base_padding;}
+ &:rtl {padding-left:$base_padding;}
+
+ // icon size and color
+ > StIcon {
+ icon-size: $large_icon_size; // 32px
+ -st-icon-style: symbolic;
+ }
+
+ // fallback
+ > .fallback-app-icon {
+ width: $base_icon_size;
+ height: $base_icon_size;
+ }
+ }
+
+ // content
+ .message-content {
+ spacing: 4px;
+ padding: ($base_padding*1.5);
+ margin-bottom: $base_margin*2;
+ }
+
+ // title
+ .message-title {
+ font-weight: bold;
+ /* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
+ padding-top: 0.57em;
+ }
+
+ // secondary container in title box
+ .message-secondary-bin {
+ padding: 0 $base_margin * 2;
+
+ // notification time stamp
+ > .event-time {
+ color: transparentize($fg_color, 0.5);
+ @include fontsize($base_font_size - 2);
+ /* HACK: the label should be baseline-aligned with a 1em label, fake this with some bottom padding */
+ padding-bottom: 0.13em;
+
+ &:ltr { text-align: right };
+ &:rtl { text-align: left };
+ }
+ }
+
+ // close button
+ .message-close-button {
+ color: $fg_color;
+ background-color: transparentize($fg_color, 0.9);
+ border-radius: 99px;
+ padding: $base_padding - 1px;
+ margin: 1px;
+ &:hover {background-color: transparentize($fg_color, 0.8);}
+ &:active {background-color: transparentize($fg_color, 0.9);}
+ }
+
+ // body
+ .message-body {color: darken($fg_color, 10%);}
+}
+
+// URLs in messages
+.url-highlighter {
+ link-color: $link_color;
+}
+
+/* Media Controls */
+.message-media-control {
+ padding: 0 $base_padding*3;
+ margin: $base_padding*2 0;
+ border-radius: $base_border_radius;
+ color: $fg_color;
+
+ // colors are lightened since the media controls are in a card
+ &:hover {
+ background-color: lighten($hover_bg_color, 5%);
+ color: $fg_color;
+ }
+
+ &:active {
+ background-color: $active_bg_color; // Yaru: make play/pause/next buttons active visible
+ color: $fg_color;
+ }
+
+ &:insensitive { color: lighten($insensitive_fg_color, 5%); }
+
+ // fix margin for last button
+ &:last-child:ltr { margin-right: $base_margin*3; }
+ &:last-child:rtl { margin-left: $base_margin*3; }
+}
+
+// album-art
+.media-message-cover-icon {
+ icon-size: $base_icon_size*3 !important; // 48px
+ border-radius: $base_border_radius;
+
+ // when there is no artwork
+ &.fallback {
+ color: darken($fg_color, 17%);
+ background-color: $bg_color;
+ border: 1px solid transparent;
+ border-radius: $base_border_radius;
+ icon-size: $large_icon_size !important; // 32px
+ padding: ($base_padding*2 + 2); // 16px
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_misc.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_misc.scss
new file mode 100644
index 00000000..b0794b52
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_misc.scss
@@ -0,0 +1,67 @@
+// Rubberband for select-area screenshots
+.select-area-rubberband { // Yaru: orange is too colorful here, thus use grays
+ background-color: transparentize($ash, 0.8);
+ border: 1px solid transparentize($silk, 0.2);
+}
+
+// User icon
+.user-icon {
+ /* Yaru: See commit 3d4aca768250 */
+ background-size: contain;
+ color: $fg_color;
+ border-radius: 99px;
+ icon-size: $base_icon_size * 4; // 64px
+ &:hover {
+ color: lighten($fg_color,30%);
+ }
+
+ & StIcon {
+ background-color: transparentize($fg_color,0.95);
+ border-radius: 99px;
+ padding: $base_padding * 2 ; // 12px
+ width: $base_icon_size * 2.5; height: $base_icon_size * 2.5; // 40px;
+ }
+
+ &.user-avatar {
+ border: 2px $osd_fg_color;
+ }
+}
+
+.user-widget.vertical .user-icon {
+ icon-size: $base_icon_size * 6; // 128px
+
+ & StIcon {
+ padding: $base_padding * 3 + 2px; // 20px
+ padding-top: $base_padding * 3; // 18 px
+ padding-bottom: $base_padding * 3 + 4px; // 22px
+ width: $base_icon_size * 5.5; height: $base_icon_size * 5.5; // 88px;
+ /* Yaru: See commit 3d4aca768250 */
+ }
+}
+
+.lightbox { background-color: black; }
+.flashspot { background-color: white; }
+
+
+// Hidden
+.hidden { color: rgba(0,0,0,0);}
+
+// Caps-lock warning
+.caps-lock-warning-label {
+ text-align: center;
+ padding-bottom: 8px;
+ @extend %caption;
+ color: $warning_color;
+}
+
+/* Workspace animation */
+
+.workspace-animation {
+ background-color: $system_bg_color;
+}
+
+/* Tiled window previews */
+.tile-preview {
+ background-color: transparentize($selected_bg_color,0.5);
+ border: 1px solid $selected_bg_color;
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_network-dialog.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_network-dialog.scss
new file mode 100644
index 00000000..11e4e676
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_network-dialog.scss
@@ -0,0 +1,48 @@
+/* Select Network dialogs */
+.nm-dialog {
+ max-height: 34em;
+ min-height: 31em;
+ min-width: 32em;
+}
+
+.nm-dialog-content {
+ spacing: 20px;
+ padding: 24px;
+}
+
+.nm-dialog-header { @extend %heading; }
+.nm-dialog-subheader { color: $insensitive_fg_color;}
+.nm-dialog-header-icon { icon-size: $large_icon_size;}
+.nm-dialog-header-hbox { spacing: 10px; }
+
+.nm-dialog-scroll-view {
+ padding:$base_padding;
+ border-radius: $base_border_radius;
+ background-color: $base_color;
+}
+
+.nm-dialog-item {
+ padding: $base_padding * 2;
+
+ &:selected {
+ background-color: $selected_bg_color;
+ border-radius: $base_border_radius - 3px;
+ color: $selected_fg_color;
+ }
+ &:hover { background-color:$hover_bg_color;}
+}
+
+.nm-dialog-icon { icon-size: $base_icon_size; }
+.nm-dialog-icons { spacing: $base_padding * 2; }
+
+// no networks
+.no-networks-box { spacing: $base_padding; }
+.no-networks-label { color: $insensitive_fg_color; }
+
+// airplane mode
+.nm-dialog-airplane-box {
+ text-align: center;
+ spacing: 12px;
+}
+.nm-dialog-airplane-headline { @extend %title_3;}
+.nm-dialog-airplane-text { color: $insensitive_fg_color;}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_notifications.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_notifications.scss
new file mode 100644
index 00000000..89fc0b5f
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_notifications.scss
@@ -0,0 +1,76 @@
+/* Notifications & Message Tray */
+
+$notification_banner_height: 64px;
+$notification_banner_width: 34em;
+$notification_banner_radius: $base_border_radius*1.5;
+
+// Banner notifications
+.notification-banner {
+ min-height: $notification_banner_height;
+ width: $notification_banner_width;
+ box-shadow: 0 2px 4px 2px rgba(0,0,0,0.1);
+ border-radius: $notification_banner_radius;
+ margin: $base_margin;
+ background-color: $bg_color; // Yaru change: use bg_color for better contrast with buttons
+
+ .notification-actions {
+ spacing: 0;
+ }
+
+ .notification-button {
+ @extend %bubble_button;
+ }
+
+ &:hover { // Yaru change: ↑↑↑
+ background-color: if($variant == 'light', darken($bg_color, 2%), lighten($bg_color, 2%));
+ }
+
+ &:active { // Yaru change: ↑↑↑
+ background-color: if($variant == 'light', darken($bg_color, 4%), lighten($bg_color, 4%));
+ }
+
+ // Yaru: make notifications more visible on different headerbars:
+ &, &:hover, &:focus, &:active {
+ box-shadow: 0 0 4px 2px rgba(0,0,0,0.1);
+ border: 1px solid $borders_color;
+ }
+}
+
+// counter
+.summary-source-counter {
+ font-size: $base_font_size - 1pt;
+ font-weight: bold;
+ height: 1.6em;
+ width: 1.6em;
+ -shell-counter-overlap-x: 3px;
+ -shell-counter-overlap-y: 3px;
+ background-color: $selected_bg_color;
+ color: $selected_fg_color;
+ border: 2px solid $fg_color;
+ box-shadow: 0 2px 2px rgba(0,0,0,0.5);
+ border-radius: 0.9em; // should be 0.8 but whatever; wish I could do 50%;
+}
+
+// chat bubbles
+.chat-body { spacing: 5px; }
+.chat-response { margin: 5px; }
+.chat-log-message { color: darken($fg_color,10%); }
+.chat-new-group { padding-top: 1em; }
+.chat-received {
+ padding-left: 4px;
+ &:rtl { padding-left: 0px; padding-right: 4px; }
+}
+
+.chat-sent {
+ padding-left: 18pt;
+ color: lighten($fg_color, 15%);
+ &:rtl { padding-left: 0; padding-right: 18pt; }
+}
+
+.chat-meta-message {
+ padding-left: 4px;
+ @include fontsize($base_font_size - 2);
+ font-weight: bold;
+ color: lighten($fg_color,18%);
+ &:rtl { padding-left: 0; padding-right: 4px; }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_osd.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_osd.scss
new file mode 100644
index 00000000..61b763eb
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_osd.scss
@@ -0,0 +1,70 @@
+/* OSD */
+
+$osd_levelbar_height:6px;
+
+.osd-window {
+ @extend %osd_panel;
+ @extend %heading;
+ text-align: center;
+ font-weight: bold;
+ spacing: $base_padding * 2; // 12px
+ padding: $base_padding * 2 $base_padding * 3;
+ & > * { spacing: 8px; }
+ margin-bottom: 4em;
+
+ StIcon { icon-size:$large_icon_size;}
+
+ StLabel {
+ &:ltr { margin-right: 6px; }
+ &:rtl { margin-left: 6px; }
+ }
+
+ .level {
+ margin-bottom: 4px;
+ &:first-child { margin-bottom: 0px; }
+
+ height: $osd_levelbar_height;
+ min-width:$base_icon_size * 10;
+ -barlevel-height: $osd_levelbar_height;
+ -barlevel-background-color: transparentize($osd_fg_color, if($variant=='light', 0.7, 0.9));
+ -barlevel-active-background-color: $osd_fg_color;
+ -barlevel-overdrive-color: $destructive_color;
+ -barlevel-overdrive-separator-width: 3px;
+ &:ltr { margin-right: 6px; }
+ &:rtl { margin-left: 6px; }
+ }
+}
+
+// Monitor number label
+.osd-monitor-label {
+ @extend %osd_panel;
+ border-radius: $modal_radius;
+ font-size: 3em;
+ font-weight: bold;
+ margin: $base_margin * 3;
+ text-align: center;
+ min-width: 1.3em;
+}
+
+/* Pad OSD */
+.pad-osd-window { // Yaru: Make pad OSD visible again in the light theme by using osd colors, should be ported to upstream
+ padding: 32px;
+ background-color: $osd_bg_color;
+ color: $osd_fg_color;
+
+ .button {
+ @extend %button;
+ &:insensitive { color: $fg_color; }
+ }
+
+ .pad-osd-title-box { spacing: 12px; }
+ .pad-osd-title-menu-box { spacing: 6px; }
+}
+
+.combo-box-label {
+ width: 15em;
+}
+
+.resize-popup {
+ @extend %osd_panel;
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_overview.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_overview.scss
new file mode 100644
index 00000000..d8e70eaf
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_overview.scss
@@ -0,0 +1,13 @@
+/* OVERVIEW */
+
+.controls-manager, .secondary-monitor-workspaces {
+ spacing: $base_padding * 2;
+}
+
+#overviewGroup {
+ background-color: $system_bg_color;
+}
+
+.overview-controls {
+ padding-bottom: 32px;
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_panel.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_panel.scss
new file mode 100644
index 00000000..cdd39fe6
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_panel.scss
@@ -0,0 +1,208 @@
+/* Top Bar */
+// a.k.a. the panel
+
+// $panel_bg_color: #000; // Yaru: we define those colors in _colors.scss for _dock.scss to use it
+// $panel_fg_color: #ccc;
+$panel_height: 1.86em; // Yaru reduce panel height
+$panel_transition_duration: 250ms; // same as the overview transition duration
+
+#panel {
+ background-color: $panel_bg_color;
+ font-weight: bold;
+ height: $panel_height;
+ @extend %numeric;
+ transition-duration: $panel_transition_duration;
+
+ // transparent panel on lock & login screens
+ &.unlock-screen,
+ &.login-screen {
+ // &:overview { Yaru change: static background into overview
+ background-color: transparent;
+ }
+
+ // panel menus
+ .panel-button {
+ font-weight: bold;
+ color: $panel_fg_color;
+ -natural-hpadding: $base_padding * 2;
+ -minimum-hpadding: $base_padding;
+ transition-duration: 150ms;
+ border: 3px solid transparent;
+ border-radius: 99px;
+
+ &.clock-display {
+ .clock {
+ transition-duration: 150ms;
+ border: 3px solid transparent;
+ border-radius: 99px;
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px $screenshot_ui_button_red;
+
+ StBoxLayout {
+ spacing: $base_padding;
+ }
+
+ StIcon {
+ icon-size: $base_icon_size;
+ }
+ }
+
+ &:active, &:overview, &:focus, &:checked {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.8);
+
+ // The clock display needs to have the background on .clock because
+ // we want to exclude the do-not-disturb indicator from the background
+ &.clock-display {
+ box-shadow: none;
+
+ .clock {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.8);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.15);
+ }
+ }
+
+ &:hover {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.85);
+ &.clock-display {
+ box-shadow: none;
+ .clock {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.85);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.1);
+ }
+ }
+
+ &:active:hover, &:overview:hover, &:focus:hover, &:checked:hover {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.75);
+ &.clock-display {
+ box-shadow: none;
+ .clock {
+ box-shadow: inset 0 0 0 100px transparentize($panel_fg_color, 0.75);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.2);
+ }
+ }
+
+ // status area icons
+ .system-status-icon {
+ icon-size: $base_icon_size;
+ padding: $base_padding - 1px;
+ margin: 0 $base_margin;
+ }
+
+ .panel-status-indicators-box .system-status-icon,
+ .panel-status-menu-box .system-status-icon {
+ margin: 0;
+ }
+
+ // app menu icon
+ .app-menu-icon {
+ -st-icon-style: symbolic;
+ // dimensions of the icon are hardcoded
+ }
+
+ panelActivities {
+ -natural-hpadding: $base_padding * 3;
+ }
+ }
+
+ &.unlock-screen,
+ &.login-screen,
+ &:overview {
+ .panel-button {
+ &:active, &:overview, &:focus, &:checked {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.15);
+
+ &.clock-display {
+ box-shadow: none;
+
+ .clock {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.15);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.15);
+ }
+ }
+
+ &:hover {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.10);
+ &.clock-display {
+ box-shadow: none;
+ .clock {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.10);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.1);
+ }
+ }
+
+ &:active:hover, &:overview:hover, &:focus:hover, &:checked:hover {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.2);
+ &.clock-display {
+ box-shadow: none;
+ .clock {
+ box-shadow: inset 0 0 0 100px rgba(255,255,255, 0.2);
+ }
+ }
+
+ &.screen-recording-indicator {
+ box-shadow: inset 0 0 0 100px transparentize($screenshot_ui_button_red, 0.2);
+ }
+ }
+ }
+ }
+
+ .panel-status-indicators-box,
+ .panel-status-menu-box {
+ spacing: 2px;
+ }
+
+ // spacing between power icon and (optional) percentage label
+ .power-status.panel-status-indicators-box {
+ spacing: 0;
+ }
+
+ // indicator for active
+ .screencast-indicator,
+ .remote-access-indicator { color: $warning_color; }
+}
+
+// App Menu
+#appMenu {
+ spacing: $base_padding;
+ .label-shadow { color: transparent; }
+}
+
+#appMenu .panel-status-menu-box {
+ padding: 0 $base_padding;
+ spacing: $base_padding;
+}
+
+
+// Clock
+
+.clock-display-box {
+ spacing: 2px;
+
+ .clock {
+ padding-left: $base_padding * 2;
+ padding-right: $base_padding * 2;
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_popovers.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_popovers.scss
new file mode 100644
index 00000000..fd2634fe
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_popovers.scss
@@ -0,0 +1,204 @@
+/* Popovers/Menus */
+
+// the popover itself
+.popup-menu-boxpointer {
+ -arrow-rise: $base_margin+2px; // distance from the panel & screen edge
+}
+
+// container of the popover menu
+.popup-menu {
+ min-width: 15em;
+ color: $fg_color;
+
+ //.popup-status-menu-item {font-weight: normal; color: pink;} //dunno what that is
+ &.panel-menu {
+ margin-bottom: 1.75em; // so it doesn't touch the bottom of the screen
+ }
+}
+
+// popover content
+.popup-menu-content {
+ padding: $base_padding;
+
+ border-radius: $modal_radius - 2px;
+ border: 1px solid $borders_edge;
+ box-shadow: 0 2px 4px 0 rgba(0,0,0,0.1);
+ background-color: $bg_color;
+}
+
+// menu items
+.popup-menu-item {
+ padding: $base_padding*1.5 $base_padding*2;
+ border-radius: $base_border_radius;
+ spacing: $base_padding;
+ transition: 0.2s all ease;
+ background-color: transparent;
+
+ &:ltr {padding-left: $base_padding;}
+ &:rtl {padding-right: $base_padding;}
+
+ &:focus, &:hover {
+ background-color: $hover_bg_color !important;
+ &:active { background-color: $active_bg_color !important;}
+ }
+
+ &:checked {background-color: $checked_bg_color !important;}
+
+ &:checked {
+ margin-bottom: 0;
+ box-shadow: inset 0 -1px 0 0 darken($checked_bg_color, 5%);
+ border-radius: $base_border_radius $base_border_radius 0 0;
+ &:focus,&:hover { background-color: if($variant == 'light', darken($checked_bg_color, 6%), lighten($checked_bg_color, 6%)) !important;} // Yaru change: add support for light theme
+ &:active { background-color: if($variant == 'light', darken($checked_bg_color, 9%), lighten($checked_bg_color, 9%)) !important;} // Yaru change: ↑↑↑
+ }
+
+ &:active {
+ background-color: if($variant == 'light', darken($checked_bg_color, 9%), lighten($checked_bg_color, 9%)); // Yaru change: ↑↑↑
+ color: $active_fg_color;
+ }
+
+ &:insensitive {color: transparentize($fg_color,0.5);}
+
+ // add margin to switches in menu items
+ .toggle-switch {
+ &:ltr { margin-left: $base_margin;}
+ &:rtl { margin-right: $base_margin;}
+ }
+}
+
+
+// all other graphical elements (sliders)
+.popup-inactive-menu-item {
+ color: $fg_color;
+ &:insensitive { color: $insensitive_fg_color; }
+}
+
+// symbolic icons in popover
+.popup-menu-arrow,
+.popup-menu-icon {
+ icon-size: 16px !important; // for some reason the variable doesn't work here
+}
+
+.popup-menu-arrow {
+}
+
+
+// popover submenus
+.popup-sub-menu {
+ background-color: $checked_bg_color;
+ border-radius: 0 0 $base_border_radius $base_border_radius;
+
+ .popup-menu-ornament {
+ min-width: $base_icon_size !important;
+ }
+
+ // submenu specific styles
+ .popup-menu-item {
+ border-radius: 0;
+ margin: 0;
+
+ &:last-child {
+ border-radius: 0 0 $base_border_radius $base_border_radius;
+ }
+
+ &:focus,&:hover { background-color: lighten($hover_bg_color, 10%) !important;}
+ &:checked {
+ background-color: lighten($checked_bg_color, 10%) !important;
+ &:focus,&:hover { background-color: lighten($checked_bg_color, 8%) !important;}
+ }
+ &:active { background-color: lighten($active_bg_color, 10%) !important;}
+ }
+
+ .popup-menu-section {
+ .popup-menu-item:last-child {
+ &:hover,&:focus { border-radius: 0;}
+ }
+ &:last-child .popup-menu-item:last-child {
+ border-radius: 0 0 $base_border_radius $base_border_radius;
+ }
+ }
+}
+
+// container for radio and check boxes
+.popup-menu-ornament {
+ @extend %heading;
+ width: 1.2em;
+ text-align: center !important;
+
+ &:ltr { text-align: right;}
+ &:rtl { text-align: left;}
+}
+
+// separator
+.popup-separator-menu-item {
+ margin: 6px 0;
+ padding:0 !important;
+ &:ltr { margin-right: $base_margin;}
+ &:rtl { margin-left: $base_margin;}
+
+ .popup-separator-menu-item-separator {
+ height: 1px; //not really the whole box
+ background-color: $borders_color;
+ }
+
+ .popup-menu-ornament {
+ width: 0 !important;
+ }
+
+ .popup-sub-menu & {
+ background-color: transparent;
+
+ // account for ornament
+ &:ltr { margin-right: 2.5em;}
+ &:rtl { margin-left: 2.5em;}
+
+ .popup-separator-menu-item-separator {
+ background-color: lighten($borders_color, 7%);
+ }
+ }
+}
+
+// desktop background menu
+.background-menu {
+ -boxpointer-gap: 0px;
+ -arrow-rise: 0px; // hide the beak on the menu
+}
+
+// system status menu
+.aggregate-menu {
+ min-width: 22em;
+
+ // this is unneeded at the top-level in this menu, hide it
+ .popup-menu-ornament { width: 0 !important; }
+
+ // lock screen, shutdown, etc. buttons
+ .popup-menu-icon {
+ -st-icon-style: symbolic;
+ &:ltr {margin-right: $base_margin*2;}
+ &:rtl {margin-left: $base_margin*2;}
+ }
+
+ // account for ornaments in submenus with padding
+ .popup-sub-menu .popup-menu-item > :first-child {
+ // this value is hardcoded for visual effect
+ &:ltr { margin-left: 1em;}
+ &:rtl { margin-right: 1em;}
+ }
+}
+
+// right-click (and panel) app menu
+.app-menu {
+ max-width: 27.25em;
+
+ // this is unneeded at the top-level in this menu, hide it
+ .popup-menu-ornament { width: 0 !important; }
+
+ .popup-inactive-menu-item:first-child {
+ // "Open Windows" label
+ > StLabel {
+ @extend %caption_heading;
+ &:ltr {margin-right: $base_margin*2;}
+ &:rtl {margin-left: $base_margin*2;}
+ }
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_screen-shield.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_screen-shield.scss
new file mode 100644
index 00000000..6550e5bc
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_screen-shield.scss
@@ -0,0 +1,76 @@
+/* Screen Shield */
+
+.unlock-dialog-clock {
+ color: white;
+ font-weight: 300;
+ text-align: center;
+ spacing: 24px;
+ padding-bottom: 2.5em;
+}
+
+.unlock-dialog-clock-time {
+ font-size: 64pt;
+ padding-top: 42px;
+ @extend %numeric;
+}
+
+.unlock-dialog-clock-date {
+ font-size: 16pt;
+ font-weight: normal;
+}
+
+.unlock-dialog-clock-hint {
+ font-weight: normal;
+ padding-top: 48px;
+}
+
+.unlock-dialog-notifications-container {
+ margin: 12px;
+ spacing: 6px;
+ width: 23em;
+ background-color: transparent;
+
+ .summary-notification-stack-scrollview {
+ padding-top: 0;
+ padding-bottom: 0;
+ }
+
+ .notification,
+ .unlock-dialog-notification-source {
+ padding: 12px 16px;
+ border: none;
+ background-color: transparentize($osd_fg_color,0.9);
+ color: $osd_fg_color;
+ border-radius: $modal_radius;
+
+ &.critical { background-color: transparentize($osd_fg_color,0.8) }
+ }
+}
+
+.unlock-dialog-notification-label {
+ padding: 0 0 0 12px;
+}
+
+.unlock-dialog-notification-count-text {
+ font-weight: bold;
+ padding: 0 12px;
+ color: $osd_fg_color;
+ background-color: transparentize($osd_fg_color, 0.9);
+ border-radius: 99px;
+}
+
+.screen-shield-background { //just the shadow, really
+ background: black;
+ box-shadow: 0 2px 4px rgba(0,0,0,0.6);
+}
+
+#lockDialogGroup {
+ background-color: $system_bg_color;
+}
+#unlockDialogNotifications {
+ StButton#vhandle, StButton#hhandle {
+ background-color: transparentize($bg_color,0.7);
+ &:hover, &:focus { background-color: transparentize($bg_color,0.5); }
+ &:active { background-color: transparentize($selected_bg_color,0.5); }
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_screenshot.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_screenshot.scss
new file mode 100644
index 00000000..6be3f948
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_screenshot.scss
@@ -0,0 +1,202 @@
+// Screenshot UI
+.icon-label-button-container {
+ spacing: $base_padding;
+ @extend %caption;
+
+ StIcon { icon-size: 32px;}
+}
+
+$screenshot_ui_panel_padding: $base_padding*3;
+$screenshot_ui_shot_cast_margin: 21px;
+$screenshot_ui_panel_border_radius: $modal_radius + $screenshot_ui_shot_cast_margin;
+$screenshot_ui_shot_cast_spacing: 3px;
+
+$screenshot_ui_button_red: $red; // Yaru: Use our palette's color
+
+.screenshot-ui-panel {
+ @extend %osd_panel;
+ border-radius: $screenshot_ui_panel_border_radius;
+ padding: $screenshot_ui_panel_padding;
+ // Reduce the bottom padding a little to accommodate the large capture button.
+ padding-bottom: $screenshot_ui_panel_padding - 6px;
+ margin-bottom: 4em;
+ spacing: $base_padding * 2;
+}
+
+.screenshot-ui-close-button {
+ @extend .window-close; // copy window close button
+ padding: $base_padding; // but with more padding
+ &.left { margin-left: 8px;}
+ &.right { margin-right: 8px;}
+}
+
+.screenshot-ui-type-button {
+ @extend %osd_button;
+ padding: $base_padding * 2 $base_padding * 3 !important;
+ border-radius: $screenshot_ui_panel_border_radius - $screenshot_ui_panel_padding;
+}
+
+.screenshot-ui-capture-button {
+ width: 36px;
+ height: 36px;
+ border-radius: 99px;
+ border: 4px $osd_fg_color;
+ padding: 4px;
+
+ .screenshot-ui-capture-button-circle {
+ background-color: $osd_fg_color;
+ transition-duration: 200ms;
+ &:hover, &:focus { background-color: $hover_bg_color;}
+ border-radius: 99px;
+ }
+
+ &:hover, &:focus {
+ .screenshot-ui-capture-button-circle {
+ background-color: darken($osd_fg_color, 15%);
+ }
+ }
+
+ &:active {
+ .screenshot-ui-capture-button-circle {
+ background-color: darken($osd_fg_color, 50%);
+ }
+ }
+
+ &:cast {
+ .screenshot-ui-capture-button-circle {
+ background-color: $screenshot_ui_button_red;
+ }
+
+ &:hover, &:focus {
+ .screenshot-ui-capture-button-circle {
+ background-color: lighten($screenshot_ui_button_red, 5%);
+ }
+ }
+
+ &:active {
+ .screenshot-ui-capture-button-circle {
+ background-color: darken($screenshot_ui_button_red, 7%);
+ }
+ }
+ }
+}
+
+.screenshot-ui-shot-cast-container {
+ background-color: $hover_bg_color;
+ border-radius: $modal_radius;
+ padding: $screenshot_ui_shot_cast_spacing;
+ spacing: $screenshot_ui_shot_cast_spacing;
+
+ &:ltr { margin-left: $screenshot_ui_shot_cast_margin - $screenshot_ui_panel_padding;}
+ &:rtl { margin-right: $screenshot_ui_shot_cast_margin - $screenshot_ui_panel_padding;}
+}
+
+.screenshot-ui-shot-cast-button {
+ padding: $base_padding $base_padding*2;
+ background-color: transparent;
+ &:hover, &:focus { background-color: lighten($hover_bg_color, 5%);}
+ &:active { background-color: lighten($active_bg_color,5%);}
+ &:checked { background-color: white; color: black;}
+
+ border-radius: $modal_radius - $screenshot_ui_shot_cast_spacing;
+
+ StIcon { icon-size: $base_icon_size;}
+}
+
+.screenshot-ui-show-pointer-button {
+ @extend %osd_button;
+ border-radius: 99px;
+ padding: $base_padding * 2 !important;
+ StIcon { icon-size: $base_icon_size;}
+}
+
+.screenshot-ui-area-indicator-shade {
+ background-color: rgba(0,0,0,.3);
+}
+
+.screenshot-ui-area-selector {
+ .screenshot-ui-area-indicator-shade {
+ background-color: rgba(0,0,0,.5);
+ }
+
+ .screenshot-ui-area-indicator-selection {
+ border: 2px white;
+ }
+}
+
+.screenshot-ui-area-selector-handle {
+ border-radius: 99px;
+ background-color: white;
+ box-shadow: 0 1px 3px 2px rgba(0,0,0,0.2);
+ width: 24px;
+ height: 24px;
+}
+
+.screenshot-ui-window-selector {
+ background-color: $system_bg_color;
+
+ .screenshot-ui-window-selector-window-container {
+ margin: 100px;
+ }
+
+ &:primary-monitor {
+ .screenshot-ui-window-selector-window-container {
+ // Make some room for the panel.
+ margin-bottom: 200px;
+ }
+ }
+}
+
+.screenshot-ui-window-selector-window-border {
+ transition-duration: 200ms;
+ border-radius: $modal_radius;
+ border: 6px transparent;
+}
+
+.screenshot-ui-window-selector-check {
+ transition-duration: 200ms;
+ color: transparent;
+ border-radius: 99px;
+ border-width: 12px;
+ icon-size: 24px;
+}
+
+.screenshot-ui-window-selector-window {
+ &:hover {
+ .screenshot-ui-window-selector-window-border {
+ border-color: darken($selected_bg_color, 15%);
+ }
+ }
+ &:checked {
+ .screenshot-ui-window-selector-window-border {
+ border-color: $selected_bg_color;
+ background-color: transparentize($selected_bg_color, 0.8);
+ }
+
+ .screenshot-ui-window-selector-check {
+ color: $selected_fg_color;
+ background-color: $selected_bg_color;
+ }
+ }
+}
+
+.screenshot-ui-screen-selector {
+ transition-duration: 200ms;
+ background-color: rgba(0,0,0,.5);
+
+ &:hover { background-color: rgba(0,0,0,.3);}
+ &:active { background-color: rgba(0,0,0,.7);}
+ &:checked {
+ background-color: transparent;
+ border: 2px white;
+ }
+}
+
+.screenshot-ui-tooltip {
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border-radius: 99px;
+ padding: $base_padding $base_padding * 2;
+ text-align: center;
+ -y-offset: 24px;
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_scrollbars.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_scrollbars.scss
new file mode 100644
index 00000000..77cde653
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_scrollbars.scss
@@ -0,0 +1,29 @@
+/* Scrollbars */
+
+StScrollView {
+ &.vfade { -st-vfade-offset: 68px; }
+ &.hfade { -st-hfade-offset: 68px; }
+}
+
+StScrollBar {
+ padding: 0;
+
+ StScrollView & {
+ min-width: 8px;
+ min-height: 8px;
+ }
+
+ StBin#trough {
+ border-radius: 0;
+ background-color: transparent;
+ }
+
+ StButton#vhandle, StButton#hhandle {
+ border-radius: 8px;
+ background-color: mix($fg_color, $bg_color, 30%);
+ border: 3px solid transparent; //would be nice to margin or at least to transparent
+ transition: 500ms all ease;
+ &:hover {background-color: mix($fg_color, $bg_color, 50%);}
+ &:active {background-color: mix($fg_color, $bg_color, 40%);}
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_search-entry.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_search-entry.scss
new file mode 100644
index 00000000..ce6c093c
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_search-entry.scss
@@ -0,0 +1,26 @@
+// Search entry
+
+$search_entry_width: 320px;
+$search_entry_height: 36px;
+
+%search_entry,
+.search-entry {
+ border-radius: $search_entry_height * 0.5; // half the height
+
+ margin-top: $base_padding * 4; // Yaru change: realign search entry due to fixed panel opacity
+ margin-bottom: $base_padding * 2; // Yaru change: realign search entry due to fixed panel opacity
+ padding: $base_padding+1 $base_padding+3;
+ width: $search_entry_width;
+
+ @include entry(normal);
+ &:hover { @include entry(hover);}
+ &:focus { @include entry(focus);}
+ &:insensitive { @include entry(insensitive);}
+
+ .search-entry-icon {
+ color: inherit;
+ icon-size: $base_icon_size;
+ margin-top: 2px; // center vertically
+ padding: 0 4px;
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_search-results.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_search-results.scss
new file mode 100644
index 00000000..f9155840
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_search-results.scss
@@ -0,0 +1,96 @@
+/* Search */
+
+// search overview container
+#searchResults {
+ margin: 0 $base_margin;
+}
+
+#searchResultsContent {
+ max-width: 1072px;
+}
+
+// search results sections "the boxes"
+.search-section {
+ // This should be equal to #searchResultsContent spacing
+ spacing: $base_padding*3;
+
+ // separator (unstyled)
+ .search-section-separator {
+ height: $base_margin*2; // use it as a spacer
+ background-color: transparent;
+ }
+}
+
+// content
+.search-section-content {
+ background-color: $dash_background_color; // Yaru: use same background as dash
+ border-radius: $modal_radius*1.5;
+ border: 1px solid $borders_color_dark; // Yaru: use same border-color as dash
+ color: $osd_fg_color;
+ padding: $base_padding*2;
+ margin:0 $base_margin*3;
+}
+
+%search_section_content_item {
+ @include tile_button($osd_fg_color);
+ border-radius: $base_border_radius+3px;
+}
+
+// "no results" text
+.search-statustext {
+ @extend %title_1;
+}
+
+.grid-search-results {
+ spacing: $base_padding*5;
+ margin:0 $base_margin*3;
+}
+
+// Search results with icons
+.grid-search-result {
+ @extend .app-well-app;
+}
+
+// search result provider
+.search-provider-icon {
+ @extend %search_section_content_item;
+ &:ltr {margin-right: $base_margin;}
+ &:rtl {margin-left: $base_margin;}
+
+ // content
+ .list-search-provider-content {
+ spacing: $base_padding * 2;
+
+ // provider labels
+ .list-search-provider-details {
+ width: 120px;
+ color: $osd_fg_color;
+ }
+ }
+}
+
+// search results list
+.list-search-results {
+ spacing: $base_padding;
+}
+
+// search result listitem
+.list-search-result {
+ @extend %search_section_content_item;
+
+ // content
+ .list-search-result-content {
+ spacing: $base_padding;
+ }
+
+ // list item title (with leading icon)
+ .list-search-result-title {
+ spacing: $base_padding * 2;
+ // font-weight: bold;
+ }
+
+ // list item description
+ .list-search-result-description {
+ color: $osd_insensitive_fg_color;
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_slider.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_slider.scss
new file mode 100644
index 00000000..18cdb0e3
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_slider.scss
@@ -0,0 +1,25 @@
+/* Slider */
+
+$slider_size: 16px;
+
+.slider {
+ // slider trough
+ -barlevel-height: 4px;
+ -barlevel-background-color: if($variant == 'light', transparentize($fg_color, 0.6), transparentize($fg_color, 0.8)); //background of the trough
+ -barlevel-border-width: 2px;
+ -barlevel-border-color: transparent; // trough border color
+ // fill style
+ -barlevel-active-background-color: $progress_bg_color; //active trough fill // Yaru change: we detached progress from selected
+ -barlevel-active-border-color: transparent;
+ // overfill style (red in this case)
+ -barlevel-overdrive-color: $destructive_color;
+ -barlevel-overdrive-border-color: transparent; //trough border when red;
+ -barlevel-overdrive-separator-width:1px;
+ // slider handler
+ -slider-handle-border-width: if($variant=='light', 1px, 0); // Yaru change: add border on light theme
+ -slider-handle-border-color: if($variant=='light', darken($alt_borders_color, 3%), transparent); // because 0 width - Yaru change: the handle border needs to be darker for the light theme
+ -slider-handle-radius: $slider_size * 0.5; // half the size of the size
+
+ color: darken(white, 1%); // Yaru change: adapt knob to gtk
+ height: if($variant == 'light', $slider_size + 2px, $slider_size); // Yaru change: increase height in light theme due to border
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_switcher-popup.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_switcher-popup.scss
new file mode 100644
index 00000000..2c29dd0f
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_switcher-popup.scss
@@ -0,0 +1,71 @@
+/* App Switcher */
+
+// same as dash
+$switcher_padding: $base_padding + 4px; // 10px
+$switcher_border_radius: $modal_radius + 8px;
+
+
+// the full screen container of the switcher
+.switcher-popup {
+ padding: 0;
+ spacing: $base_padding * 4;
+}
+
+// switcher onscreen panel
+.switcher-list {
+ @extend %osd_panel;
+ padding: $switcher_padding;
+ border-radius: $switcher_border_radius;
+ box-shadow: 0 8px 8px 0 rgba(0,0,0,0.1);
+
+ // container for items in list
+ .switcher-list-item-container {
+ spacing: $base_padding * 2;
+ }
+
+ // each item in the list
+ .item-box {
+ @include tile_button($osd_fg_color);
+ // override over style so mouse doesn't steal focus
+ &:hover {background: none;}
+ }
+
+ .separator {
+ width: 1px;
+ background: $borders_color;
+ }
+
+ // container of thumbnails
+ .thumbnail-box {
+ padding: 2px;
+ spacing: $base_padding;
+ }
+
+ // window thumbnail itself
+ .thumbnail {
+ width: 256px; // equal to THUMBNAIL_DEFAULT_SIZE in altTab.js
+ border-radius:$base_border_radius;
+ }
+}
+
+.switcher-arrow { // Yaru: make arrow visible in the light theme, should be ported to upstream
+ border-color: rgba(0,0,0,0);
+ color: transparentize($osd_fg_color,0.2);
+
+ &:highlighted {
+ border-color: $osd_fg_color;
+ color: $osd_fg_color;
+ }
+}
+
+// Input Source Switcher
+.input-source-switcher-symbol {
+ font-size: 34pt;
+ width: 96px;
+ height: 96px;
+}
+
+// Window cycler highlight
+.cycler-highlight {
+ border: 5px solid $selected_bg_color;
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_switches.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_switches.scss
new file mode 100644
index 00000000..b6d8fe83
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_switches.scss
@@ -0,0 +1,16 @@
+/* Switches */
+
+// these are equal to the size of the SVG assets
+$switch_height: 26px;
+$switch_width: 48px;
+
+.toggle-switch {
+ color: $fg_color;
+ height: $switch_height;
+ width: $switch_width;
+ background-size: contain;
+ background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/toggle-off-light.svg"),url("resource:///org/gnome/shell/theme/toggle-off.svg"));
+ &:checked {
+ background-image: if($variant == 'light', url("resource:///org/gnome/shell/theme/toggle-on-light.svg"),url("resource:///org/gnome/shell/theme/toggle-on.svg"));
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_window-picker.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_window-picker.scss
new file mode 100644
index 00000000..2716ad58
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_window-picker.scss
@@ -0,0 +1,54 @@
+/* Window Picker */
+
+$window_picker_spacing: $base_padding; // 6px
+$window_picker_padding: $base_padding * 2; // 12px
+
+$window_thumbnail_label_color: transparentize($osd_bg_color, 0.4);
+
+$window_close_button_color: lighten($osd_bg_color, 10%); // Yaru: lighter close button because of our darker overview bg
+$window_close_button_size: 30px;
+$window_close_button_padding: 3px;
+
+// Window picker
+.window-picker {
+ // Space between window thumbnails
+ spacing: $window_picker_spacing;
+}
+
+// Window titles
+.window-caption {
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border-radius: 99px;
+ padding: $base_padding $base_padding * 2;
+ border: 1px solid $borders_color_dark; // Yaru: add border
+}
+
+// Close button
+.window-close {
+ background-color: $window_close_button_color;
+ color: $osd_fg_color;
+ border-radius: 99px;
+ padding: $window_close_button_padding;
+ height: $window_close_button_size;
+ width: $window_close_button_size;
+ transition-duration: 300ms;
+ border: 1px solid $borders_color_dark; // Yaru: add border
+
+ & StIcon { icon-size: 24px; } // uses non standard icon size
+
+ &:hover {
+ background-color: lighten($window_close_button_color, 5%); // Yaru: lighter close button because of our darker overview bg
+ }
+
+ &:active {
+ // color: transparentize($osd_fg_color, 0.2); // Yaru: don't change icon color when :active
+ background-color: darken($window_close_button_color, 5%);
+ }
+}
+
+.workspace-background {
+ // keep in sync with BACKGROUND_CORNER_RADIUS_PIXELS in workspace.js
+ border-radius: 30px;
+ box-shadow: 0 4px 16px 4px transparentize(darken($osd_bg_color, 30%), 0.7);
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_workspace-switcher.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_workspace-switcher.scss
new file mode 100644
index 00000000..f06130ba
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_workspace-switcher.scss
@@ -0,0 +1,25 @@
+/* Workspace Switcher */
+
+$ws_indicator_height: $large_icon_size;
+$ws_dot_active: $ws_indicator_height / 3;
+$ws_dot_inactive: $ws_indicator_height / 6;
+
+.workspace-switcher {
+ @extend %osd_panel;
+ margin-bottom: 4em;
+ spacing: $base_padding * 2;
+ padding: $base_padding * 2 $base_padding * 3;
+}
+
+.ws-switcher-indicator {
+ background-color: transparentize($osd_fg_color,0.5);
+ padding: $ws_dot_inactive / 2;
+ margin: ($ws_indicator_height - $ws_dot_inactive) / 2;
+ border-radius: $ws_indicator_height;
+
+ &:active {
+ background-color: $osd_fg_color;
+ padding: $ws_dot_active / 2;
+ margin: ($ws_indicator_height - $ws_dot_active) / 2;
+ }
+}
diff --git a/gnome-shell/upstream/gnome-shell-sass/widgets/_workspace-thumbnails.scss b/gnome-shell/upstream/gnome-shell-sass/widgets/_workspace-thumbnails.scss
new file mode 100644
index 00000000..1fa1f24a
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-sass/widgets/_workspace-thumbnails.scss
@@ -0,0 +1,31 @@
+/* Workspace pager */
+
+// thumbnails in overview
+.workspace-thumbnails {
+ visible-width: 32px; //amount visible before hover
+ spacing: $base_padding;
+ padding: $base_padding;
+ border-color: transparent; // Yaru: adapt the workspace osd border to the dock border
+
+ .workspace-thumbnail {
+ @extend %overview_panel;
+ border-radius: 3px;
+ background-color: $dash_background_color; // Yaru: use same background as dash
+ border: 1px solid $borders_color_dark; // Yaru: use same border as dash
+ }
+
+ // drag and drop indicator
+ .placeholder {
+ background-image: url("resource:///org/gnome/shell/theme/workspace-placeholder.svg");
+ background-size: contain;
+ width: 18px;
+ }
+}
+
+// selected indicator
+.workspace-thumbnail-indicator {
+ border: 2px solid $focus_border_color; // Yaru: we detached focus from selected
+ border-radius: 3px;
+ padding: 0px;
+ // background-color: transparentize($selected_bg_color, 0.9);
+}
diff --git a/gnome-shell/upstream/gnome-shell-start.svg b/gnome-shell/upstream/gnome-shell-start.svg
new file mode 100644
index 00000000..f409cfe3
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell-start.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/gnome-shell.scss.in b/gnome-shell/upstream/gnome-shell.scss.in
new file mode 100644
index 00000000..0136af97
--- /dev/null
+++ b/gnome-shell/upstream/gnome-shell.scss.in
@@ -0,0 +1,77 @@
+$variant: if(@DarkVariant@, 'dark', 'light');
+$yaru_variant: '@YaruVariant@';
+$use_gresource: @UseGResource@;
+$high_contrast: @HighContrast@;
+$UPSTREAM_VARIANTS: ['dark', 'light'];
+
+@import 'sass-utils';
+
+@function is-asset-colorable($asset) {
+ $COLORABLE_ASSETS: @ColorableAssets@; // This is going to be a list.
+
+ @return list-index($COLORABLE_ASSETS, $asset) != null;
+}
+
+@function maybe-add-variant-to-colorable-asset($url) {
+ $path: str-dirname($url);
+ $path: if($path == '.', '', $path + '/');
+ $asset: str-basename($url);
+ $extension: str-extension($asset);
+ $extension: if($extension, '.' + $extension, '');
+
+ /* First remove the upstream variant (if any) from the asset */
+ @each $v in $UPSTREAM_VARIANTS {
+ $suffix: '-' + $v + $extension;
+ @if str-ends-with($asset, $suffix) {
+ $asset: str-slice($asset, 1, - (str-length($suffix) + 1)) + $extension;
+ }
+ }
+
+ @if is-asset-colorable($asset) {
+ $url: $path + str-insert($asset, '-' + $yaru_variant, str-index($asset, $extension));
+ }
+
+ @return $url;
+}
+
+@function yaru_url_handler($arg) {
+ $url: unquote($arg);
+
+ @if not $use_gresource {
+ $resource_prefix: "resource://";
+ @if str-starts-with($url, $resource_prefix) {
+ $url: str-basename($url);
+ }
+ }
+
+ $url: maybe-add-variant-to-colorable-asset($url);
+
+ @if $url != $arg {
+ @debug($arg + " -> " + $url);
+ }
+
+ @return url(quote($url));
+}
+
+@debug 'Generating GNOME Shell ' + $yaru_variant + ' theme (' + $variant +' variant, hc: '+ $high_contrast+')';
+
+@import "gnome-shell-sass/_@Colors@";
+@import "gnome-shell-sass/_drawing";
+@import "gnome-shell-sass/_common";
+@import "gnome-shell-sass/_widgets";
+@import "gnome-shell-sass/_dock";
+
+@if $high_contrast {
+ //force symbolic icons
+ stage {
+ -st-icon-style: symbolic;
+ }
+
+ .toggle-switch {
+ width: 48px;
+ background-image: yaru-url-handler("resource:///org/gnome/shell/theme/toggle-off-hc.svg");
+ &:checked {
+ background-image: yaru-url-handler("resource:///org/gnome/shell/theme/toggle-on-hc.svg");
+ }
+ }
+}
diff --git a/gnome-shell/upstream/install-shell.sh b/gnome-shell/upstream/install-shell.sh
new file mode 100755
index 00000000..fc07c034
--- /dev/null
+++ b/gnome-shell/upstream/install-shell.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+# -*- coding: UTF-8 -*-
+
+project_name="$1"
+destdir_prefix="${MESON_INSTALL_DESTDIR_PREFIX}/share"
+install_prefix="${MESON_INSTALL_PREFIX}/share"
+
+mkdir -p "${destdir_prefix}/themes/${project_name}"
+ln -sf "${install_prefix}/gnome-shell/theme/${project_name}" "${destdir_prefix}/themes/${project_name}/gnome-shell"
diff --git a/gnome-shell/upstream/meson.build b/gnome-shell/upstream/meson.build
new file mode 100644
index 00000000..01fbcafb
--- /dev/null
+++ b/gnome-shell/upstream/meson.build
@@ -0,0 +1,299 @@
+gnomeshell_theme_dir = join_paths(gnomeshell_default_theme_dir,
+ meson.project_name())
+
+styles = [
+ 'gnome-shell',
+ 'gnome-shell-high-contrast',
+]
+
+variants = [
+ 'light',
+ 'dark',
+]
+
+DEFAULT_VARIANT = get_option('gnome-shell-default-variant')
+DEFAULT_GDM_VARIANT = get_option('gdm-default-variant')
+INCLUDE_HIGH_CONTRAST_VARIANTS = false
+
+foreach accent: enabled_accent_colors
+ if enabled_accent_colors.contains(accent)
+ variants += (get_option('default') ? [accent] : [])
+ variants += (get_option('dark') ? [ accent + '-dark' ] : [])
+ endif
+endforeach
+
+if not variants.contains(DEFAULT_VARIANT)
+ error('Invalid gnome-shell default variant selected')
+endif
+
+if not variants.contains(DEFAULT_GDM_VARIANT)
+ error('Invalid default gdm variant selected')
+endif
+
+theme_css = []
+theme_sources = files(
+ run_command(
+ 'find', meson.current_source_dir(), '-name', '*.scss'
+ ).stdout().strip().split('\n')
+)
+assert(theme_sources.length() > 0, 'No theme sources found')
+
+theme_assets = files(
+ run_command(
+ 'find', meson.current_source_dir(), '-maxdepth', '1',
+ '(',
+ '-name', '*.svg',
+ '-or',
+ '-name', '*.css',
+ ')',
+ ).stdout().strip().split('\n')
+)
+
+colorable_theme_assets = files(
+ run_command(
+ 'find', meson.current_source_dir() / 'colorable-assets', '-maxdepth', '1', '-name', '*.svg'
+ ).stdout().strip().split('\n')
+)
+
+colorable_assets_names = []
+foreach asset: colorable_theme_assets
+ basename = fs.name(asset)
+ colorable_assets_names += basename
+endforeach
+
+theme_gresource_files = theme_assets
+theme_gresource_deps = []
+
+source_deps = []
+
+css_sources_path = meson.current_build_dir()
+foreach src: theme_sources
+ out_name = '___'.join('@0@'.format(src).split('/'))
+ source_deps += custom_target(out_name,
+ input: src,
+ output: out_name,
+ command: [
+ 'bash', '-c',
+ ';'.join([
+ 'output="$1/$(realpath --relative-to="'+ meson.current_source_dir() + '" $0)"',
+ 'mkdir -p "$(dirname "$output")"',
+ # Can't use proper regex ("s,\(\b\)url\(\s*(\),\1yaru-url-handler\2,g") as per
+ # https://github.com/mesonbuild/meson/issues/1564
+ 'sed "s,[[:space:]]*url[[:space:]]*(, yaru_url_handler(,g;" "$0" > "$output"',
+ ]),
+ '@INPUT@',
+ '@OUTDIR@',
+ ],
+ install: false,
+ )
+endforeach
+
+theme_gresource_xml = files('data/gnome-shell-theme.gresource.xml')[0]
+icons_gresource_xml = files('data/gnome-shell-icons.gresource.xml')[0]
+
+foreach variant: variants
+ is_dark = variant == 'dark' or variant.endswith('-dark')
+ is_variant = variant != DEFAULT_VARIANT
+ variant_base_name = is_dark ? variant.split('-dark')[0] : variant
+ variant_suffix = is_variant ? '-@0@'.format(variant) : ''
+ theme_full_name = meson.project_name() + variant_suffix
+ is_custom_accent = enabled_accent_colors.contains(variant_base_name)
+
+ install_theme_sources = not gnomeshell_user_themes_suport.disabled()
+ install_dir = gnomeshell_theme_dir + variant_suffix
+
+ accent_configuration = {
+ 'yaru_dark_variant': is_dark ? 'true' : 'false',
+ 'yaru_accent_color': is_custom_accent ? variant_base_name : 'default',
+ }
+
+ # Prepare colorable assets
+ shell_yaru_colors_defs_scss = configure_file(
+ configuration: accent_configuration + {
+ 'yaru_theme_entry_point': yaru_colors_defs_scss
+ },
+ input: accent_colors_definitions_scss,
+ output: 'gnome-shell-yaru-colors-defs-@0@.scss'.format(variant),
+ )
+
+ shell_yaru_colors_defs = custom_target(
+ 'gnome-shell-yaru-color-definitions-@0@'.format(variant),
+ input: shell_yaru_colors_defs_scss,
+ output: '@BASENAME@.css'.format(variant),
+ command: [
+ sassc, '-a', '@INPUT@', '@OUTPUT@',
+ '-I', css_sources_path / 'gnome-shell-sass',
+ ],
+ depends: source_deps,
+ depend_files: [
+ yaru_colors_defs_scss,
+ theme_sources,
+ ]
+ )
+
+ foreach colorable_asset: colorable_theme_assets
+ basename = fs.name(colorable_asset)
+
+ # We don't support other variants here...
+ if is_variant and basename.endswith('-hc.svg') and not INCLUDE_HIGH_CONTRAST_VARIANTS
+ continue
+ endif
+
+ asset_target = custom_target(
+ fs.stem(basename) + '-' + variant + '.svg',
+ input: colorable_asset,
+ output: '@BASENAME@-@0@.svg'.format(variant),
+ command: [
+ colorize_dummy_svg,
+ shell_yaru_colors_defs,
+ '--input-file', '@INPUT@',
+ '--output-folder', '@OUTDIR@',
+ '--variant', variant,
+ ],
+ depends: shell_yaru_colors_defs,
+ install: install_theme_sources,
+ install_dir: install_dir,
+ )
+ theme_gresource_files += asset_target.full_path()
+ theme_gresource_deps += asset_target
+ endforeach
+
+ # generate .css files
+ style_css = []
+ variant_styles = []
+ output_styles = []
+
+ foreach style: styles
+ stylename = style + variant_suffix
+ high_contrast = style.endswith('high-contrast')
+
+ if (is_variant and high_contrast and not INCLUDE_HIGH_CONTRAST_VARIANTS)
+ continue
+ endif
+
+ variant_styles += '@0@.css'.format(stylename)
+ output_styles += '@0@.css'.format(style)
+
+ theme_main_file = configure_file(
+ input: 'gnome-shell.scss.in',
+ output: '@0@.scss'.format(stylename),
+ configuration: {
+ 'DarkVariant': is_dark ? 'true' : 'false',
+ 'YaruVariant': variant,
+ 'UseGResource': gnomeshell_use_gresource ? 'true' : 'false',
+ 'HighContrast': high_contrast ? 'true' : 'false',
+ 'Colors': (high_contrast ? 'high-contrast-' : '') + 'colors',
+ 'ColorableAssets': '@0@'.format(colorable_assets_names),
+ },
+ )
+
+ if is_custom_accent and (not high_contrast or INCLUDE_HIGH_CONTRAST_VARIANTS)
+ theme_sources += theme_main_file
+ theme_main_file = configure_file(
+ configuration: accent_configuration + {
+ 'yaru_theme_entry_point': meson.project_build_root() / '@0@'.format(theme_main_file),
+ },
+ input: accent_colors_definitions_scss,
+ output: '@0@-accent-colors.scss'.format(stylename),
+ )
+ endif
+
+ style_css += custom_target(
+ 'style-@0@'.format(stylename),
+ input: theme_main_file,
+ output: '@0@.css'.format(stylename),
+ command: [
+ sassc, '-a', '@INPUT@', '@OUTPUT@',
+ '-I', css_sources_path,
+ '-I', meson.project_source_root() / 'common',
+ ],
+ install: install_theme_sources,
+ install_dir: install_dir,
+ depends: source_deps,
+ depend_files: theme_sources + sass_utils_scss,
+ )
+
+ theme_gresource_files += style_css[-1].full_path()
+ theme_gresource_deps += style_css[-1]
+ endforeach
+
+ # This is an hack we need to remove once meson fixes this issue:
+ # https://github.com/mesonbuild/meson/issues/2320
+ # by just making the style_css to have an output in the 'variant' subdir
+ if install_theme_sources and is_variant
+ assert(output_styles.length() == variant_styles.length(), 'Output styles length mismatch')
+ foreach i: range(output_styles.length())
+ meson.add_install_script('bash', '-c',
+ 'mv -v ${MESON_INSTALL_DESTDIR_PREFIX}/@0@ ${MESON_INSTALL_DESTDIR_PREFIX}/@1@'.format(
+ install_dir / variant_styles[i], install_dir / output_styles[i]))
+ endforeach
+ endif
+
+ # static files to copy
+ data_sources = install_theme_sources ? theme_assets : []
+
+ # install static data files
+ install_data(data_sources, install_dir: install_dir)
+
+ if install_theme_sources
+ if meson.version().version_compare('>= 0.61')
+ install_symlink('gnome-shell',
+ install_dir: gnomeshell_alt_themes_dir / theme_full_name,
+ # We could use a simpler definition, but that breaks $DESTDIR usage
+ # https://github.com/mesonbuild/meson/pull/10176
+ #pointing_to: get_option('prefix') / install_dir`
+ pointing_to: run_command(python, '-c',
+ 'import os, sys; print(os.path.relpath(sys.argv[1], sys.argv[2]))',
+ install_dir,
+ gnomeshell_alt_themes_dir / theme_full_name
+ ).stdout().strip(),
+ )
+ else
+ meson.add_install_script('install-shell.sh', theme_full_name)
+ endif
+ endif
+endforeach
+
+if gnomeshell_use_gresource
+ theme_gresource_files_xml = []
+
+ foreach gfile: theme_gresource_files
+ filepath = '@0@'.format(gfile)
+ alias = filepath[0] == '/' ? '@0@'.format(gfile).split('/')[-1] : filepath
+ if alias == 'gnome-shell@0@.css'.format(DEFAULT_GDM_VARIANT != '' ? '-' + DEFAULT_GDM_VARIANT : '')
+ # Use Yaru files for ubuntu's special gdm
+ theme_gresource_files_xml += '@0@'.format(gfile)
+ endif
+
+ if alias.endswith('.css') and filepath.contains(meson.current_build_dir())
+ # This is kept for compatibility reasons, but we may drop it once shell is updated too
+ alias = 'Yaru' / alias
+ endif
+
+ theme_gresource_files_xml += '@1@'.format(alias, gfile)
+ endforeach
+
+ gnome.compile_resources(
+ 'gnome-shell-theme',
+ configure_file(
+ input: theme_gresource_xml,
+ output: '@PLAINNAME@',
+ configuration: {
+ 'YARU_SHELL_THEME_RESOURCES': '\n '.join(theme_gresource_files_xml),
+ },
+ ),
+ dependencies: theme_gresource_deps,
+ gresource_bundle: true,
+ install: true,
+ install_dir: gnomeshell_theme_dir,
+ )
+
+ gnome.compile_resources(
+ 'gnome-shell-icons',
+ icons_gresource_xml,
+ source_dir: 'data/icons',
+ gresource_bundle: true,
+ install: true,
+ install_dir: gnomeshell_theme_dir,
+ )
+endif
diff --git a/gnome-shell/upstream/process-working.svg b/gnome-shell/upstream/process-working.svg
new file mode 100644
index 00000000..a8a1dd3a
--- /dev/null
+++ b/gnome-shell/upstream/process-working.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/running-indicator.svg b/gnome-shell/upstream/running-indicator.svg
new file mode 100644
index 00000000..4d72720b
--- /dev/null
+++ b/gnome-shell/upstream/running-indicator.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/upstream/workspace-placeholder.svg b/gnome-shell/upstream/workspace-placeholder.svg
new file mode 100644
index 00000000..6871b0ad
--- /dev/null
+++ b/gnome-shell/upstream/workspace-placeholder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gtksourceview/meson.build b/gtksourceview/meson.build
new file mode 100644
index 00000000..251e3cf6
--- /dev/null
+++ b/gtksourceview/meson.build
@@ -0,0 +1,11 @@
+flavours = []
+foreach flavour: ['default', 'dark']
+ if not get_option(flavour)
+ message('skip flavour ' + flavour)
+ continue
+ endif
+ flavours += flavour
+endforeach
+
+
+subdir('src')
diff --git a/gtksourceview/src/dark.xml.in b/gtksourceview/src/dark.xml.in
new file mode 100644
index 00000000..8b758483
--- /dev/null
+++ b/gtksourceview/src/dark.xml.in
@@ -0,0 +1,148 @@
+
+
+ <_description>A GtkSourceView style to match @FlavourThemeName@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gtksourceview/src/default.xml.in b/gtksourceview/src/default.xml.in
new file mode 100644
index 00000000..e6cad5c5
--- /dev/null
+++ b/gtksourceview/src/default.xml.in
@@ -0,0 +1,146 @@
+
+
+ <_description>A GtkSourceView style to match @FlavourThemeName@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gtksourceview/src/meson.build b/gtksourceview/src/meson.build
new file mode 100644
index 00000000..377945a2
--- /dev/null
+++ b/gtksourceview/src/meson.build
@@ -0,0 +1,16 @@
+foreach flavour: flavours
+ suffix = flavour == 'default' ? '' : '-@0@'.format(flavour)
+ theme_name = meson.project_name() + suffix
+ theme_file = configure_file(input: flavour + '.xml.in',
+ output: theme_name + '.xml',
+ configuration: {
+ 'ThemeName': meson.project_name(),
+ 'FlavourThemeName': theme_name,
+ })
+
+ foreach version: ['2.0', '3.0', '4']
+ gtksourceview_dir = 'gtksourceview-' + version
+ style_dir = join_paths(get_option('datadir'), gtksourceview_dir, 'styles')
+ install_data(theme_file, install_dir: style_dir)
+ endforeach
+endforeach
diff --git a/meson.build b/meson.build
new file mode 100644
index 00000000..5740140b
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,41 @@
+project('Sucharu',
+ version: '1.9.8',
+ meson_version: '>= 0.59',
+ license : ['GPL3', 'CC BY-SA 4.0'],
+ default_options: ['prefix=/usr'])
+
+fs = import('fs')
+gnome = import('gnome')
+
+python = find_program('python3')
+sassc = find_program('sassc')
+
+subdir('common')
+
+components = [
+ #'metacity',
+ 'gnome-shell',
+ #'gtk',
+ #'icons',
+ 'gtksourceview',
+ #'sounds',
+ #'sessions',
+ #'ubuntu-unity',
+ #'xfwm4',
+ #'cinnamon-shell',
+]
+
+enabled_accent_colors = get_option('accent-colors')
+
+foreach component: components
+ if not get_option(component)
+ message('skip component ' + component)
+ continue
+ endif
+
+ message('build component ' + component)
+ subdir(component)
+
+endforeach
+
+run_command('make')
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 00000000..96088821
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,38 @@
+#option('icons', type: 'boolean', value: true, description:'build icons component')
+option('gnome-shell', type: 'boolean', value: true, description:'build gnome-shell component')
+option('gnome-shell-default-variant', type: 'string', value: 'light', description:'default variant to be used gnome-shell')
+option('gnome-shell-gresource', type: 'boolean', value: false, description: 'build gnome-shell component in gresources')
+option('gnome-shell-user-themes-support', type: 'feature', value: 'auto', description: 'install gnome-shell uncompressed CSS themes as User Themes expects')
+option('gdm-default-variant', type: 'string', value: 'dark', description:'default variant to be used in GDM')
+#option('gtk', type: 'boolean', value: true, description:'build gtk component')
+option('gtksourceview', type: 'boolean', value: true, description:'build gtksourceview component')
+#option('metacity', type: 'boolean', value: true, description:'build metacity component')
+option('sounds', type: 'boolean', value: true, description:'build sounds component')
+#option('sessions', type: 'boolean', value: true, description:'build sessions component')
+#option('cinnamon-shell', type: 'boolean', value: false, description:'build cinnamon component')
+
+option('default', type: 'boolean', value: true, description:'build Sucharu default flavour')
+option('dark', type: 'boolean', value: true, description:'build Sucharu dark flavour')
+#option('mate', type: 'boolean', value: false, description:'build Sucharu mate flavour')
+#option('mate-dark', type: 'boolean', value: false, description:'build Sucharu mate-dark flavour')
+#option('ubuntu-unity', type: 'boolean', value: false, description:'build Sucharu with Unity assets')
+#option('xfwm4', type: 'boolean', value: false, description:'build Sucharu with xfwm4 assets')
+#option('cinnamon', type: 'boolean', value: false, description:'build Sucharu with Cinnamon flavour')
+#option('cinnamon-dark', type: 'boolean', value: false, description:'build Sucharu with Cinnamon dark flavour')
+
+# We use the dark flat above to do the dark variants of them
+option('accent-colors',
+ type: 'array',
+ choices: [
+ 'aqua',
+ 'blue',
+ 'brown',
+ 'grey',
+ 'orange',
+ 'pink',
+ 'purple',
+ 'red',
+ 'sand',
+ 'teal',
+ ],
+)