diff --git a/gnome-shell/46/README.md b/gnome-shell/46/README.md
new file mode 100644
index 0000000..192dc65
--- /dev/null
+++ b/gnome-shell/46/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
+
+Adwaita 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/46/calendar-today-light.svg b/gnome-shell/46/calendar-today-light.svg
new file mode 100644
index 0000000..b63f6e0
--- /dev/null
+++ b/gnome-shell/46/calendar-today-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/46/calendar-today.svg b/gnome-shell/46/calendar-today.svg
new file mode 100644
index 0000000..daf86ec
--- /dev/null
+++ b/gnome-shell/46/calendar-today.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/46/checkbox-focused.svg b/gnome-shell/46/checkbox-focused.svg
new file mode 100644
index 0000000..01eb733
--- /dev/null
+++ b/gnome-shell/46/checkbox-focused.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/46/checkbox-off-focused-light.svg b/gnome-shell/46/checkbox-off-focused-light.svg
new file mode 100644
index 0000000..4767377
--- /dev/null
+++ b/gnome-shell/46/checkbox-off-focused-light.svg
@@ -0,0 +1,220 @@
+
+
+
+
diff --git a/gnome-shell/46/checkbox-off-focused.svg b/gnome-shell/46/checkbox-off-focused.svg
new file mode 100644
index 0000000..d5a042e
--- /dev/null
+++ b/gnome-shell/46/checkbox-off-focused.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/46/checkbox-off-light.svg b/gnome-shell/46/checkbox-off-light.svg
new file mode 100644
index 0000000..5d37c85
--- /dev/null
+++ b/gnome-shell/46/checkbox-off-light.svg
@@ -0,0 +1,211 @@
+
+
+
+
diff --git a/gnome-shell/46/checkbox-off.svg b/gnome-shell/46/checkbox-off.svg
new file mode 100644
index 0000000..50eece1
--- /dev/null
+++ b/gnome-shell/46/checkbox-off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/46/checkbox.svg b/gnome-shell/46/checkbox.svg
new file mode 100644
index 0000000..da385b6
--- /dev/null
+++ b/gnome-shell/46/checkbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/46/dash-placeholder.svg b/gnome-shell/46/dash-placeholder.svg
new file mode 100644
index 0000000..cbae148
--- /dev/null
+++ b/gnome-shell/46/dash-placeholder.svg
@@ -0,0 +1,84 @@
+
+
+
+
diff --git a/gnome-shell/46/gnome-shell-dark.scss b/gnome-shell/46/gnome-shell-dark.scss
new file mode 100644
index 0000000..c1a330b
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-dark.scss
@@ -0,0 +1,7 @@
+$variant: 'dark';
+$contrast: 'normal';
+
+@import "gnome-shell-sass/_colors"; //use gtk colors
+@import "gnome-shell-sass/_drawing";
+@import "gnome-shell-sass/_common";
+@import "gnome-shell-sass/_widgets";
diff --git a/gnome-shell/46/gnome-shell-high-contrast.scss b/gnome-shell/46/gnome-shell-high-contrast.scss
new file mode 100644
index 0000000..a4394dd
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-high-contrast.scss
@@ -0,0 +1,7 @@
+$variant: 'dark';
+$contrast: "high";
+
+@import "gnome-shell-sass/_high-contrast-colors"; //use gtk colors
+@import "gnome-shell-sass/_drawing";
+@import "gnome-shell-sass/_common";
+@import "gnome-shell-sass/_widgets";
diff --git a/gnome-shell/46/gnome-shell-light.scss b/gnome-shell/46/gnome-shell-light.scss
new file mode 100644
index 0000000..22b8347
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-light.scss
@@ -0,0 +1,7 @@
+$variant: 'light';
+$contrast: 'normal';
+
+@import "gnome-shell-sass/_colors"; //use gtk colors
+@import "gnome-shell-sass/_drawing";
+@import "gnome-shell-sass/_common";
+@import "gnome-shell-sass/_widgets";
diff --git a/gnome-shell/46/gnome-shell-sass/COPYING b/gnome-shell/46/gnome-shell-sass/COPYING
new file mode 100644
index 0000000..e55e5b8
--- /dev/null
+++ b/gnome-shell/46/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/46/gnome-shell-sass/NEWS b/gnome-shell/46/gnome-shell-sass/NEWS
new file mode 100644
index 0000000..e69de29
diff --git a/gnome-shell/46/gnome-shell-sass/README.md b/gnome-shell/46/gnome-shell-sass/README.md
new file mode 100644
index 0000000..443b4dc
--- /dev/null
+++ b/gnome-shell/46/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/HEAD/data/theme/gnome-shell-sass
+[sass-repo]: https://gitlab.gnome.org/GNOME/gnome-shell-sass
+[license]: COPYING
diff --git a/gnome-shell/46/gnome-shell-sass/_colors.scss b/gnome-shell/46/gnome-shell-sass/_colors.scss
new file mode 100644
index 0000000..ffd4e9f
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/_colors.scss
@@ -0,0 +1,69 @@
+//
+// Main color definitions
+//
+// When color definition differs for dark and light variant, it gets @if-ed depending on $variant
+
+@import '_palette.scss';
+@import '_default-colors.scss';
+
+
+// global colors
+$base_color: if($variant == 'light', $light_1, $_base_color_dark);
+$bg_color: if($variant == 'light', $_base_color_light, lighten($base_color, 5%));
+$fg_color: if($variant == 'light', $_base_color_dark, $light_1);
+
+// OSD elements
+$osd_fg_color: $light_1;
+$osd_bg_color: lighten($_base_color_dark, 5%);
+
+// system elements (e.g. the overview) that are always dark
+$system_base_color: $_base_color_dark;
+$system_fg_color: $_base_color_light;
+
+// panel colors
+$panel_bg_color: if($variant == 'light', $_base_color_light, $dark_5);
+$panel_fg_color: if($variant == 'light', $_base_color_dark, $light_1);
+
+// card elements
+$card_bg_color: if($variant == 'light', $light_1, lighten($bg_color, 7%));
+$card_shadow_color: if($variant == 'light', transparentize($dark_5, .97), transparent);
+$card_shadow_border_color: if($variant == 'light', transparentize($dark_5, .91), transparent);
+
+//
+// Derived Colors
+//
+// colors based on the global defines above
+
+// borders
+$borders_color: transparentize($fg_color, $border_opacity);
+$outer_borders_color: if($variant == 'light', darken($bg_color, 7%), lighten($bg_color, 5%));
+
+// osd colors
+$osd_borders_color: transparentize($osd_fg_color, 0.9);
+$osd_outer_borders_color: transparentize($osd_fg_color, 0.98);
+
+// system colors
+$system_bg_color: lighten($system_base_color, 5%);
+$system_borders_color: transparentize($system_fg_color, .9);
+$system_insensitive_fg_color: mix($system_fg_color, $system_bg_color, 50%);
+$system_overlay_bg_color: mix($system_base_color, $system_fg_color, 90%); // for non-transparent items, e.g. dash
+
+// insensitive state
+$insensitive_fg_color: if($variant == 'light', mix($fg_color, $bg_color, 60%), mix($fg_color, $bg_color, 50%));
+$insensitive_bg_color: mix($bg_color, $base_color, 60%);
+$insensitive_borders_color: mix($borders_color, $base_color, 60%);
+
+// checked state
+$checked_bg_color: if($variant=='light', darken($bg_color, 7%), lighten($bg_color, 7%));
+$checked_fg_color: if($variant=='light', darken($fg_color, 7%), lighten($fg_color, 7%));
+
+// hover state
+$hover_bg_color: if($variant=='light', darken($bg_color,9%), lighten($bg_color, 10%));
+$hover_fg_color: if($variant=='light', darken($fg_color,9%), lighten($fg_color, 10%));
+
+// active state
+$active_bg_color: if($variant=='light', darken($bg_color, 11%), lighten($bg_color, 12%));
+$active_fg_color: if($variant=='light', darken($fg_color, 11%), lighten($fg_color, 12%));
+
+// selection colors
+$selected_borders_color: if($variant== 'light', darken($selected_bg_color, 15%), lighten($selected_bg_color, 15%));
\ No newline at end of file
diff --git a/gnome-shell/46/gnome-shell-sass/_common.scss b/gnome-shell/46/gnome-shell-sass/_common.scss
new file mode 100644
index 0000000..adb8b70
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/_common.scss
@@ -0,0 +1,391 @@
+//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 */
+
+// Base values of elements of the shell in their smallest "unit".
+// These are used in calculations elsewhere to have elements in proportion
+$base_font_size: 11pt; // font size
+$base_padding: 6px; // internal padding of elements
+$base_margin: 4px; // margin between elements
+$base_border_radius: 8px; // radii on all elements
+
+// Radius used to make sure elements that have rounded corners stay as such.
+// This is a workaround for 50% not working.
+$forced_circular_radius: 999px;
+
+// radii of things that display over other things, e.g. popovers
+$modal_radius: $base_border_radius * 2;
+
+// Chroma key to flag when a background-color is always occluded, not visible.
+// This allows any box-shadow behind it to be rendered more efficiently by
+// omitting the middle rectangle.
+$invisible_occluded_bg_color: rgba(3,2,1,0);
+
+// Fixed icon sizes
+$base_icon_size: 16px;
+$medium_icon_size: $base_icon_size * 1.5; // 24px
+$large_icon_size: $base_icon_size * 2; // 32px
+
+// Scaled values
+// Used in elements that follow text scaling factors
+$scaled_padding: to_em(6px); // same as $base_padding
+
+// Used for symbolic icons that scale
+$scalable_icon_size: to_em(16px);
+$medium_scalable_icon_size: $scalable_icon_size * 1.5;
+$large_scalable_icon_size: $scalable_icon_size * 2;
+
+// animation definition
+$ease_out_quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);
+
+// Stage
+stage {
+ @include fontsize($base_font_size);
+ color: $fg_color;
+}
+
+/* Common Stylings */
+%reset {
+ background: none;
+ box-shadow: none;
+ border: none;
+ border-radius: 0;
+ padding: 0;
+ margin: 0;
+}
+
+// icon tiles
+%tile {
+ border-radius: $base_border_radius * 2;
+ padding: $base_padding;
+ spacing: $base_padding;
+ text-align: center;
+ transition-duration: 100ms;
+}
+
+// common button styling
+%button_common {
+ border-radius: $base_border_radius;
+ padding: $base_padding * .5 $base_padding * 4;
+ font-weight: bold;
+ transition: border-width 300ms $ease_out_quad,
+ box-shadow 300ms $ease_out_quad;
+}
+
+%button {
+ @extend %button_common;
+ @include button(normal);
+ &:focus { @include button(focus);}
+ &:hover { @include button(hover);}
+ &:insensitive { @include button(insensitive);}
+ &:selected,
+ &:active { @include button(active);}
+ &:checked { @include button(checked);}
+}
+
+%flat_button {
+ @include button(normal, $style: flat);
+ &:focus { @include button(focus, $style: flat);}
+ &:hover { @include button(hover, $style: flat);}
+ &:insensitive { @include button(insensitive, $style: flat);}
+ &:selected,
+ &:active { @include button(active, $style: flat);}
+ &:checked { @include button(checked, $style: flat);}
+}
+
+%default_button {
+ @include button(normal, $c:$selected_bg_color, $tc:$selected_fg_color, $style: default);
+ &:focus { @include button(focus, $c:$selected_bg_color, $tc:$selected_fg_color, $style: default);}
+ &:hover { @include button(hover, $c:$selected_bg_color, $tc:$selected_fg_color, $style: default);}
+ &:insensitive { @include button(insensitive, $c:$selected_bg_color, $tc:$selected_fg_color, $style: default);}
+ &:active { @include button(active, $c:$selected_bg_color, $tc:$selected_fg_color, $style: default);}
+}
+
+// items in popover menus
+%menuitem {
+ font-weight: normal;
+ spacing: $base_padding;
+ transition-duration: 100ms;
+ padding: $base_padding * 1.5 $base_padding * 2;
+}
+
+// common style for card elements
+%card_common {
+ border-radius: $base_border_radius * 1.5;
+ padding: $scaled_padding * 2;
+ margin: $base_margin;
+ background-color: $card_bg_color;
+ box-shadow: 0 1px 2px 0 $card_shadow_color;
+ // bit of a hack here with border since we can't have double box-shadow
+ border: 1px solid $card_shadow_border_color;
+
+ @if $contrast == 'high' {
+ border-color: transparent;
+ box-shadow: none;
+ }
+}
+
+%card {
+ @extend %card_common;
+ @include button(normal, $style: card);
+ &:hover { @include button(hover, $style: card);}
+ &:active { @include button(active, $style: card);}
+ &:focus { @include button(focus, $style: card);}
+ &:insensitive { @include button(insensitive, $style: card);}
+}
+
+%card_flat {
+ @extend %card_common;
+ border: 1px solid transparent !important; // override of the button style needed here
+ @include button(undecorated, $style: flat);
+ &:hover { @include button(hover, $style: flat);}
+ &:active { @include button(active, $style: flat);}
+ &:focus { @include button(focus, $style: card);}
+ &:insensitive { @include button(insensitive, $style: card);}
+}
+
+
+// normal entry style
+%entry_common {
+ border-radius: $base_border_radius;
+ padding: $base_padding * 1.5 $base_padding * 1.5;
+ selection-background-color: $selected_bg_color;
+ selected-color: $selected_fg_color;
+}
+
+%entry {
+ @extend %entry_common;
+ @include entry(normal);
+ &:hover { @include entry(hover);}
+ &:focus { @include entry(focus);}
+ &:insensitive { @include entry(insensitive);}
+
+ StLabel.hint-text {
+ color: transparentize($fg_color, 0.3);
+ }
+}
+
+// buttons in dialogs/notifications
+// lighter in color and have a greater radius
+%bubble_button {
+ padding: $base_padding * 2;
+ font-weight: bold !important;
+
+ &:ltr {margin-right: 1px;}
+ &:rtl {margin-left: 1px;}
+
+ // needs a 1px adjustment to fit exactly into the outer radius
+ $bubble_button_radius: $modal_radius - 1px;
+
+ @include button(normal, $style: bubble);
+ &:focus { @include button(focus, $style: bubble);}
+ &:hover { @include button(hover, $style: bubble);}
+ &:active { @include button(active, $style: bubble);}
+ &:checked { @include button(checked, $style: bubble);}
+ &:insensitive { @include button(insensitive, $style: bubble);}
+
+ &:first-child:ltr {
+ border-radius: 0 0 0 $bubble_button_radius;
+ }
+
+ &:last-child:ltr {
+ border-radius: 0 0 $bubble_button_radius;
+ margin-right: 0 !important;
+ }
+
+ &:first-child:rtl {
+ border-radius: 0 0 $bubble_button_radius;
+ }
+
+ &:last-child:rtl {
+ border-radius: 0 0 0 $bubble_button_radius;
+ margin-left: 0 !important;
+ }
+
+ &:first-child:last-child {
+ border-radius: 0 0 $bubble_button_radius $bubble_button_radius;
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ }
+}
+
+// tooltip
+%tooltip {
+ background-color: transparentize(black, 0.1);
+ border: 1px solid transparentize($light_1, 0.9);
+ color: $light_1;
+
+ border-radius: $forced_circular_radius;
+ padding: $base_padding $base_padding * 2;
+ text-align: center;
+
+ @if $contrast == 'high' {
+ background-color: black;
+ border-color: $hc_inset_color;
+ }
+}
+
+/* General Typography */
+%large_title {
+ font-weight: 300;
+ @include fontsize(24pt);
+}
+
+%title_1 {
+ font-weight: 800;
+ @include fontsize(20pt);
+}
+
+%title_2 {
+ font-weight: 800;
+ @include fontsize(15pt);
+}
+
+%title_3 {
+ font-weight: 700;
+ @include fontsize(15pt);
+}
+
+%title_4 {
+ font-weight: 700;
+ @include fontsize(13pt);
+}
+
+%heading {
+ font-weight: 700;
+ @include fontsize(11pt);
+}
+
+%caption_heading {
+ font-weight: 700;
+ @include fontsize(9pt);
+}
+
+%caption {
+ font-weight: 400;
+ @include fontsize(9pt);
+}
+
+%smaller {
+ font-weight: 400;
+ @include fontsize(8pt);
+}
+
+%monospace {font-family: monospace;}
+%numeric { font-feature-settings: "tnum";}
+
+
+/* OSD Elements */
+%osd_panel {
+ color: $osd_fg_color;
+ background-color: $osd_bg_color;
+ border: 1px solid $osd_outer_borders_color;
+ border-radius: $forced_circular_radius;
+ padding: $base_padding * 2;
+ @if $contrast == 'high' {
+ @include draw_hc_inset($width: 2px,$border: true);
+ }
+}
+
+// entries
+%osd_entry {
+ @extend %entry_common;
+ @include entry(normal, $c:$osd_fg_color, $bc:$osd_bg_color, $always_dark: true);
+ &:hover { @include entry(hover, $c:$osd_fg_color, $bc:$osd_bg_color, $always_dark: true);}
+ &:focus { @include entry(focus, $c:$osd_fg_color, $bc:$osd_bg_color, $always_dark: true);}
+ &:insensitive { @include entry(insensitive, $c:$osd_fg_color, $bc:$osd_bg_color, $always_dark: true);}
+
+ StLabel.hint-text {color: transparentize($osd_fg_color, 0.3); }
+}
+
+// buttons on OSD elements
+%osd_button {
+ @extend %button_common;
+ @include button(normal, $tc:$osd_fg_color, $c:$osd_bg_color, $always_dark: true);
+ &:focus { @include button(focus, $tc:$osd_fg_color, $c:$osd_bg_color, $always_dark: true);}
+ &:hover { @include button(hover, $tc:$osd_fg_color, $c:$osd_bg_color, $always_dark: true);}
+ &:active { @include button(active, $tc:$osd_fg_color, $c:$osd_bg_color, $always_dark: true);}
+ &:checked { @include button(checked, $tc:$osd_fg_color, $c:$osd_bg_color, $always_dark: true);}
+ &:insensitive { @include button(insensitive, $tc:$osd_fg_color, $c:$osd_bg_color, $always_dark: true);}
+}
+
+%osd_button_flat {
+ @extend %button_common;
+ @include button(normal, $tc:$osd_fg_color, $c:$osd_bg_color, $style: flat, $always_dark: true);
+ &:focus { @include button(focus, $tc:$osd_fg_color, $c:$osd_bg_color, $style: flat, $always_dark: true);}
+ &:hover { @include button(hover, $tc:$osd_fg_color, $c:$osd_bg_color, $style: flat, $always_dark: true);}
+ &:active { @include button(active, $tc:$osd_fg_color, $c:$osd_bg_color, $style: flat, $always_dark: true);}
+ &:checked { @include button(checked, $tc:$osd_fg_color, $c:$osd_bg_color, $style: flat, $always_dark: true);}
+ &:insensitive { @include button(insensitive, $tc:$osd_fg_color, $c:$osd_bg_color, $style: flat, $always_dark: true);}
+}
+
+/* System Elements */
+
+// entries
+%system_entry {
+ @extend %entry_common;
+ @include entry(normal, $c:$system_fg_color, $bc:$system_bg_color, $always_dark: true);
+ &:hover { @include entry(hover, $c:$system_fg_color, $bc:$system_bg_color, $always_dark: true);}
+ &:focus { @include entry(focus, $c:$system_fg_color, $bc:$system_bg_color, $always_dark: true);}
+ &:insensitive { @include entry(insensitive, $c:$system_fg_color, $bc:$system_bg_color, $always_dark: true);}
+
+ StLabel.hint-text { color: transparentize($system_fg_color, 0.3);}
+}
+
+// buttons
+%system_button {
+ @include button(normal, $tc:$system_fg_color, $c:$system_bg_color);
+ &:insensitive { @include button(insensitive, $tc:$system_fg_color, $c:$system_bg_color);}
+ &:focus { @include button(focus, $tc:$system_fg_color, $c:$system_bg_color);}
+ &:hover { @include button(hover, $tc:$system_fg_color, $c:$system_bg_color);}
+ &:active { @include button(active, $tc:$system_fg_color, $c:$system_bg_color);}
+ &:checked { @include button(checked, $tc:$system_fg_color, $c:$system_bg_color);}
+}
+
+/* Lockscreen Elements */
+
+// buttons
+%lockscreen_button {
+ @extend %button_common;
+ @include button(normal, $tc:$system_fg_color, $style: lockscreen);
+ &:focus { @include button(focus, $tc:$system_fg_color, $style: lockscreen);}
+ &:hover { @include button(hover, $tc:$system_fg_color, $style: lockscreen);}
+ &:active { @include button(active, $tc:$system_fg_color, $style: lockscreen);}
+ &:checked { @include button(checked, $tc:$system_fg_color, $style: lockscreen);}
+ &:insensitive { @include button(insensitive, $tc:$system_fg_color, $style: lockscreen);}
+}
+
+// entries
+%lockscreen_entry {
+ @extend %entry_common;
+ @include entry(normal, $c:$system_fg_color, $style: lockscreen, $always_dark: true);
+ &:hover { @include entry(hover, $c:$system_fg_color, $style: lockscreen, $always_dark: true);}
+ &:focus { @include entry(focus, $c:$system_fg_color, $style: lockscreen, $always_dark: true);}
+ &:insensitive { @include entry(insensitive, $c:$system_fg_color, $style: lockscreen, $always_dark: true);}
+
+ StLabel.hint-text { color: transparentize($system_fg_color, 0.3);}
+}
+
diff --git a/gnome-shell/46/gnome-shell-sass/_default-colors.scss b/gnome-shell/46/gnome-shell-sass/_default-colors.scss
new file mode 100644
index 0000000..6c70087
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/_default-colors.scss
@@ -0,0 +1,54 @@
+// Named Colors
+
+// base colors
+$_base_color_dark: desaturate($dark_4, 100%);
+$_base_color_light: desaturate($light_2, 100%);
+
+// colors for destructive elements
+$destructive_bg_color: if($variant == 'light', $red_3, $red_4);
+$destructive_fg_color: $light_1;
+$destructive_color: $destructive_bg_color;
+
+// colors for levelbars, entries, labels and infobars
+$success_bg_color: if($variant == 'light', $green_4, $green_5);
+$success_fg_color: $light_1;
+$success_color: $success_bg_color;
+
+$warning_bg_color: if($variant == 'light', $yellow_4, $yellow_3);
+$warning_fg_color: transparentize(black, .2);
+$warning_color: $warning_bg_color;
+
+$error_bg_color: if($variant == 'light', $red_3, $red_4);
+$error_fg_color: $light_1;
+$error_color: $error_bg_color;
+
+// colors for selected or default elements
+$selected_bg_color: if($variant == 'light', $blue_4, $blue_3);
+$selected_fg_color: $light_1;
+
+// link colors
+$link_color: if($variant == 'light', $blue_4, $blue_2);
+$link_visited_color: transparentize($link_color, .6);
+
+// special cased widget definitions
+$background_mix_factor: if($variant == 'light', 12%, 9%); // used to boost the color of backgrounds in different variants
+$border_opacity: if($variant == 'light', .85, .9); // change the border opacity in different variants
+
+// shadows
+$shadow_color: if($variant == 'light', rgba(0,0,0,.05), rgba(0,0,0,0.2));
+$text_shadow_color: if($variant == 'light', rgba(255,255,255,0.3), rgba(0,0,0,0.2));
+
+// focus colors
+$focus_color: $selected_bg_color;
+$focus_border_color: transparentize($focus_color, 0.5);
+
+// High Contrast overrides
+@if $contrast == 'high' {
+ // increase border opacity
+ $border_opacity: .5;
+ // remove shadows
+ $shadow_color: transparent;
+ $text_shadow_color: transparent;
+ // less transparent focus color
+ $focus_border_color: transparentize($focus_color, 0.2);
+}
diff --git a/gnome-shell/46/gnome-shell-sass/_drawing.scss b/gnome-shell/46/gnome-shell-sass/_drawing.scss
new file mode 100644
index 0000000..5d56d4c
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/_drawing.scss
@@ -0,0 +1,466 @@
+//
+// Drawing functions
+//
+
+// Function to convert px values to em
+@function to_em($input, $base: 16px) {
+ // multiplied and divided by 1000 to make up for round() shortcoming
+ $em_value: ($input / $base) * 1.091 * 1000;
+ @return round($em_value) / 1000 * 1em;
+}
+
+// Boost the contrast of a color by mixing it with high contrast defined colors
+@function hc_color_mix($c, $mc:$hc_mix_color, $mf:$hc_mix_factor) {
+ //
+ // $c: input color
+ // $mc: mix color, defined in High Contrast specific stylesheet
+ // $mf: mix factor (%), defined in High Contrast specific stylesheet
+ //
+ @return mix($c, $mc, $mf);
+}
+
+// Function to mix the color and make the focus background
+@function focus_bg_color($bg, $fc:$focus_color) {
+ @return mix($fc, $bg, 5%);
+}
+
+//
+// Drawing mixins
+//
+
+// Draw the inset for High Contrast elements
+@mixin draw_hc_inset($width: 1px, $ic: $hc_inset_color, $border: false, $no_inset: false) {
+ //
+ // $width width of the inset, in pixels
+ // $ic color of the inset
+ //
+ // $border if true, use a border instead of a box-shadow to draw inset
+ // $no_inset if true, override the mixin to not draw an iset
+ //
+
+ box-shadow: inset 0 0 0 $width $ic;
+
+ // draw inset as border
+ @if $border {
+ border: $width solid $ic;
+ box-shadow: none;
+ }
+
+ // don't draw an inset at all
+ @if $no_inset {
+ box-shadow: none;
+ border: none;
+ }
+}
+
+// Draw the focus ring
+@mixin focus_ring($width: 2px, $fc: $focus_border_color, $border: false) {
+ box-shadow: inset 0 0 0 $width $fc !important;
+ @if $border {
+ border:$width solid $fc !important;
+ box-shadow: none;
+ }
+}
+
+// Mixin to convert provided font size in pt to em units
+@mixin fontsize($size, $base: 16px, $unit: pt) {
+ // if pt, convert into unitless value with the assumption: 1pt = 1.091px
+ $adjusted_size: if($unit == pt, $size * 1.091, $size) * 1000;
+ $rounded_size: round($adjusted_size / $base) / 1000;
+ font-size: $rounded_size * 1em;
+ // font-size: round($size) + pt;
+}
+
+// Function to fill the background of a panel button
+@mixin panel_button_fill($bg) {
+ // use a box-shadow to fill the background
+ // this is done because panel buttons use a transparent border to fake padding
+ box-shadow: inset 0 0 0 100px $bg;
+}
+
+// Text entries drawing function
+@mixin entry($type, $c:$fg_color, $bc:$bg_color, $style: null, $always_dark: false) {
+ //
+ // $type: entry type, possible values: normal, focus, hover, insensitive
+ // $c: text color
+ // $bc: background color
+ // $always_dark: override the light theme check to use dark colors, true or false
+ //
+
+ // entry colors
+ $entry_fg_color: $c;
+ $entry_bg_color: mix($c, $bc, $background_mix_factor);
+ $entry_focus_color: $focus_color;
+
+ // entry color overrides for lockscreen style
+ @if $style == 'lockscreen' {
+ $entry_bg_color: transparentize($c, .9);
+ $entry_focus_color: transparentize($entry_fg_color, 0.6);
+ @if $contrast == 'high' {
+ $entry_focus_color: transparentize($entry_fg_color, 0.3);
+ }
+ }
+
+ // background color adjustment factors
+ // the % a color is lightened or darkened for button states
+ $hover_factor: 4%;
+ $insensitive_factor: 3%;
+
+ // entry state background colors
+ $hover_entry_bg_color: if($variant == 'light', darken($entry_bg_color, $hover_factor), lighten($entry_bg_color, $hover_factor));
+ $insensitive_entry_bg_color: if($variant == 'light', lighten($entry_bg_color, $insensitive_factor), darken($entry_bg_color, $insensitive_factor));
+
+ // override entry background colours if element is always dark
+ @if $always_dark {
+ $hover_entry_bg_color: lighten($entry_bg_color, $hover_factor);
+ $insensitive_entry_bg_color: darken($entry_bg_color, $insensitive_factor);
+ }
+
+ @if $contrast == 'high' {
+ @include draw_hc_inset();
+ }
+
+ // normal
+ @if $type == 'normal' {
+ background-color: $entry_bg_color;
+ color: transparentize($c, 0.3);
+ }
+
+ // focus styles
+ @if $type == 'focus' {
+ @include focus_ring();
+ background-color: focus_bg_color($entry_bg_color);
+ color: $entry_fg_color;
+
+ // lockscreen style
+ @if $style == 'lockscreen' {
+ @include focus_ring($fc:$entry_focus_color);
+ background-color: focus_bg_color($entry_bg_color, $fc:$entry_focus_color);
+ }
+ }
+
+ // hover styles
+ @if $type == 'hover' {
+ background-color: $hover_entry_bg_color;
+ color: $entry_fg_color;
+ }
+
+ // insensitive styles
+ @if $type == 'insensitive' {
+ background-color: $insensitive_entry_bg_color;
+ color: transparentize($entry_fg_color, 0.5);
+ }
+}
+
+
+// Button drawing function
+@mixin button($type, $tc:$fg_color, $c:$bg_color, $style: null, $always_dark: false) {
+ //
+ // $type: button type, possible values:
+ // - normal, focus, hover, active, checked, insensitive, default, undecorated
+ // $c: button bg color, derived from bg_color
+ // $tc: button text color, derived from fg_color
+ // $style: button style, possible values: card, bubble, flat, default
+ // $always_dark: override the light theme check to use dark colors, true or false
+ //
+
+ // mix input colors to get button background color
+ $button_bg_color: mix($tc, $c, $background_mix_factor);
+
+ // background color override for card elements
+ @if $style == 'card' { $button_bg_color: $card_bg_color;}
+ // background color mix override for flat style; the button bg color is the background color input
+ @if $style == 'flat' { $button_bg_color: $c;}
+ // background color mix override for default button style
+ @if $style == 'default' { $button_bg_color: $c;}
+
+ // background color adjustment factors
+ // the % a color is lightened or darkened for button states
+ $hover_factor: 4%;
+ $active_factor: 9%;
+ $checked_factor: 8%;
+ $insensitive_factor: 3%;
+
+ // flat style overrides
+ @if $style == 'flat' {
+ $hover_factor: 7%; // stronger factor in flat style
+ }
+
+ // button base state background colors
+ $hover_button_bg_color: if($variant == 'light', darken($button_bg_color, $hover_factor), lighten($button_bg_color, $hover_factor));
+ $active_button_bg_color: if($variant == 'light', darken($button_bg_color, $active_factor), lighten($button_bg_color, $active_factor));
+ $checked_button_bg_color: if($variant == 'light', darken($button_bg_color, $checked_factor), lighten($button_bg_color, $checked_factor));
+ $insensitive_button_bg_color: if($variant == 'light', lighten($button_bg_color, $insensitive_factor), darken($button_bg_color, $insensitive_factor));
+
+ // button extended state background colors
+ $active_hover_button_bg_color: if($variant == 'light', darken($active_button_bg_color, $hover_factor), lighten($active_button_bg_color, $hover_factor));
+ $checked_hover_button_bg_color: if($variant == 'light', darken($checked_button_bg_color, $hover_factor), lighten($checked_button_bg_color, $hover_factor));
+ $checked_active_button_bg_color: if($variant == 'light', darken($checked_button_bg_color, $active_factor), lighten($checked_button_bg_color, $active_factor));
+
+ // override button background colours if element is always dark
+ @if $always_dark {
+ $hover_button_bg_color: lighten($button_bg_color, $hover_factor);
+ $active_button_bg_color: lighten($button_bg_color, $active_factor);
+ $checked_button_bg_color: lighten($button_bg_color, $checked_factor);
+ $insensitive_button_bg_color: darken($button_bg_color, $insensitive_factor);
+ // extended
+ $active_hover_button_bg_color: lighten($active_button_bg_color, $hover_factor);
+ $checked_hover_button_bg_color: lighten($checked_button_bg_color, $hover_factor);
+ $checked_active_button_bg_color: lighten($checked_button_bg_color, $active_factor);
+ }
+
+ // background color override for buttons that use transparency
+ // styles: notification bubbles, lockscreen
+ @if $style == 'bubble' or $style == 'lockscreen' {
+ $button_bg_color: transparentize($tc, .9);
+ $hover_button_bg_color: transparentize($tc, .87);
+ $active_button_bg_color: transparentize($tc, .84);
+ $active_hover_button_bg_color: transparentize($tc, .81);
+ }
+
+ // flat style overrides
+ @if $style == 'flat' {
+ $insensitive_button_bg_color: $button_bg_color;
+ }
+
+ // high contrast overrides
+ @if $contrast == 'high' {
+ // override button background colors for high contrast
+ $button_bg_color: hc_color_mix($button_bg_color);
+ $hover_button_bg_color: hc_color_mix($hover_button_bg_color);
+ $active_button_bg_color: hc_color_mix($active_button_bg_color);
+ $checked_button_bg_color: hc_color_mix($checked_button_bg_color);
+
+ // also draw the inset border
+ @include draw_hc_inset();
+
+ // duplicate flat bg color for High Contrast
+ @if $style == 'flat' {
+ $button_bg_color: $c;
+ }
+
+ @if $style == 'default' {
+ @include draw_hc_inset($no_inset: true);
+ }
+ }
+
+ // normal style
+ @if $type == 'normal' {
+ color: $tc;
+ background-color: $button_bg_color;
+
+ // no inset in High Contrast when the style is flat
+ @if $style == 'flat' and $contrast == 'high' {
+ @include draw_hc_inset($no_inset: true);
+ }
+ }
+
+ // hover button
+ @else if $type == 'hover' {
+ color: $tc;
+ background-color: $hover_button_bg_color;
+ }
+
+ // active button
+ @else if $type == 'active' {
+ color: $tc;
+ background-color: $active_button_bg_color;
+ &:hover { background-color: $active_hover_button_bg_color;}
+ &:focus {
+ // otherwise use focus bg color mixin
+ $bg: focus_bg_color($active_button_bg_color);
+ background-color: $bg;
+ }
+ }
+
+ // checked button
+ @else if $type == 'checked' {
+ color: $tc;
+ background-color: $checked_button_bg_color;
+ &:hover { background-color: $checked_hover_button_bg_color;}
+ &:active { background-color: $checked_active_button_bg_color;}
+ }
+
+ // insensitive button
+ @else if $type == 'insensitive' {
+ $insensitive_button_fg_color: if($variant == 'light', transparentize($tc, .6), transparentize($tc, .5));
+ color: $insensitive_button_fg_color;
+ background-color: $insensitive_button_bg_color;
+
+ // no outline in High Contrast for insensitive buttons
+ @if $contrast == 'high' {
+ @include draw_hc_inset($no_inset: true);
+ }
+ }
+
+ // focused button
+ @else if $type == 'focus' {
+ color: $tc;
+ @include focus_ring();
+
+ // use a different focus ring color for default style
+ @if $style == 'default' {
+ @include focus_ring($fc:$selected_borders_color);
+ }
+ // change background color if style is flat
+ @if $style == 'flat' {
+ $button_bg_color: transparentize($button_bg_color, 0.75);
+ }
+
+ background-color: focus_bg_color($button_bg_color);
+
+ &:hover {
+ background-color: focus_bg_color($hover_button_bg_color);
+ }
+ }
+
+ // reset (unstyled button)
+ @else if $type == 'undecorated' {
+ background-color: transparent;
+ border-color: transparent;
+ box-shadow: none;
+
+ &:insensitive {
+ background-color: transparent !important;
+ }
+ }
+}
+
+// Helper mixin for button-like elements with an icon
+@mixin tile_button($fg:$system_fg_color, $bg:$system_bg_color, $raised: false, $system: true) {
+ //
+ // $fg: foreground color
+ // $bg: background color
+ //
+ // $raised: uses raised style, true or false
+ // $system: uses system styles, true or false
+ //
+
+ @extend %tile;
+
+ @if $raised {
+ @include button(normal, $tc:$fg, $c:$bg, $always_dark: $system);
+ &:focus { @include button(focus, $tc:$fg, $c:$bg, $always_dark: $system);}
+ &:hover { @include button(hover, $tc:$fg, $c:$bg, $always_dark: $system);}
+ &:active { @include button(active, $tc:$fg, $c:$bg, $always_dark: $system);}
+ &:highlighted,&:selected,
+ &:checked { @include button(checked, $tc:$fg, $c:$bg, $always_dark: $system);}
+ &:insensitive { @include button(insensitive, $tc:$fg, $c:$bg, $always_dark: $system);}
+ } @else {
+ @include button(normal, $tc:$fg, $c:$bg, $style: flat, $always_dark: $system);
+ &:focus { @include button(focus, $tc:$fg, $c:$bg, $style: flat, $always_dark: $system);}
+ &:hover { @include button(hover, $tc:$fg, $c:$bg, $style: flat, $always_dark: $system);}
+ &:active { @include button(active, $tc:$fg, $c:$bg, $style: flat, $always_dark: $system);}
+ &:highlighted,&:selected,
+ &:checked { @include button(checked, $tc:$fg, $c:$bg, $style: flat, $always_dark: $system);}
+ &:insensitive { @include button(insensitive, $tc:$fg, $c:$bg, $style: flat, $always_dark: $system);}
+ }
+
+ &:drop {
+ background-color: transparentize($selected_bg_color, .8);
+ box-shadow: inset 0 0 0 2px transparentize($selected_bg_color, .2);
+ }
+}
+
+// styling for all menuitems in popovers
+@mixin menuitem($bg, $style: flat) {
+
+ // extend common styles
+ @extend %menuitem;
+
+ // lighten the background color always
+ $bg: lighten($bg,5%);
+
+ @if $style == 'flat' {
+ @include button(undecorated);
+ } @else {
+ @include button(normal, $c:$bg);
+ }
+ &:focus,
+ &:hover {
+ @include button(hover, $c:$bg);
+ }
+ &:active {@include button(active, $c:$bg);}
+ &:checked {@include button(checked, $c:$bg);}
+ &:insensitive {@include button(insensitive, $c:$bg);}
+}
+
+// Panel menu/button drawing function
+@mixin panel_button($bg:$panel_fg_color, $fg:$panel_fg_color, $style: null, $highlighted_child: false, $child_class:"") {
+ //
+ // $bg: background color, derived from $panel_fg_color
+ // $fg: foreground color, also derived from $panel_fg_color
+ // $style: can be set to 'filled' if button uses a colored background
+ //
+ // $highlighted_child: if true, applies some special overrides for to a
+ // child element, see _panel.scss for details
+ // $child_class: class name of the child element
+ //
+
+ transition-duration: 150ms;
+ border: 3px solid transparent;
+ background-color: transparent;
+ border-radius: $forced_circular_radius;
+
+ font-weight: bold;
+ color: $fg;
+
+ // background fill defines
+ $fill: transparent;
+ $hover_fill: transparentize($fg, .83);
+ $active_fill: transparentize($fg, .72);
+ $active_hover_fill: transparentize($fg, .68);
+
+ @if $style == 'filled' {
+ $fill: $bg;
+ $hover_fill: if($variant == 'light', darken($bg, 5%), lighten($bg, 5%));
+ $active_fill: if($variant == 'light', darken($bg, 9%), lighten($bg, 9%));
+ $active_hover_fill: if($variant == 'light', darken($bg, 11%), lighten($bg, 11%));
+ }
+
+ @include panel_button_fill($fill);
+
+ &:focus, &:hover {
+ @include panel_button_fill($hover_fill);
+ }
+
+ &:active, &:checked {
+ @include panel_button_fill($active_fill);
+
+ &:hover{
+ @include panel_button_fill($active_hover_fill);
+ }
+ }
+
+ // some overrides to style a child element
+ @if $highlighted_child {
+
+ // remove the common styles from the parent
+ background: none !important;
+ box-shadow: none !important;
+ border: none !important;
+
+ // add them to the child
+ #{$child_class} {
+ transition-duration: 150ms;
+ border: 3px solid transparent;
+ border-radius: $forced_circular_radius;
+ }
+
+ &:focus, &:hover {
+ #{$child_class} {
+ @include panel_button_fill($hover_fill);
+ }
+ }
+
+ &:active, &:checked {
+ #{$child_class} {
+ @include panel_button_fill($active_fill);
+
+ &:hover {
+ @include panel_button_fill($active_hover_fill);
+ }
+ }
+ }
+ }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/_high-contrast-colors.scss b/gnome-shell/46/gnome-shell-sass/_high-contrast-colors.scss
new file mode 100644
index 0000000..3cc447c
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/_high-contrast-colors.scss
@@ -0,0 +1,81 @@
+//
+// High Contrast theme definitions
+//
+// this is an always dark theme, so no 'light' theme conditions
+
+@import '_palette.scss';
+@import '_default-colors.scss';
+
+// global colors
+$base_color: $dark_5;
+$bg_color: lighten($base_color, 10%);
+$fg_color: $light_1;
+
+// OSD elements
+$osd_fg_color: $light_1;
+$osd_bg_color: $base_color;
+
+// system elements
+$system_base_color: $dark_5;
+$system_fg_color: $light_1;
+
+// panel colors
+$panel_bg_color: $dark_5;
+$panel_fg_color: $light_1;
+
+// card elements
+$card_bg_color: $bg_color;
+$card_shadow_color: transparent;
+$card_shadow_border_color: $card_bg_color;
+
+//
+// Derived Colors
+//
+// colors based on the global defines above
+
+// borders
+$borders_color: transparentize($fg_color, $border_opacity);
+$outer_borders_color: $borders_color;
+
+// osd colors
+$osd_borders_color: transparentize($osd_fg_color, 0.8);
+$osd_outer_borders_color: $osd_borders_color;
+
+// system colors
+$system_bg_color: lighten($system_base_color, 5%);
+$system_borders_color: transparentize($system_fg_color, .9);
+$system_insensitive_fg_color: mix($system_fg_color, $system_bg_color, 50%);
+$system_overlay_bg_color: mix($system_bg_color, $system_fg_color, 90%);
+
+// insensitive state
+$insensitive_fg_color: $fg_color;
+$insensitive_bg_color: mix($bg_color, $base_color, 60%);
+$insensitive_borders_color: $borders_color;
+
+// checked state
+$checked_bg_color: lighten($bg_color, 18%);
+$checked_fg_color: lighten($fg_color, 18%);
+
+// hover state
+$hover_bg_color: lighten($bg_color, 20%);
+$hover_fg_color: lighten($fg_color, 20%);
+
+// active state
+$active_bg_color: lighten($bg_color, 22%);
+$active_fg_color: lighten($fg_color, 22%);
+
+// selection colors
+$selected_borders_color: lighten($selected_bg_color, 30%);
+
+//
+// High Contrast specific definitions
+//
+
+// color for outline drawn onto all elements (may be a border or a box-shadow)
+$hc_inset_color: transparentize($fg_color, 0.6);
+
+// color used in a mixin in _drawing to boost a color's contrast
+$hc_mix_color: $light_1;
+
+// the mix factor used to boost contrast of a color in the above mixin
+$hc_mix_factor: 87%;
diff --git a/gnome-shell/46/gnome-shell-sass/_palette.scss b/gnome-shell/46/gnome-shell-sass/_palette.scss
new file mode 100644
index 0000000..78847d9
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/_palette.scss
@@ -0,0 +1,46 @@
+//GNOME Color Palette
+$blue_1: #99c1f1;
+$blue_2: #62a0ea;
+$blue_3: #3584e4;
+$blue_4: #1c71d8;
+$blue_5: #1a5fb4;
+$green_1: #8ff0a4;
+$green_2: #57e389;
+$green_3: #33d17a;
+$green_4: #2ec27e;
+$green_5: #26a269;
+$yellow_1: #f9f06b;
+$yellow_2: #f8e45c;
+$yellow_3: #f6d32d;
+$yellow_4: #f5c211;
+$yellow_5: #e5a50a;
+$orange_1: #ffbe6f;
+$orange_2: #ffa348;
+$orange_3: #ff7800;
+$orange_4: #e66100;
+$orange_5: #c64600;
+$red_1: #f66151;
+$red_2: #ed333b;
+$red_3: #e01b24;
+$red_4: #c01c28;
+$red_5: #a51d2d;
+$purple_1: #dc8add;
+$purple_2: #c061cb;
+$purple_3: #9141ac;
+$purple_4: #813d9c;
+$purple_5: #613583;
+$brown_1: #cdab8f;
+$brown_2: #b5835a;
+$brown_3: #986a44;
+$brown_4: #865e3c;
+$brown_5: #63452c;
+$light_1: #ffffff;
+$light_2: #f6f5f4;
+$light_3: #deddda;
+$light_4: #c0bfbc;
+$light_5: #9a9996;
+$dark_1: #77767b;
+$dark_2: #5e5c64;
+$dark_3: #3d3846;
+$dark_4: #241f31;
+$dark_5: #000000;
\ No newline at end of file
diff --git a/gnome-shell/46/gnome-shell-sass/_widgets.scss b/gnome-shell/46/gnome-shell-sass/_widgets.scss
new file mode 100644
index 0000000..9eac62d
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/_widgets.scss
@@ -0,0 +1,49 @@
+//
+// 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';
+// Dialogs
+@import 'widgets/dialogs';
+// OSDs
+@import 'widgets/osd';
+@import 'widgets/switcher-popup';
+@import 'widgets/workspace-switcher';
+@import 'widgets/screenshot';
+// Panel
+@import 'widgets/panel';
+@import 'widgets/corner-ripple';
+@import 'widgets/quick-settings';
+// 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 screen
+@import 'widgets/login-lock';
diff --git a/gnome-shell/46/gnome-shell-sass/gnome-shell-sass.doap b/gnome-shell/46/gnome-shell-sass/gnome-shell-sass.doap
new file mode 100644
index 0000000..f18ec1b
--- /dev/null
+++ b/gnome-shell/46/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/46/gnome-shell-sass/widgets/_a11y.scss b/gnome-shell/46/gnome-shell-sass/widgets/_a11y.scss
new file mode 100644
index 0000000..31b5c4b
--- /dev/null
+++ b/gnome-shell/46/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/46/gnome-shell-sass/widgets/_app-grid.scss b/gnome-shell/46/gnome-shell-sass/widgets/_app-grid.scss
new file mode 100644
index 0000000..fcada18
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_app-grid.scss
@@ -0,0 +1,190 @@
+/* App Grid */
+
+$app_icon_size: 96px;
+$app_folder_size: 720px;
+
+// app icons
+.icon-grid {
+ row-spacing: $base_padding * 2;
+ column-spacing: $base_padding * 2;
+ max-row-spacing: $base_padding * 6;
+ max-column-spacing: $base_padding * 6;
+ 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 */
+
+// items in the app grid and dash
+.overview-tile {
+ @include tile_button($bg:$system_base_color);
+
+ // override the %tile style
+ border-radius: $base_border_radius*3;
+ padding: $base_padding * 2;
+
+ // the icon itself
+ .overview-icon {
+ // item with a label
+ &.overview-icon-with-label {
+ > StBoxLayout {
+ spacing: $base_padding;
+ }
+ }
+ }
+}
+
+// app folders
+.app-folder {
+ @include tile_button($bg:$system_base_color, $raised: true);
+}
+
+// Running app indicator (also shown in dash)
+.app-grid-running-dot {
+ height: 5px;
+ width: 5px;
+ border-radius:5px;
+ background-color: $system_fg_color;
+
+ @if $contrast == 'high' {
+ margin-bottom: 4px;
+ } @else {
+ margin-bottom: 2px;
+ }
+}
+
+.app-folder-dialog-container {
+ // pad the top with panel height so the folder doesn't overlap the panel on smaller resolutions
+ padding-top: $panel_height;
+}
+
+// Expanded app folder dialog
+.app-folder-dialog {
+ width: $app_folder_size;
+ height: $app_folder_size;
+
+ border-radius: $modal_radius * 4;
+ background-color: $system_overlay_bg_color;
+ color: $system_fg_color;
+
+ @if $contrast == 'high' {
+ padding: 0 2px;
+ box-shadow: inset 0 0 0 2px $hc_inset_color;
+ } @else {
+ padding: 0 1px;
+ box-shadow: inset 0 0 0 1px $system_borders_color;
+ }
+
+ & .folder-name-container {
+ padding: $base_padding * 4 $base_padding * 6;
+ padding-bottom: 0;
+
+ & .folder-name-label,
+ & .folder-name-entry {
+ @extend %title_1;
+ }
+
+ & .folder-name-entry {
+ @extend %system_entry;
+ width: 12em;
+ }
+ }
+
+ & .icon-button {
+ @include button(normal, $tc:$system_fg_color, $c:$system_overlay_bg_color, $always_dark: true);
+ &:hover { @include button(hover, $tc:$system_fg_color, $c:$system_overlay_bg_color, $always_dark: true);}
+ &:active { @include button(active, $tc:$system_fg_color, $c:$system_overlay_bg_color, $always_dark: true);}
+ }
+
+ & .page-indicators {
+ margin-bottom: $base_padding * 4;
+ }
+
+ & .page-navigation-arrow {
+ @include button(normal, $tc:$system_fg_color, $c:$system_overlay_bg_color, $style: flat, $always_dark: true);
+ &:hover { @include button(hover, $tc:$system_fg_color, $c:$system_overlay_bg_color, $style: flat, $always_dark: true);}
+ &:active { @include button(active, $tc:$system_fg_color, $c:$system_overlay_bg_color, $style: flat, $always_dark: true);}
+ }
+
+ & .overview-tile {
+ @include tile_button($bg:$system_overlay_bg_color);
+ }
+}
+
+// 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_size: 10px;
+.page-indicator {
+ padding: $base_padding $base_padding * 2 0;
+ transition-duration:400ms;
+
+ .page-indicator-icon {
+ width: $page_indicator_size;
+ height: $page_indicator_size;
+ border-radius: $forced_circular_radius;
+ background-color: $system_fg_color;
+ transition-duration: 400ms;
+ }
+}
+
+.apps-scroll-view {
+ padding: 0;
+}
+
+// shutdown and other actions in the grid
+.system-action-icon {
+ background-color: transparentize($system_fg_color,.9);
+ color: $system_fg_color;
+ border-radius: $forced_circular_radius;
+ icon-size: $app_icon_size * 0.5;
+ @if $contrast == 'high' {
+ box-shadow: inset 0 0 0 2px $hc_inset_color;
+ }
+}
+
+// page navigation
+.page-navigation-hint {
+ &.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: $base_padding;
+ padding: $base_padding * 3;
+ width: $medium_icon_size;
+ height: $medium_icon_size;
+ border-radius: $forced_circular_radius;
+ transition-duration: 100ms;
+
+ > StIcon { color: $system_fg_color;}
+
+ @include button(normal, $tc:$system_fg_color, $c:$system_base_color, $style: flat, $always_dark: true);
+ &:hover { @include button(hover, $tc:$system_fg_color, $c:$system_base_color, $style: flat, $always_dark: true);}
+ &:active { @include button(active, $tc:$system_fg_color, $c:$system_base_color, $style: flat, $always_dark: true);}
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_base.scss b/gnome-shell/46/gnome-shell-sass/widgets/_base.scss
new file mode 100644
index 0000000..7d6f280
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_base.scss
@@ -0,0 +1,27 @@
+// 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.2);
+}
+
+// Dropshadow for large icons
+.icon-dropshadow {
+ icon-shadow: 0 2px 4px rgba(black, 0.4);
+
+ @if $contrast == 'high' {
+ icon-shadow: none;
+ background-color: $osd_bg_color;
+ padding: $base_padding * 2;
+ border-radius: $modal_radius;
+ border: 2px solid $hc_inset_color;
+ margin: $base_padding * 3;
+ }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_buttons.scss b/gnome-shell/46/gnome-shell-sass/widgets/_buttons.scss
new file mode 100644
index 0000000..60fa4d8
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_buttons.scss
@@ -0,0 +1,39 @@
+/* Buttons */
+
+.button {
+ @extend %button;
+ // uses scalable value since it's a text element
+ min-height: to_em(22px);
+
+ // default style
+ &.default {
+ @extend %default_button;
+ }
+ // flat style
+ &.flat {
+ @extend %flat_button;
+ }
+}
+
+.icon-button {
+ @extend %button;
+
+ border-radius: $forced_circular_radius; // is circular
+ padding: $scaled_padding * 2;
+ min-height: $scalable_icon_size;
+
+ StIcon {
+ icon-size: $scalable_icon_size;
+ -st-icon-style: symbolic;
+ }
+
+ // default style
+ &.default {
+ @extend %default_button;
+ }
+
+ // flat style
+ &.flat {
+ @extend %flat_button;
+ }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_calendar.scss b/gnome-shell/46/gnome-shell-sass/widgets/_calendar.scss
new file mode 100644
index 0000000..f34e591
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_calendar.scss
@@ -0,0 +1,287 @@
+/* Date/Time Menu */
+
+// overall menu
+#calendarArea {
+ padding: $base_margin;
+}
+
+.datemenu-popover {
+ border-radius: $base_border_radius * 1.5 + $base_padding * 3;
+}
+
+// calendar menu side column
+.datemenu-calendar-column {
+ spacing: $base_padding;
+ &:ltr { margin-left: $base_padding;}
+ &:rtl { margin-right: $base_padding;}
+ .datemenu-displays-box {
+ spacing: $base_padding;
+ }
+}
+
+// today button (the date)
+.datemenu-today-button {
+ @extend %card_flat;
+ padding: $base_padding * 1.5;
+
+ // weekday label
+ .day-label {
+ font-weight: bold;
+ }
+
+ // date label
+ .date-label {
+ @extend %title_2;
+ }
+}
+
+// the mini calendar
+.calendar {
+ @extend %card_flat;
+ margin-top: 0;
+ padding: 0;
+
+ // month header
+ .calendar-month-header {
+
+ // prev/next month icons
+ .calendar-change-month-back StIcon,
+ .calendar-change-month-forward StIcon {
+ icon-size: $scalable_icon_size;
+ }
+
+ // month label
+ .calendar-month-label {
+ @extend %heading;
+ @extend %flat_button;
+ color: $fg_color !important;
+ padding: 8px 0;
+ width: 10em;
+ border-radius: $forced_circular_radius;
+ text-align: center;
+ }
+
+ .pager-button {
+ @extend .icon-button, .flat;
+ height: 2.6em;
+ width: 2.6em;
+ padding: 0;
+ }
+ }
+
+ // day style
+ .calendar-day {
+ @extend %numeric;
+ @extend %smaller;
+ @extend %flat_button;
+ border-radius: $forced_circular_radius;
+ height: 3em;
+ width: 3em;
+ margin: 2px;
+ padding: 0;
+ font-weight: bold;
+ text-align: center;
+
+ &.calendar-weekday {}
+
+ &.calendar-weekend {
+ color: $insensitive_fg_color;
+ @if $contrast == 'high' {
+ font-style: italic;
+ }
+ }
+
+ &.calendar-other-month {
+ color: transparentize($fg_color, 0.5);
+ font-weight: normal;
+
+ &.calendar-weekend {
+ color: transparentize($fg_color, 0.5);
+ @if $contrast == 'high' {
+ color: $fg_color;
+ }
+ }
+
+ @if $contrast == 'high' {
+ color: $fg_color;
+ font-style: italic; // differentiate with a font-style instead of text color
+ }
+ }
+
+ &.calendar-today {
+ @extend %default_button;
+ // override colors above for when today is a weekend
+ color: $selected_fg_color !important;
+ &.calendar-day-with-events {
+ background-image: url("resource:///org/gnome/shell/theme/calendar-today.svg") !important; // always use light asset with .default style
+ }
+ }
+
+ &.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;
+ }
+ }
+
+ // day of week heading
+ .calendar-day-heading {
+ @extend %numeric;
+ @extend %smaller;
+ @extend %flat_button;
+ font-weight: bold;
+ text-align: center;
+ margin: $base_margin;
+ padding: $base_padding * 0.5 $base_padding;
+ border-radius: $base_border_radius;
+ }
+
+ // week number style
+ .calendar-week-number {
+ @extend %smaller;
+ font-weight: bold;
+ font-feature-settings: "tnum";
+ text-align: center;
+ margin: $base_padding;
+ padding: 0 $base_padding;
+ border-radius: $base_border_radius * 0.5;
+ background-color: transparentize($insensitive_fg_color, .8);
+ color: $insensitive_fg_color;
+ }
+}
+
+// common style for the date menu widgets
+.events-button,
+.world-clocks-button,
+.weather-button {
+ @extend %card;
+}
+
+// events
+.events-button {
+
+ .events-box {
+
+ // event title
+ .events-title {
+ @extend %heading;
+ color: $insensitive_fg_color;
+ padding-bottom: $base_padding;
+ }
+
+ // list of events
+ .events-list {
+ spacing: $base_padding;
+
+ // container for an event
+ .event-box {
+ spacing: $base_padding;
+ border-radius: $base_border_radius;
+
+ .event-summary {
+ @extend %heading;
+ }
+
+ .event-time {
+ @extend %numeric;
+ @extend %caption;
+ color: $insensitive_fg_color;
+ }
+ }
+
+ .event-placeholder {
+ color: $insensitive_fg_color;
+ font-style: italic;
+ }
+ }
+ }
+}
+
+// world clocks
+.world-clocks-button {
+
+ // title
+ .world-clocks-header {
+ @extend %heading;
+ color: $insensitive_fg_color;
+
+ // change style when no world clocks are configured
+ &.no-world-clocks {
+ color: $fg_color;
+ }
+ }
+
+ // clocks
+ .world-clocks-grid {
+ spacing-rows: $base_padding;
+ spacing-columns: $base_padding * 2;
+
+ // city label
+ .world-clocks-city {
+ }
+
+ // timezone time
+ .world-clocks-time {
+ @extend %numeric;
+ font-weight: bold;
+
+ &: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 {
+
+ .weather-box {
+ spacing: $base_padding;
+
+ // header
+ .weather-header-box {
+ spacing: $base_padding;
+
+ .weather-header {
+ @extend %heading;
+ color: $insensitive_fg_color;
+
+ // change style when no location is configured
+ &.no-location {
+ color: $fg_color;
+ }
+
+ &.location {
+ font-weight: normal;
+ }
+ }
+ }
+
+ // weather items
+ .weather-grid {
+ spacing-rows: $base_padding;
+ spacing-columns: $base_padding * 2;
+
+ .weather-forecast-time {
+ @extend %numeric;
+ @include fontsize(10pt);
+ padding-top: 0.2em;
+ padding-bottom: 0.4em;
+ }
+ .weather-forecast-icon {
+ icon-size: $large_scalable_icon_size;
+ margin-bottom: $base_margin;
+ }
+
+ .weather-forecast-temp {
+ @extend %numeric;
+ font-weight: bold;
+ }
+ }
+ }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_check-box.scss b/gnome-shell/46/gnome-shell-sass/widgets/_check-box.scss
new file mode 100644
index 0000000..1480ade
--- /dev/null
+++ b/gnome-shell/46/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: 24px;
+$check_width: 24px;
+
+
+.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: url("resource:///org/gnome/shell/theme/checkbox.svg"); }
+ &:focus:checked StBin { background-image: url("resource:///org/gnome/shell/theme/checkbox-focused.svg"); }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_corner-ripple.scss b/gnome-shell/46/gnome-shell-sass/widgets/_corner-ripple.scss
new file mode 100644
index 0000000..9aff431
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_corner-ripple.scss
@@ -0,0 +1,15 @@
+/* Activities Ripple */
+
+$ripple_size: 50px;
+
+.ripple-box {
+ background-color: rgba(255,255,255,0.2);
+ box-shadow: 0 0 2px 2px rgba(255,255,255,0.2);
+ // 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/46/gnome-shell-sass/widgets/_dash.scss b/gnome-shell/46/gnome-shell-sass/widgets/_dash.scss
new file mode 100644
index 0000000..db378ca
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_dash.scss
@@ -0,0 +1,100 @@
+/* Dash */
+
+// uses system colors
+$dash_background_color: $system_overlay_bg_color;
+
+$dash_placeholder_size: 32px;
+$dash_padding: $base_padding * 2;
+$dash_edge_offset: $base_margin * 3;
+$dash_border_radius: $modal_radius + $dash_padding;
+$dash_spacing: $base_margin * 0.5;
+
+// container for the dash
+#dash {
+ margin-top: $dash_edge_offset;
+
+ // background behind item container
+ .dash-background {
+ background-color: $dash_background_color;
+ border-radius: $dash_border_radius;
+ padding-top: $dash_padding;
+ padding-bottom: $dash_padding;
+ padding-left: $dash_padding - $dash_spacing; // subtract the margins added to .overview-tile below
+ padding-right: $dash_padding - $dash_spacing;
+
+ @if $contrast == 'high' {
+ @include draw_hc_inset($width: 2px);
+ }
+ }
+
+ // items on the dash
+ .dash-item-container {
+
+ .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;
+ }
+
+ // IMPORTANT: items on the dash need to extend to the edge to be adequate click targets
+ // as such the %tile style is overriden and button styles are applied to the child class .overview-icon
+ .show-apps,
+ .overview-tile {
+ // remove styles
+ @extend %reset;
+
+ margin: 0 $dash_spacing;
+ padding-bottom: $dash_edge_offset; // align with other items
+
+ $fg:$system_fg_color;
+ $bg:$dash_background_color;
+
+ .overview-icon {
+ @extend %tile;
+ @include button(normal, $tc:$fg, $c:$bg, $style: flat, $always_dark: true);
+ }
+
+ &:focus .overview-icon { @include button(focus, $tc:$fg, $c:$bg, $style: flat, $always_dark: true);}
+ &:hover .overview-icon { @include button(hover, $tc:$fg, $c:$bg, $style: flat, $always_dark: true);}
+ &:active .overview-icon { @include button(active, $tc:$fg, $c:$bg, $style: flat, $always_dark: true);}
+ &:checked .overview-icon { @include button(checked, $tc:$fg, $c:$bg, $style: flat, $always_dark: true);}
+ }
+
+ // running app dot
+ .app-grid-running-dot {
+ // manually position the dot within the dash item
+ margin-bottom: $dash_padding + $dash_edge_offset - 3px; // 3px = size of dot (5px) subtracted from its translationY from appDisplay.js
+ }
+ }
+
+ // separator between pinned and running apps
+ .dash-separator {
+ width: 1px;
+ margin-left:$base_margin;
+ margin-right:$base_margin;
+ background-color: $system_borders_color;
+
+ @if $contrast == 'high' {
+ width: 2px;
+ background-color: $hc_inset_color;
+ }
+ }
+
+ // make sure all dash components have same margin from screen edge
+ .dash-separator,
+ .dash-background {
+ margin-bottom: $dash_edge_offset;
+ }
+}
+
+// OSD Tooltip
+.dash-label {
+ @extend %tooltip;
+ -y-offset: $base_margin * 2; // distance from the dash edge
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_dialogs.scss b/gnome-shell/46/gnome-shell-sass/widgets/_dialogs.scss
new file mode 100644
index 0000000..48bb9c0
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_dialogs.scss
@@ -0,0 +1,174 @@
+/* Modal Dialogs */
+
+.headline {
+ @extend %title_4;
+}
+
+.modal-dialog {
+ background-color: $bg_color;
+ border-radius: $modal_radius;
+ box-shadow: inset 0 0 0 1px $outer_borders_color;
+
+ .modal-dialog-content-box {
+ margin: $base_margin * 8 $base_margin * 10;
+ spacing: $base_margin * 8;
+ 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: $base_padding * 3;
+
+ .message-dialog-title {
+ text-align: center;
+ @extend %title_2;
+
+ &.lightweight { @extend %title_4;}
+ }
+ .message-dialog-description { text-align: center; }
+}
+
+/* Dialog List */
+.dialog-list {
+ spacing: $base_padding * 3;
+
+ .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: $base_padding * 4;
+ margin-bottom: $base_padding * 2;
+ }
+ .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: $base_margin * 6;
+ }
+}
+
+.prompt-dialog-password-grid {
+ spacing-rows: $base_margin * 2;
+ spacing-columns: $base_margin;
+
+ .prompt-dialog-password-entry {
+ width: auto;
+
+ // 4px (spacing) + 16px (spinner-width)
+ &:ltr { margin-left: $base_margin+$base_icon_size; }
+ &:rtl { margin-right: $base_margin+$base_icon_size; }
+ }
+}
+
+.prompt-dialog-password-layout {
+ spacing: $base_margin * 2;
+}
+
+.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: $base_margin * 2;
+ margin-bottom: $base_padding;
+
+ .polkit-dialog-user-root-label { color: $warning_color; }
+}
+
+/* Audio selection dialog */
+.audio-device-selection-dialog {
+ .modal-dialog-content-box { margin-bottom: $base_margin * 7; }
+ .audio-selection-box { spacing: $base_margin * 5; }
+}
+
+.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: $base_margin * 5;
+ spacing: $base_margin * 5;
+}
+
+.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;
+}
+
+/* Access portal dialog */
+.access-dialog {
+ text-align: center;
+}
\ No newline at end of file
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_entries.scss b/gnome-shell/46/gnome-shell-sass/widgets/_entries.scss
new file mode 100644
index 0000000..41e10f7
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_entries.scss
@@ -0,0 +1,20 @@
+/* Entries */
+
+StEntry {
+ @extend %entry;
+
+ StIcon.capslock-warning {
+ icon-size: $scalable_icon_size;
+ warning-color: $warning_color;
+ padding: 0 $base_margin;
+ }
+
+ StIcon.peek-password {
+ icon-size: $scalable_icon_size;
+ padding: 0 $base_margin;
+ }
+
+ StLabel.hint-text {
+ margin-left: $base_margin * 0.5;
+ }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_ibus-popup.scss b/gnome-shell/46/gnome-shell-sass/widgets/_ibus-popup.scss
new file mode 100644
index 0000000..c1c0cfa
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_ibus-popup.scss
@@ -0,0 +1,39 @@
+// 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;
+
+ & StIcon { icon-size: $base_icon_size; }
+}
+
+.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;}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_keyboard.scss b/gnome-shell/46/gnome-shell-sass/widgets/_keyboard.scss
new file mode 100644
index 0000000..39e6394
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_keyboard.scss
@@ -0,0 +1,158 @@
+/* On-screen Keyboard */
+
+$key_size: 1.2em;
+$key_border_radius: $base_border_radius * 1.25;
+$key_bg_color: darken($osd_fg_color, 70%);
+// $default_key_bg_color: darken($key_bg_color, 4%);
+$default_key_bg_color: if($variant=='light', darken($key_bg_color, 11%), darken($key_bg_color, 10%));
+
+
+// draw keys using button function
+#keyboard {
+ // background-color: transparentize(if($variant=='light', darken($bg_color, 5%), darken($bg_color, 8%)), 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 + 5pt);
+ 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 button(normal, $c:$key_bg_color, $tc:$osd_fg_color);
+
+ &:focus { @include button(focus);}
+ &:hover { @include button(hover, $c:$key_bg_color, $tc:$osd_fg_color);}
+ &:active { @include button(active, $c:$key_bg_color, $tc:$osd_fg_color); }
+ &:checked { @include button(checked, $c:$key_bg_color, $tc:$osd_fg_color); }
+
+ &:grayed { //FIXMEy
+ background-color: darken($bg_color, 3%);
+ color: $osd_fg_color;
+ border-color: $osd_borders_color;
+ }
+
+ // non-character keys
+ &.default-key {
+ @include button(normal, $c:$default_key_bg_color, $tc:$osd_fg_color);
+ &:hover { @include button(hover, $c:$default_key_bg_color, $tc:$osd_fg_color);}
+ &:active { @include button(active, $c:$default_key_bg_color, $tc:$osd_fg_color);}
+ &:checked { @include button(checked, $c:$default_key_bg_color, $tc:$osd_fg_color);}
+ border-radius: $key_border_radius;
+
+ // keys that may be latched: ctrl/alt/shift
+ &:latched {
+ border-color: lighten($selected_bg_color, 5%);
+ background-color: $selected_bg_color;
+ }
+ }
+
+ // enter key is suggested-action
+ &.enter-key {
+ @include button(normal, $c:$selected_bg_color, $tc:$selected_fg_color);
+ &:hover { @include button(hover, $c:$selected_bg_color, $tc:$selected_fg_color);}
+ &:active { @include button(active, $c:$selected_bg_color, $tc:$selected_fg_color);}
+ &:checked { @include button(checked, $c:$selected_bg_color, $tc:$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: lighten($key_bg_color, 20%);
+ color: $osd_bg_color;
+ &:hover {
+ background-color: lighten($key_bg_color, 25%);
+ color: lighten($osd_bg_color, 5%);
+ }
+ }
+
+ // size of icons on keys
+ StIcon { icon-size: $medium_icon_size; }
+}
+
+// long press on a key popup
+.keyboard-subkeys {
+ -arrow-border-radius: $base_border_radius * 2;
+ -arrow-background-color: $osd_bg_color;
+ -arrow-border-width: 1px;
+ -arrow-border-color: lighten($osd_bg_color, 9%);
+ -arrow-base: 20px;
+ -arrow-rise: 10px;
+ -boxpointer-gap: $base_padding;
+ padding: $base_padding;
+
+ .keyboard-key {
+ @include button(normal, $c:$key_bg_color, $tc:$osd_fg_color);
+
+ &:focus { @include button(focus);}
+ &:hover { @include button(hover, $c:$key_bg_color, $tc:$osd_fg_color);}
+ &:active { @include button(active, $c:$key_bg_color, $tc:$osd_fg_color); }
+ &:checked { @include button(checked, $c:$key_bg_color, $tc:$osd_fg_color); }
+
+ 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 {
+ @extend %title_4;
+ spacing: 12px;
+ min-height: 17pt;
+ padding: $base_padding * 2;
+ color: $osd_fg_color;
+
+ // each suggestion
+ StButton {
+ margin: 0 3px;
+ min-width: 32px;
+ border-radius: 4px;
+ padding: 0px $base_padding * 3;
+
+ @include button(undecorated, $c:$key_bg_color, $tc:$osd_fg_color);
+
+ &:focus { @include button(focus);}
+ &:hover { @include button(hover, $c:$key_bg_color, $tc:$osd_fg_color);}
+ &:active { @include button(active, $c:$key_bg_color, $tc:$osd_fg_color); }
+ &:checked { @include button(checked, $c:$key_bg_color, $tc:$osd_fg_color); }
+ }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_login-lock.scss b/gnome-shell/46/gnome-shell-sass/widgets/_login-lock.scss
new file mode 100644
index 0000000..4dc9aec
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_login-lock.scss
@@ -0,0 +1,330 @@
+$_gdm_bg: $system_base_color;
+$_gdm_fg: $system_fg_color;
+$_gdm_dialog_width: 25em;
+
+// common style for login and lockscreen
+.login-dialog,
+.unlock-dialog {
+ color: $_gdm_fg;
+
+ .caps-lock-warning-label,
+ .login-dialog-message-warning {
+ color: $_gdm_fg;
+ }
+
+ .login-dialog-prompt-layout {
+ width: $_gdm_dialog_width;
+ spacing: $base_padding * 1.5;
+ }
+}
+
+// GDM Login Dialog
+// uses dark grey system styles
+.login-dialog {
+ .login-dialog-prompt-entry {
+ @extend %system_entry;
+ }
+}
+
+// buttons on login screen
+.login-dialog-button {
+
+ &.cancel-button,
+ &.switch-user-button,
+ &.login-dialog-session-list-button {
+ @extend .icon-button;
+ @extend %system_button;
+ }
+
+ &.cancel-button {
+ padding: $base_padding * 1.5;
+ }
+}
+
+.login-dialog-button-box {
+ spacing: $base_padding * 2;
+}
+
+.conflicting-session-dialog-content {
+ spacing: 20px;
+
+ .conflicting-session-dialog-title {
+ text-align: center;
+ @extend %title_2;
+ margin-bottom: 5px;
+ }
+
+ .conflicting-session-dialog-desc {
+ text-align: center;
+ }
+
+ .conflicting-session-dialog-desc-warning {
+ text-align: center;
+ color: $warning_color;
+ }
+}
+
+.login-dialog-logo-bin {
+ margin: 3em 0;
+}
+
+.login-dialog-banner-view {
+ max-width: $_gdm_dialog_width;
+
+ .login-dialog-banner {
+ color: darken($_gdm_fg,10%);
+ }
+}
+
+.login-dialog-message {
+ text-align: center;
+}
+
+.login-dialog-user-selection-box {
+ // padding to ensure the box doesn't overlap the panel
+ padding-top: 4em;
+ padding-bottom: 8em;
+}
+
+.login-dialog-not-listed-label {
+ @extend %heading;
+ padding: $base_padding;
+}
+
+.login-dialog-not-listed-button {
+ // use button styling
+ @extend %button_common;
+ @include button(normal, $tc:$_gdm_fg, $c:$_gdm_bg, $style: flat, $always_dark: true);
+ &:focus { @include button(focus, $tc:$_gdm_fg, $c:$_gdm_bg, $style: flat, $always_dark: true);}
+ &:hover { @include button(hover, $tc:$_gdm_fg, $c:$_gdm_bg, $style: flat, $always_dark: true);}
+ &:active { @include button(active, $tc:$_gdm_fg, $c:$_gdm_bg, $style: flat, $always_dark: true);}
+
+ padding: 0 $base_padding;
+ margin: $base_padding;
+}
+
+// Authentication methods list
+.login-dialog-auth-list-view {
+ -st-vfade-offset: 3em;
+}
+
+.login-dialog-auth-list {
+ spacing: $base_padding;
+ margin-left: 2em;
+}
+
+.login-dialog-auth-list-title {
+ margin-left: 2em;
+}
+
+.login-dialog-auth-list-item {
+ border-radius: $base_border_radius * 2;
+ padding: $base_margin;
+ color: darken($_gdm_fg,30%);
+
+ &:focus, &:selected {
+ background-color: $selected_bg_color;
+ color: $selected_fg_color;
+ }
+}
+
+.login-dialog-auth-list-label {
+ @extend %title_4;
+ &:ltr { padding-left: $base_padding * 2.5; text-align: left; }
+ &:rtl { padding-right: $base_padding * 2.5; text-align: right; }
+}
+
+
+// User list
+.login-dialog-user-list-view {
+ width: $_gdm_dialog_width;
+ -st-vfade-offset: 3em;
+
+ .login-dialog-user-list {
+ margin: 0 $base_margin * 2; // margin to account for scrollbar
+ spacing: $base_padding * 2;
+
+ .login-dialog-user-list-item {
+ // use button styling
+ @extend %button_common;
+ @include button(normal, $tc:$_gdm_fg, $c:$system_base_color, $always_dark: true);
+ &:selected,
+ &:focus { @include button(focus, $tc:$_gdm_fg, $c:$system_base_color, $always_dark: true);}
+ &:hover { @include button(hover, $tc:$_gdm_fg, $c:$system_base_color, $always_dark: true);}
+ &:active { @include button(active, $tc:$_gdm_fg, $c:$system_base_color, $always_dark: true);}
+
+ border-radius: $modal_radius;
+ padding: $base_padding * 1.5;
+
+ // create border for indicating logged in user
+ .user-icon {
+ border: 2px solid transparent;
+ }
+
+ .login-dialog-timed-login-indicator {
+ height: 2px;
+ margin-top: $base_padding;
+ background-color: transparentize($_gdm_fg, .3);
+ }
+
+ &:logged-in {
+ // color border for logged-in user
+ .user-icon {
+ border-color: $selected_bg_color;
+ StIcon {
+ background-color: transparentize($selected_bg_color, .7);
+ }
+ }
+ }
+ }
+ }
+}
+
+// Screen Shield
+// a.k.a. the lockscreen, uses transparent styles
+.unlock-dialog {
+ background-color: transparent;
+
+ .login-dialog-prompt-entry {
+ @extend %lockscreen_entry;
+ }
+
+ .button,
+ .icon-button {
+ @extend %lockscreen_button;
+ }
+}
+
+.screen-shield-background { // just the shadow, really
+ background: black;
+ box-shadow: 0 2px 4px rgba(0,0,0,0.6);
+}
+
+#lockDialogGroup {
+ background-color: $_gdm_bg;
+}
+
+// Clock
+.unlock-dialog-clock {
+ color: $_gdm_fg;
+ spacing: 2em;
+
+ .unlock-dialog-clock-time {
+ @extend %numeric;
+ @include fontsize(72pt);
+ font-weight: 200;
+ }
+
+ .unlock-dialog-clock-date {
+ @extend %title_1;
+ font-weight: 400;
+ }
+
+ .unlock-dialog-clock-hint {
+ margin-top: 2em;
+ padding: $base_padding $base_padding * 3;
+ border-radius: $base_border_radius * 2;
+ font-weight: bold;
+ }
+}
+
+// Notifications
+#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); }
+ }
+}
+
+.unlock-dialog-notifications-container {
+ margin: $base_margin * 3;
+ spacing: $base_padding;
+ width: $_gdm_dialog_width;
+ background-color: transparent;
+
+ .summary-notification-stack-scrollview {
+ padding-top: 0;
+ padding-bottom: 0;
+ }
+
+ .notification,
+ .unlock-dialog-notification-source {
+ padding: $base_margin * 3 $base_margin * 4;
+ border: none;
+ background-color: transparentize($_gdm_fg,0.9);
+ color: $_gdm_fg;
+ border-radius: $modal_radius;
+
+ &.critical { background-color: transparentize($_gdm_fg,0.8) }
+ }
+}
+
+.unlock-dialog-notification-icon {
+ icon-size: $large_icon_size;
+}
+
+.unlock-dialog-notification-label {
+ padding-left: $base_padding * 2;
+ padding-right: 0;
+ &:rtl { padding-right: $base_padding * 2; padding-left: 0; }
+}
+
+.unlock-dialog-notification-count-text {
+ font-weight: bold;
+ padding: 0 $base_padding * 2;
+ color: $_gdm_fg;
+ background-color: transparentize($_gdm_fg, .9);
+ border-radius: $forced_circular_radius;
+}
+
+
+.login-dialog,
+.unlock-dialog {
+
+ // User Widget
+ .user-widget {
+
+ // common
+ .user-widget-label {
+ color: $_gdm_fg;
+ }
+
+ .user-icon {
+ background-color: transparentize($_gdm_fg, .87);
+ color: $_gdm_fg;
+
+ @if $contrast == 'high' {
+ background-color: transparentize($_gdm_fg, .7);
+ box-shadow:inset 0 0 0 1px $hc_inset_color;
+ }
+ }
+
+ // layout of the user list
+ &.horizontal {
+ spacing: $base_padding * 3;
+ .user-widget-label {
+ @extend %title_3;
+ }
+ }
+
+ // layout of the login prompt
+ &.vertical {
+ spacing: $base_padding * 4;
+
+ .user-widget-label {
+ @extend %title_1;
+ text-align: center;
+ margin-bottom: .75em;
+ }
+
+ .user-icon {
+ icon-size: $base_icon_size * 10;
+
+ & StIcon {
+ padding: $base_padding * 4;
+ }
+ }
+ }
+ }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_looking-glass.scss b/gnome-shell/46/gnome-shell-sass/widgets/_looking-glass.scss
new file mode 100644
index 0000000..7b8d904
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_looking-glass.scss
@@ -0,0 +1,131 @@
+/* Looking Glass */
+
+// Dialog
+#LookingGlassDialog {
+
+ @extend %osd_panel;
+ background-color: transparentize($osd_bg_color,0.02);
+ color: $osd_fg_color;
+
+ border-radius: $modal_radius;
+ margin-top: $base_margin;
+ border: 2px solid transparent;
+ padding: $base_padding;
+ spacing: $base_padding;
+ box-shadow: 0 2px 4px 0 $shadow_color;
+
+ @if $contrast == 'high' {
+ border-color: $hc_inset_color;
+ background-color: $osd_bg_color;
+ box-shadow:none;
+ }
+
+ & > #Toolbar {
+ border: none;
+ padding: $base_padding;
+ border-radius: 0;
+ background-color: transparent;
+ spacing: $base_padding;
+
+ .lg-toolbar-button {
+ @extend %osd_button;
+ padding: $base_padding $base_padding * 2;
+
+ & > StIcon { icon-size: $base_icon_size; }
+ }
+ }
+
+ .labels {
+ spacing: $base_padding;
+ }
+
+ .notebook-tab {
+ @extend %osd_button;
+ -natural-hpadding: $base_padding * 2;
+ -minimum-hpadding: $base_padding * 2;
+ padding: $base_padding $base_padding * 2;
+ }
+
+ StBoxLayout#EvalBox { padding: 4px; spacing: $base_padding; padding: $base_padding; }
+ StBoxLayout#ResultsArea { spacing: $base_padding; padding: $base_padding; }
+}
+
+.lg-dialog {
+
+ StEntry {
+ @extend %osd_entry;
+ min-height: to_em(22px);
+ }
+
+ .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%); }
+
+ & StIcon { icon-size: 12px; }
+ }
+}
+
+.lg-completions-text {
+ @extend %caption;
+ font-style: italic;
+}
+
+.lg-obj-inspector-title {
+ spacing: $base_padding;
+}
+
+.lg-obj-inspector-button {
+ border: 1px solid $borders_color;
+ padding: 4px;
+ border-radius: $base_border_radius;
+ &:hover { border: 1px solid $fg_color; }
+}
+
+// Extensions
+#lookingGlassExtensions { padding: $base_padding; }
+
+.lg-extensions-list {
+ padding: $base_padding;
+ spacing: $base_padding;
+}
+
+.lg-extension {
+ @extend %card;
+}
+
+.lg-extension-name {
+ @extend %heading;
+}
+
+.lg-extension-meta {
+ spacing: $base_padding;
+}
+
+// Inspector
+#LookingGlassPropertyInspector {
+ background: $bg_color;
+ border: 1px solid $borders_color;
+ border-radius: $base_border_radius;
+ padding: $base_padding;
+}
+
+.lg-debug-flag-button {
+ StLabel { padding: $base_padding, 2 * $base_padding; }
+
+ color: $osd_fg_color;
+ &:hover { color: lighten($osd_fg_color, 20%); }
+ &:active { color: darken($osd_fg_color, 20%); }
+}
+
+.lg-debug-flags-header {
+ padding-top: 2 * $base_padding;
+ padding: $base_padding;
+ @extend %title_2;
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_message-list.scss b/gnome-shell/46/gnome-shell-sass/widgets/_message-list.scss
new file mode 100644
index 0000000..2b3fd61
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_message-list.scss
@@ -0,0 +1,222 @@
+/* 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($fg_color, .75);
+ @if $contrast == 'high' {
+ color: transparentize($fg_color, .5);
+ }
+ // icon size and color
+ > StIcon {
+ icon-size: 96px; // non-em asset size
+ margin-bottom: $base_margin * 3;
+ -st-icon-style: symbolic;
+ }
+ }
+}
+
+.message-list-sections {
+ // to account for scrollbar
+ &:ltr {margin-right: $base_margin * 3; }
+ &:rtl {margin-left: $base_margin * 3;}
+
+ spacing: $base_padding * 2;
+}
+
+.message-list-section,
+.message-list-section-list {
+ spacing: $base_padding * 2;
+}
+
+// do-not-disturb + clear button
+.message-list-controls {
+ // NOTE: remove the padding if notification_bubble could remove margin for drop shadow
+ padding: $base_padding * 2;
+ padding-bottom: $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: transparentize($selected_bg_color, 0.4);
+ }
+ }
+}
+
+// message bubbles
+.message {
+ @extend %card;
+ padding: 0;
+ margin: 0;
+ border-radius: $modal_radius;
+
+ // subtract side padding to accommodate the close button's border
+ &:ltr { padding-right:-2px; };
+ &:rtl { padding-left:-2px; };
+
+ // message header
+ .message-header {
+ padding: 0 $scaled_padding;
+ margin: $base_padding;
+ margin-bottom: 0;
+ spacing: $base_padding;
+ color: $insensitive_fg_color;
+
+ // header source icon
+ .message-source-icon {
+ icon-size: $scalable_icon_size; // 16px
+ -st-icon-style: symbolic;
+ }
+
+ // box that contains the source icon, source name and timestamp of the message
+ .message-header-content {
+ spacing: $base_padding;
+ min-height: to_em(24px);
+ padding-bottom: $base_padding;
+
+ // header source title
+ .message-source-title {
+ font-weight: bold;
+ }
+
+ // Time label
+ .event-time {
+ @extend %caption;
+ color: $insensitive_fg_color;
+ // Add bottom padding to align the app name with the time horizontally
+ padding-bottom: to_em(1px);
+
+ &:ltr { text-align: right };
+ &:rtl { text-align: left };
+ }
+ }
+
+ // buttons in the message header
+ .message-expand-button,
+ .message-close-button {
+ @extend .icon-button;
+ color: $fg_color;
+ background-color: transparentize($fg_color, .9);
+ padding: 4px;
+ &:hover { background-color: transparentize($fg_color, .81);}
+ &:active,
+ &:active:hover { background-color: transparentize($fg_color, .76);}
+ &:insensitive { background-color: transparentize($fg_color, .93);}
+ }
+
+ .message-expand-button {
+ padding: 6px;
+ &:ltr { margin-right: $base_padding; }
+ &:rtl { margin-left: $base_padding; }
+ }
+ }
+
+ // container for message contents
+ .message-box {
+ padding: $base_padding;
+ margin: $base_padding;
+ margin-top: 0;
+ spacing: $base_padding;
+
+ // icon of the message
+ .message-icon {
+ &:ltr { margin-right:$base_padding;}
+ &:rtl { margin-left:$base_padding;}
+
+ // icon size and color
+ icon-size: $base_icon_size * 3; // 48px
+ -st-icon-style: symbolic;
+
+ &.message-themed-icon {
+ border-radius: $forced_circular_radius; // is circular
+ background-color: transparentize($fg_color, 0.8);
+ icon-size: $base_icon_size;
+ min-width: $base_icon_size * 3;
+ min-height: $base_icon_size * 3;
+ }
+ }
+
+ // If the header isn't displayed we need more top margin
+ &:first-child {
+ margin-top: $base_padding * 2;
+ }
+
+ // text of the message
+ .message-content {
+ spacing: $base_margin;
+
+ // message title
+ .message-title {
+ font-weight: bold;
+ }
+ }
+ }
+}
+
+// URLs in messages
+.url-highlighter {
+ link-color: $link_color;
+}
+
+/* Media Controls */
+.message-media-control {
+ padding: 0 $base_padding * 3;
+ border-radius: $base_border_radius;
+ color: $fg_color;
+ border: 1px solid transparent;
+
+ @if $contrast == 'high' {
+ border-color: $hc_inset_color;
+ margin: $base_padding * 2 2px;
+ }
+
+ // 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: lighten($active_bg_color, 5%);
+ color: $fg_color;
+ }
+
+ &:insensitive {
+ color: lighten($insensitive_fg_color, 5%);
+
+ @if $contrast == 'high' {
+ border-color: transparent;
+ }
+ }
+
+ & StIcon { icon-size: $base_icon_size; }
+}
+
+.media-message {
+ // album-art
+ .message-icon {
+ border-radius: $base_border_radius !important;
+
+ &.message-themed-icon {
+ icon-size: $large_icon_size !important; // 32px
+ }
+ }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_misc.scss b/gnome-shell/46/gnome-shell-sass/widgets/_misc.scss
new file mode 100644
index 0000000..35f9dc9
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_misc.scss
@@ -0,0 +1,53 @@
+// Rubberband for select-area screenshots
+.select-area-rubberband {
+ background-color: transparentize($selected_bg_color,0.7);
+ border: 1px solid $selected_bg_color;
+}
+
+// User icon
+.user-icon {
+ background-size: contain;
+ border-radius: $forced_circular_radius;
+ icon-size: $base_icon_size * 4;
+
+ background-color: transparentize($osd_fg_color,0.95);
+ color: $osd_fg_color;
+
+ & StIcon {
+ padding: $base_padding * 2;
+ }
+
+ &.user-avatar {
+ box-shadow:inset 0 0 0 1px transparentize($osd_fg_color, 0.9);
+
+ @if $contrast == 'high' {
+ @include draw_hc_inset();
+ }
+ }
+}
+
+.lightbox { background-color: black; }
+.flashspot { background-color: white; }
+
+// Hidden
+.hidden { color: transparent;}
+
+// 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/46/gnome-shell-sass/widgets/_notifications.scss b/gnome-shell/46/gnome-shell-sass/widgets/_notifications.scss
new file mode 100644
index 0000000..0601425
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_notifications.scss
@@ -0,0 +1,25 @@
+/* Notifications & Message Tray */
+
+$notification_banner_height: 64px;
+$notification_banner_width: 34em;
+
+// Banner notifications
+.notification-banner {
+ min-height: $notification_banner_height;
+ width: $notification_banner_width;
+ box-shadow: 0 2px 4px 2px $shadow_color;
+ border-radius: $modal_radius;
+ margin: $base_margin;
+
+ @if $contrast == 'high' {
+ @include draw_hc_inset();
+ }
+}
+
+.notification-buttons-bin {
+ spacing: 0;
+}
+
+.notification-button {
+ @extend %bubble_button;
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_osd.scss b/gnome-shell/46/gnome-shell-sass/widgets/_osd.scss
new file mode 100644
index 0000000..55cf44a
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_osd.scss
@@ -0,0 +1,66 @@
+/* OSD */
+
+$osd_levelbar_height:6px;
+
+.osd-window {
+ @extend %osd_panel;
+ @extend %heading;
+ text-align: center;
+ font-weight: bold;
+ spacing: $base_padding * 2;
+ padding: $base_padding * 2 $base_padding * 3;
+ & > * { spacing: $base_margin * 2; }
+ margin-bottom: 4em;
+
+ StIcon { icon-size: $large_icon_size;}
+
+ StLabel {
+ &:ltr { margin-right: $base_padding; }
+ &:rtl { margin-left: $base_padding; }
+ }
+
+ .level {
+ margin-bottom: $base_margin;
+ &:first-child { margin-bottom: 0; }
+
+ min-width: 160px;
+ -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: $base_padding * 0.5;
+ &:ltr { margin-right: $base_padding; }
+ &:rtl { margin-left: $base_padding; }
+ }
+}
+
+// Monitor number label
+.osd-monitor-label {
+ background-color: $selected_bg_color;
+ color: $selected_fg_color;
+ border-radius: $modal_radius;
+ font-size: 3em;
+ font-weight: bold;
+ font-feature-settings: "tnum";
+ margin: $base_margin * 3;
+ padding: $base_padding * 2;
+ text-align: center;
+ min-width: 1.5em;
+}
+
+/* Pad OSD */
+.pad-osd-window {
+ padding: 32px;
+ background-color: transparentize(#000, 0.2);
+
+ .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/46/gnome-shell-sass/widgets/_overview.scss b/gnome-shell/46/gnome-shell-sass/widgets/_overview.scss
new file mode 100644
index 0000000..117213e
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_overview.scss
@@ -0,0 +1,13 @@
+/* OVERVIEW */
+
+.controls-manager, .secondary-monitor-workspaces {
+ spacing: $base_padding * 2;
+}
+
+#overviewGroup {
+ background-color: $system_base_color;
+}
+
+.overview-controls {
+ padding-bottom: $base_margin * 8;
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_panel.scss b/gnome-shell/46/gnome-shell-sass/widgets/_panel.scss
new file mode 100644
index 0000000..2a29eee
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_panel.scss
@@ -0,0 +1,180 @@
+/* Top Bar */
+// a.k.a. the panel
+
+$privacy_indicator_color: if($variant == 'light', $orange_4, $orange_3);
+$recording_indicator_color: $red_4;
+
+$transparent_panel_fg_color: $light_1; // always white for transparent lock screens
+$system_panel_fg_color: $system_fg_color; // always light for lockscreen, overview
+
+$panel_height: 2.2em;
+$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;
+
+ // panel menus
+ .panel-button {
+ @include panel_button();
+ -natural-hpadding: $base_padding * 2;
+ -minimum-hpadding: $base_padding;
+
+ // status area icons
+ .system-status-icon {
+ icon-size: $scalable_icon_size;
+ padding: 0 $base_padding;
+ margin: 0 $base_margin;
+ }
+
+ // app menu icon
+ .app-menu-icon {
+ -st-icon-style: symbolic;
+ // dimensions of the icon are hardcoded
+ }
+
+ // reduce margin between icons in combined menu
+ .panel-status-menu-box,
+ .panel-status-indicators-box {
+ spacing: $base_margin;
+
+ > .system-status-icon {
+ padding: 0;
+ }
+ }
+
+ panelActivities {
+ & StBoxLayout {
+ padding: 0 $scaled_padding * 0.5; // use em padding to keep proportion
+ spacing: 5px;
+ }
+
+ & .workspace-dot {
+ border-radius: $forced_circular_radius;
+ min-width: $scalable_icon_size * 0.5;
+ min-height: $scalable_icon_size * 0.5;
+ background-color: $panel_fg_color;
+ }
+ }
+
+ // screen activity indicators
+ &.screen-recording-indicator,
+ &.screen-sharing-indicator {
+ StBoxLayout {
+ spacing: $scaled_padding;
+ }
+
+ StIcon {
+ icon-size: $scalable_icon_size;
+ }
+ }
+
+ &.screen-recording-indicator {
+ @include panel_button($bg:$recording_indicator_color, $fg:$_base_color_light, $style: filled);
+ }
+
+ &.screen-sharing-indicator {
+ @include panel_button($bg:$privacy_indicator_color, $fg:$_base_color_light, $style: filled);
+ }
+
+ // clock
+ &.clock-display {
+ // The clock display needs to have the background on .clock because
+ // we want to exclude the do-not-disturb indicator from the background
+ // see _drawing.scss for override details
+ @include panel_button($highlighted_child: true, $child_class: '.clock');
+
+ .clock {
+ // the highlighted child
+ }
+
+ .messages-indicator {
+ icon-size: $scalable_icon_size;
+ }
+ }
+ }
+
+ // transparent panel on overview, lock & login screens
+ &:overview,
+ &.unlock-screen,
+ &.login-screen {
+ background-color: transparent;
+
+ // unfortunate duplication to keep indicator style in these states
+ .panel-button {
+ &.screen-recording-indicator {
+ @include panel_button($bg:$recording_indicator_color, $fg:$_base_color_light, $style: filled);
+ }
+
+ &.screen-sharing-indicator {
+ @include panel_button($bg:$privacy_indicator_color, $fg:$_base_color_light, $style: filled);
+ }
+ }
+ }
+
+ // use transparent text styles for lock & login screen panels
+ &.unlock-screen,
+ &.login-screen {
+ .panel-button {
+ @include panel_button($fg:$transparent_panel_fg_color);
+
+ // clock
+ &.clock-display {
+ @include panel_button($fg:$transparent_panel_fg_color, $highlighted_child: true, $child_class: '.clock');
+ }
+ }
+ }
+
+ // use system text styles for overview panel
+ &:overview {
+ .panel-button {
+ @include panel_button($fg:$system_panel_fg_color);
+
+ panelActivities .workspace-dot {
+ background-color: $system_panel_fg_color;
+ }
+
+ // clock
+ &.clock-display {
+ @include panel_button($fg:$system_panel_fg_color, $highlighted_child: true, $child_class: '.clock');
+ }
+ }
+ }
+
+ .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;
+ }
+
+ // important privacy related indicators
+ .privacy-indicator { color: $privacy_indicator_color; }
+}
+
+// App Menu
+#appMenu {
+ spacing: $scaled_padding;
+ .label-shadow { color: transparent; }
+}
+
+#appMenu .panel-status-menu-box {
+ padding: 0 $scaled_padding;
+ spacing: $scaled_padding;
+}
+
+
+// Clock
+.clock-display-box {
+ spacing: 2px;
+ .clock {
+ padding-left: $scaled_padding * 2;
+ padding-right: $scaled_padding * 2;
+ }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_popovers.scss b/gnome-shell/46/gnome-shell-sass/widgets/_popovers.scss
new file mode 100644
index 0000000..7f3df1a
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_popovers.scss
@@ -0,0 +1,152 @@
+/* Popovers/Menus */
+
+$menu_bg_color: $bg_color;
+$menuitem_bg_color: lighten($menu_bg_color, 4%);
+$menuitem_border_radius: $base_border_radius * 1.5;
+
+$submenu_bg_color: lighten($menu_bg_color, 7%);
+
+// the popover itself
+.popup-menu-boxpointer {
+ -arrow-rise: $base_padding; // 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;
+ background-color: $bg_color;
+ border-radius: $modal_radius * 1.25;
+ border: 1px solid $outer_borders_color;
+ box-shadow: 0 2px 4px 0 $shadow_color;
+}
+
+// menu items
+.popup-menu-item {
+ @include menuitem($bg:$menu_bg_color);
+
+ border-radius: $menuitem_border_radius;
+
+ &:checked {
+ border-radius: $menuitem_border_radius $menuitem_border_radius 0 0 !important;
+
+ @if $contrast == 'high' {
+ border: 1px solid $hc_inset_color;
+ border-bottom-width:0;
+ }
+ }
+
+ // add margin to switches in menu items
+ .toggle-switch {
+ &:ltr { margin-left: $base_margin;}
+ &:rtl { margin-right: $base_margin;}
+ }
+}
+
+.popup-ornamented-menu-item {
+ &:ltr {padding-left: $base_padding;}
+ &:rtl {padding-right: $base_padding;}
+}
+
+// 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: $scalable_icon_size;
+}
+
+// popover submenus
+.popup-sub-menu {
+ border-radius: 0 0 $menuitem_border_radius+1px $menuitem_border_radius+1px;
+ margin-bottom: $base_padding;
+ border: 1px solid transparent;
+
+ @if $contrast == 'high' {
+ border-color: $hc_inset_color;
+ }
+
+ // submenu specific styles
+ .popup-menu-item {
+ border-radius: 0;
+ @include menuitem($bg:$submenu_bg_color);
+ border-top-width:0;
+
+ &:last-child {
+ border-radius: 0 0 $menuitem_border_radius $menuitem_border_radius;
+ border-bottom-width:0;
+ }
+ }
+
+ .popup-menu-section {
+ .popup-menu-item:last-child {
+ &:hover,&:focus { border-radius: 0;}
+ }
+ &:last-child .popup-menu-item:last-child {
+ border-radius: 0 0 $menuitem_border_radius $menuitem_border_radius;
+ }
+ }
+}
+
+// container for radio and check boxes
+.popup-menu-ornament {
+ icon-size: $scalable_icon_size !important;
+ width: $scalable_icon_size;
+}
+
+// separator
+.popup-separator-menu-item {
+ border:none !important;
+
+ .popup-separator-menu-item-separator {
+ height: 1px; //not really the whole box
+ background-color: $borders_color;
+ }
+
+ // separators in submenus
+ .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: $borders_color;
+ }
+ }
+}
+
+// desktop background menu
+.background-menu {
+ -boxpointer-gap: 0px;
+ -arrow-rise: 0px; // hide the beak on the menu
+}
+
+// right-click (and panel) app menu
+.app-menu {
+ max-width: 27.25em;
+
+ .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/46/gnome-shell-sass/widgets/_quick-settings.scss b/gnome-shell/46/gnome-shell-sass/widgets/_quick-settings.scss
new file mode 100644
index 0000000..c43081b
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_quick-settings.scss
@@ -0,0 +1,215 @@
+.quick-settings {
+ padding: $base_padding * 3;
+ border-radius: $modal_radius * 2.25;
+
+ .icon-button, .button {
+ padding: $base_padding * 1.75;
+ }
+}
+
+.quick-settings-grid {
+ spacing-rows: $base_padding * 2;
+ spacing-columns: $base_padding * 2;
+}
+
+.quick-toggle, .quick-menu-toggle {
+ border-radius: $forced_circular_radius;
+ min-width: 12em;
+ max-width: 12em;
+ min-height: $scalable_icon_size * 3; // use icon size so the button scales
+ border:none;
+}
+
+.quick-toggle {
+ background-color: none;
+ &:checked { @extend %default_button;}
+
+ & > StBoxLayout { spacing: $base_padding * 1.5; }
+
+ /* Move padding into the box; this is to allow menu arrows
+ to extend to the border */
+ &.button { padding: 0; }
+ & > StBoxLayout { padding: 0 $base_padding * 2; }
+ &:ltr > StBoxLayout { padding-left: $base_padding * 2.5; }
+ &:rtl > StBoxLayout { padding-right: $base_padding * 2.5; }
+
+ .quick-toggle-title { font-weight: bold; }
+
+ & StBoxLayout > .quick-toggle-subtitle {
+ @extend %caption;
+ font-weight: normal;
+ }
+
+ .quick-toggle-icon { icon-size: $scalable_icon_size; }
+}
+
+.quick-menu-toggle {
+ & .quick-toggle {
+ min-width: auto;
+ max-width: auto;
+
+ &:ltr { border-radius: $forced_circular_radius 0 0 $forced_circular_radius; }
+ &:ltr > StBoxLayout { padding-right: $scaled_padding * 1.5; }
+ &:rtl { border-radius: 0 $forced_circular_radius $forced_circular_radius 0; }
+ &:rtr > StBoxLayout { padding-left: $scaled_padding * 1.5; }
+
+ &:ltr:last-child { border-radius: $forced_circular_radius; }
+ &:rtl:last-child { border-radius: $forced_circular_radius; }
+ }
+
+ & .quick-toggle-arrow {
+ padding: $scaled_padding $scaled_padding * 1.75;
+ border-width: 0;
+ border-color: transparentize($fg_color, .75);
+
+ &:checked {
+ @extend %default_button;
+ border-color: $selected_borders_color;
+ }
+
+ &:ltr {
+ border-radius: 0 $forced_circular_radius $forced_circular_radius 0;
+ border-left-width: 1px;
+ }
+ &:rtl {
+ border-radius: $forced_circular_radius 0 0 $forced_circular_radius;
+ border-right-width: 1px;
+ }
+ }
+}
+
+.quick-slider {
+ & > StBoxLayout { spacing: $base_padding; }
+
+ .icon-button { padding: $base_padding; }
+
+ .slider-bin {
+ &:focus {@include button(focus);}
+ padding: $base_padding;
+ border-radius: $forced_circular_radius;
+ }
+}
+
+.quick-toggle-menu {
+ @extend %card;
+
+ &:insensitive {
+ // override insensitive style on submenu
+ @include button(normal);
+ }
+
+ border-radius: $base_border_radius * 3;
+
+ margin: $base_padding * 2 $base_padding * 3 0;
+
+ .popup-menu-item > StIcon {
+ -st-icon-style: symbolic;
+ icon-size: $scalable_icon_size;
+ }
+
+ & .header {
+ spacing-rows: $base_padding * 0.5;
+ spacing-columns: $base_padding * 2;
+ padding-bottom: $base_padding * 2;
+
+ & .icon {
+ icon-size: $medium_scalable_icon_size;
+ border-radius: $forced_circular_radius;
+ padding: 1.5 * $base_padding;
+ background-color: transparentize($fg_color, 0.8);
+
+ &.active {
+ background-color: $selected_bg_color;
+ color: $selected_fg_color;
+ }
+
+ // draw hc outline
+ @if $contrast == 'high' {
+ @include draw_hc_inset();
+ &.active {
+ @include draw_hc_inset($no_inset: true);
+ }
+ }
+ }
+
+ & .title {
+ @extend %title_3;
+ }
+
+ & .subtitle {
+ @extend %caption_heading;
+ }
+ }
+}
+
+.quick-toggle-menu-container {
+}
+
+.quick-settings-system-item {
+ & > StBoxLayout { spacing: $base_padding * 2; }
+
+ & .power-item {
+ min-height: 0;
+ min-width: 0;
+
+ &:insensitive {
+ @include button(normal);
+ background-color: transparent;
+ }
+ }
+}
+
+.nm-network-item {
+ .wireless-secure-icon { icon-size: $scalable_icon_size * 0.5; } // half-size symbolic
+}
+
+.bt-device-item {
+ .popup-menu-icon { -st-icon-style: symbolic; }
+}
+
+.bt-menu-placeholder.popup-menu-item {
+ @extend %title_4;
+ text-align: center;
+
+ padding: 2em 4em;
+}
+
+.device-subtitle { color: transparentize($fg_color, 0.5); }
+
+.keyboard-brightness-level {
+ spacing: $base_padding;
+
+ .button:checked { @extend %default_button; }
+}
+
+// background apps
+
+.background-apps-quick-toggle {
+ min-height: to_em(40px);
+ background-color: transparent;
+
+ & StIcon { icon-size: $scalable_icon_size !important; }
+}
+
+.background-app-item {
+ & .title { @extend %heading; }
+ & .subtitle { @extend %caption; }
+ & .popup-menu-icon {
+ icon-size: $large_icon_size !important;
+ -st-icon-style: regular !important;
+ }
+ & .icon-button {
+ padding: $base_padding;
+
+ // override some background colors since it's a button on an already styled background
+ // FIXME: may need a generic drawing method for button in menu item in future
+ background-color: transparentize($fg_color, 0.87);
+ &:hover { background-color: transparentize($fg_color, 0.78);}
+ &:active { background-color: transparentize($fg_color, 0.69);}
+ }
+ & .spinner {
+ padding: $base_padding;
+ }
+
+ &.popup-inactive-menu-item { color: $fg_color; }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_screenshot.scss b/gnome-shell/46/gnome-shell-sass/widgets/_screenshot.scss
new file mode 100644
index 0000000..05ecd95
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_screenshot.scss
@@ -0,0 +1,203 @@
+// Screenshot UI
+
+$screenshot_ui_panel_padding: $base_padding * 3;
+$screenshot_ui_panel_border_radius: $modal_radius * 2;
+$screenshot_ui_button_red: $red_4;
+
+.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 - $base_padding;
+ margin-bottom: 4em;
+ spacing: $base_padding * 2;
+}
+
+.screenshot-ui-close-button {
+ @extend .window-close; // copy window close button
+ padding: $base_padding !important; // but with more padding
+ margin-top: $base_margin * 3;
+ box-shadow: 0 2px 4px 0 $shadow_color;
+ &.left { margin-left: $base_margin * 3;}
+ &.right { margin-right: $base_margin * 3;}
+}
+
+.screenshot-ui-type-button {
+ @extend %osd_button_flat;
+ min-width: 48px;
+ padding: $base_padding * 2 $base_padding * 3;
+ border-radius: $screenshot_ui_panel_border_radius - $screenshot_ui_panel_padding;
+
+ .icon-label-button-container {
+ @extend %caption;
+ spacing: $scaled_padding;
+
+ > StIcon { icon-size: $large_icon_size;}
+ }
+}
+
+.screenshot-ui-capture-button {
+ width: $large_icon_size;
+ height: $large_icon_size;
+ border-radius: $forced_circular_radius;
+ border: 4px $osd_fg_color;
+ padding: $base_margin;
+
+ .screenshot-ui-capture-button-circle {
+ background-color: $osd_fg_color;
+ transition-duration: 200ms;
+ &:hover, &:focus { background-color: $hover_bg_color;}
+ border-radius: $forced_circular_radius;
+ }
+
+ &:hover, &:focus {
+ .screenshot-ui-capture-button-circle {
+ background-color: darken($osd_fg_color, 20%);
+ }
+ }
+
+ &: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: transparentize($osd_fg_color,0.9);
+ border-radius: $forced_circular_radius;
+ padding: $base_padding * 0.5;
+ spacing: $base_padding * 0.5;
+
+ @if $contrast == 'high' {
+ @include draw_hc_inset();
+ }
+}
+
+// non-standard button style
+.screenshot-ui-shot-cast-button {
+ padding: $base_padding $base_padding * 2;
+ background-color: transparent;
+ border-radius: $forced_circular_radius;
+
+ @if $contrast == 'high' {
+ @include draw_hc_inset();
+ }
+
+ > StIcon { icon-size: $base_icon_size;}
+
+ &:hover, &:focus { background-color: transparentize($osd_fg_color, 0.8);}
+ &:active { background-color: transparentize($osd_fg_color, .5);}
+ &:checked { background-color: $osd_fg_color; color: $osd_bg_color;}
+ &:insensitive { color: transparentize($osd_fg_color, 0.5);}
+}
+
+.screenshot-ui-show-pointer-button {
+ @extend %osd_button_flat;
+ @extend .icon-button;
+}
+
+.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: $forced_circular_radius;
+ background-color: white;
+ box-shadow: 0 1px 3px 2px $shadow_color;
+ width: $medium_icon_size;
+ height: $medium_icon_size;
+}
+
+.screenshot-ui-window-selector {
+ background-color: $system_base_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: $forced_circular_radius;
+ border-width: 12px;
+ icon-size: $medium_icon_size;
+}
+
+.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 {
+ @extend %tooltip;
+ text-align: center;
+ -y-offset: $base_margin * 6;
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_scrollbars.scss b/gnome-shell/46/gnome-shell-sass/widgets/_scrollbars.scss
new file mode 100644
index 0000000..77cde65
--- /dev/null
+++ b/gnome-shell/46/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/46/gnome-shell-sass/widgets/_search-entry.scss b/gnome-shell/46/gnome-shell-sass/widgets/_search-entry.scss
new file mode 100644
index 0000000..1f24d3c
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_search-entry.scss
@@ -0,0 +1,15 @@
+// Search entry
+.search-entry {
+ border-radius: $forced_circular_radius;
+ margin-top: $base_padding * 2;
+ margin-bottom: $base_padding;
+ width: 24em;
+
+ @extend %system_entry;
+
+ .search-entry-icon {
+ icon-size: $scalable_icon_size;
+ margin-top: 2px; // center vertically
+ padding: 0 $base_margin;
+ }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_search-results.scss b/gnome-shell/46/gnome-shell-sass/widgets/_search-results.scss
new file mode 100644
index 0000000..568dbbd
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_search-results.scss
@@ -0,0 +1,108 @@
+/* Search */
+
+// search overview container
+#searchResults {
+ margin: 0 $base_margin;
+}
+
+#searchResultsContent {
+ max-width: 1044px;
+}
+
+// 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: $system_overlay_bg_color;
+ color: $system_fg_color;
+ border-radius: $modal_radius * 1.5;
+ padding: $base_padding * 2;
+ margin:0 $base_margin * 3;
+ border: 2px solid transparent;
+
+ @if $contrast == 'high' {
+ border-color: $hc_inset_color;
+ }
+}
+
+%search_section_content_item {
+ @include tile_button($bg:$system_overlay_bg_color);
+ border-radius: $base_border_radius * 1.65;
+}
+
+// "no results" text
+.search-statustext {
+ @extend %title_1;
+ color: transparentize($system_fg_color, .2);
+}
+
+.grid-search-results {
+ spacing: $base_padding * 5;
+ margin:0 $base_margin * 3;
+}
+
+// Search results with icons
+.grid-search-result {
+ @extend .overview-tile;
+}
+
+// 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: $system_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;
+
+ @if $contrast == 'high' {
+ font-weight: bold;
+ }
+ }
+
+ // list item description
+ .list-search-result-description {
+ color: $system_insensitive_fg_color;
+
+ @if $contrast == 'high' {
+ color: $system_fg_color;
+ }
+ }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_slider.scss b/gnome-shell/46/gnome-shell-sass/widgets/_slider.scss
new file mode 100644
index 0000000..f708582
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_slider.scss
@@ -0,0 +1,27 @@
+/* Slider */
+
+$slider_size: $scalable_icon_size;
+
+.slider {
+ // slider trough
+ -barlevel-height: 4px;
+ -barlevel-background-color: 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: $selected_bg_color;
+ -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-radius: $slider_size * 0.5; // half the size of the size
+ -slider-handle-border-width: 0;
+ -slider-handle-border-color: transparent; // because 0 width
+
+ // hc style
+ @if $contrast == 'high' {
+ -barlevel-background-color: transparentize($fg_color, 0.6);
+ }
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_switcher-popup.scss b/gnome-shell/46/gnome-shell-sass/widgets/_switcher-popup.scss
new file mode 100644
index 0000000..bf534b0
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_switcher-popup.scss
@@ -0,0 +1,82 @@
+/* App Switcher */
+
+// same as dash
+$switcher_padding: $base_padding * 2;
+$switcher_radius: $modal_radius + $switcher_padding;
+
+// 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_radius;
+ box-shadow: 0 8px 8px 0 $shadow_color;
+
+ // container for items in list
+ .switcher-list-item-container {
+ spacing: $base_padding * 2;
+ }
+
+ // each item in the list
+ .item-box {
+ @include tile_button($fg:$osd_fg_color, $bg:$osd_bg_color);
+ // override %tile style so mouse doesn't steal focus
+ &:hover {background: none;}
+
+ // brighter than normal selected style
+ &:selected {
+ background-color: transparentize($osd_fg_color, 0.8);
+ }
+
+ @if $contrast == 'high' {
+ &:selected {
+ background-color: transparentize($osd_fg_color, 0.7);
+ }
+ }
+ }
+
+ .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;
+ }
+}
+
+// arrow if app has multiple windows
+.switcher-arrow {
+ border-color: transparentize($osd_fg_color, 0.2);
+ 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/46/gnome-shell-sass/widgets/_switches.scss b/gnome-shell/46/gnome-shell-sass/widgets/_switches.scss
new file mode 100644
index 0000000..ef8a7b6
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_switches.scss
@@ -0,0 +1,18 @@
+/* Switches */
+
+// these are equal to the size of the SVG assets
+$switch_height: 26px;
+$switch_width: 46px;
+
+.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"));
+ }
+
+ & StIcon {icon-size: $base_icon_size;}
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_window-picker.scss b/gnome-shell/46/gnome-shell-sass/widgets/_window-picker.scss
new file mode 100644
index 0000000..c500a0a
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_window-picker.scss
@@ -0,0 +1,48 @@
+/* Window Picker */
+$window_close_button_color: transparentize(lighten($system_bg_color, 7%), .02);
+
+// Window picker
+.window-picker {
+ // Space between window thumbnails
+ spacing: $base_padding;
+}
+
+// Window titles
+.window-caption {
+ @extend %tooltip;
+}
+
+// Close button
+.window-close {
+ background-color: $window_close_button_color;
+ color: $system_fg_color;
+ border-radius: $forced_circular_radius;
+ box-shadow: 0 2px 4px 0 $shadow_color;
+ padding: $base_padding * 0.5;
+ height: $large_icon_size;
+ width: $large_icon_size;
+ transition-duration: 100ms;
+ border: 2px solid transparent;
+
+ @if $contrast == 'high' {
+ border-color: $hc_inset_color;
+ }
+
+ & StIcon { icon-size: $medium_icon_size; }
+
+ &:hover {
+ background-color: lighten($window_close_button_color, 7%);
+ }
+
+ &:active {
+ background-color: lighten($window_close_button_color, 13%);
+ }
+
+}
+
+.workspace-background {
+ // keep in sync with BACKGROUND_CORNER_RADIUS_PIXELS in workspace.js
+ border-radius: 30px;
+ background-color: $invisible_occluded_bg_color;
+ box-shadow: 0 4px 16px 4px $shadow_color;
+}
diff --git a/gnome-shell/46/gnome-shell-sass/widgets/_workspace-switcher.scss b/gnome-shell/46/gnome-shell-sass/widgets/_workspace-switcher.scss
new file mode 100644
index 0000000..f3e069f
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_workspace-switcher.scss
@@ -0,0 +1,25 @@
+/* Workspace Switcher */
+
+$ws_indicator_height: 48px;
+$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/46/gnome-shell-sass/widgets/_workspace-thumbnails.scss b/gnome-shell/46/gnome-shell-sass/widgets/_workspace-thumbnails.scss
new file mode 100644
index 0000000..e9b9cea
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-sass/widgets/_workspace-thumbnails.scss
@@ -0,0 +1,32 @@
+/* Workspace pager */
+
+// thumbnails in overview
+.workspace-thumbnails {
+ visible-width: 32px; //amount visible before hover
+ spacing: $base_padding;
+ padding: $base_padding;
+
+ .workspace-thumbnail {
+ color: $system_fg_color;
+ background-color: lighten($system_bg_color, 10%);
+ border-radius: $base_border_radius * 0.5;
+ border: 1px solid transparent;
+
+ @if $contrast == 'high' {
+ border-color: $hc_inset_color;
+ }
+ }
+
+ // 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: 3px solid $selected_bg_color;
+ border-radius: $base_border_radius;
+}
diff --git a/gnome-shell/46/gnome-shell-start.svg b/gnome-shell/46/gnome-shell-start.svg
new file mode 100644
index 0000000..af139cf
--- /dev/null
+++ b/gnome-shell/46/gnome-shell-start.svg
@@ -0,0 +1,343 @@
+
+
diff --git a/gnome-shell/46/meson.build b/gnome-shell/46/meson.build
new file mode 100644
index 0000000..8d01ae8
--- /dev/null
+++ b/gnome-shell/46/meson.build
@@ -0,0 +1,62 @@
+theme_sources = files([
+ 'gnome-shell-high-contrast.scss',
+ 'gnome-shell-dark.scss',
+ 'gnome-shell-light.scss',
+ 'gnome-shell-sass/_colors.scss',
+ 'gnome-shell-sass/_common.scss',
+ 'gnome-shell-sass/_drawing.scss',
+ 'gnome-shell-sass/_high-contrast-colors.scss',
+ 'gnome-shell-sass/_widgets.scss',
+ '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/_ibus-popup.scss',
+ 'gnome-shell-sass/widgets/_keyboard.scss',
+ 'gnome-shell-sass/widgets/_login-lock.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/_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/_quick-settings.scss',
+ 'gnome-shell-sass/widgets/_screenshot.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/_window-picker.scss',
+ 'gnome-shell-sass/widgets/_workspace-switcher.scss',
+ 'gnome-shell-sass/widgets/_workspace-thumbnails.scss'
+])
+
+stylesheets = [
+ 'gnome-shell-high-contrast.css',
+ 'gnome-shell-dark.css',
+ 'gnome-shell-light.css',
+]
+
+foreach stylesheet: stylesheets
+ if not fs.exists(stylesheet)
+ sassc = find_program('sassc')
+ theme_deps += custom_target(stylesheet,
+ input: fs.replace_suffix(stylesheet, '.scss'),
+ output: stylesheet,
+ command: [
+ sassc, '-a', '@INPUT@', '@OUTPUT@'
+ ],
+ depend_files: theme_sources)
+ endif
+endforeach
+
diff --git a/gnome-shell/46/pad-osd.css b/gnome-shell/46/pad-osd.css
new file mode 100644
index 0000000..e0c9048
--- /dev/null
+++ b/gnome-shell/46/pad-osd.css
@@ -0,0 +1,29 @@
+.Leader {
+ stroke-width: .5 !important;
+ stroke: #535353;
+ fill: none !important;
+}
+
+.Button {
+ stroke-width: .25;
+ stroke: #ededed;
+ fill: #ededed;
+}
+
+.Ring {
+ stroke-width: .5 !important;
+ stroke: #535353 !important;
+ fill: none !important;
+}
+
+.Label {
+ stroke: none !important;
+ stroke-width: .1 !important;
+ fill: transparent !important;
+}
+
+.TouchStrip, .TouchRing {
+ stroke-width: .1 !important;
+ stroke: #ededed !important;
+ fill: #535353 !important;
+}
diff --git a/gnome-shell/46/process-working-dark.svg b/gnome-shell/46/process-working-dark.svg
new file mode 100644
index 0000000..6c7ad64
--- /dev/null
+++ b/gnome-shell/46/process-working-dark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/46/process-working-light.svg b/gnome-shell/46/process-working-light.svg
new file mode 100644
index 0000000..903edde
--- /dev/null
+++ b/gnome-shell/46/process-working-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/46/running-indicator.svg b/gnome-shell/46/running-indicator.svg
new file mode 100644
index 0000000..ebe7ecf
--- /dev/null
+++ b/gnome-shell/46/running-indicator.svg
@@ -0,0 +1,130 @@
+
+
+
+
diff --git a/gnome-shell/46/toggle-off-light.svg b/gnome-shell/46/toggle-off-light.svg
new file mode 100644
index 0000000..aa2385b
--- /dev/null
+++ b/gnome-shell/46/toggle-off-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/46/toggle-off.svg b/gnome-shell/46/toggle-off.svg
new file mode 100644
index 0000000..43cb59f
--- /dev/null
+++ b/gnome-shell/46/toggle-off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/46/toggle-on-light.svg b/gnome-shell/46/toggle-on-light.svg
new file mode 100644
index 0000000..778f922
--- /dev/null
+++ b/gnome-shell/46/toggle-on-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/46/toggle-on.svg b/gnome-shell/46/toggle-on.svg
new file mode 100644
index 0000000..43c221e
--- /dev/null
+++ b/gnome-shell/46/toggle-on.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gnome-shell/46/workspace-placeholder.svg b/gnome-shell/46/workspace-placeholder.svg
new file mode 100644
index 0000000..ff5dc92
--- /dev/null
+++ b/gnome-shell/46/workspace-placeholder.svg
@@ -0,0 +1,119 @@
+
+
diff --git a/gnome-shell/meson.build b/gnome-shell/meson.build
index a29de09..55a6b74 100644
--- a/gnome-shell/meson.build
+++ b/gnome-shell/meson.build
@@ -21,3 +21,9 @@ install_subdir('45',
exclude_files: 'meson.build',
strip_directory : false
)
+
+install_subdir('46',
+ install_dir: join_paths(get_option('datadir'), 'gradience', 'shell'),
+ exclude_files: 'meson.build',
+ strip_directory : false
+)