nosignal-shell/scss/sidebar.scss
2 * r + 2 * t 7a0c4fe6b4 sidebar: dashboard current desktop -> date
Put date instead of current desktop on dashboard
Date is more useful imo (especially for vertical bar)
2025-04-10 19:06:50 +10:00

1110 lines
28 KiB
SCSS

@use "sass:color";
@use "sass:list";
@use "scheme";
@use "lib";
@use "font";
@mixin notification($accent) {
.separator {
background-color: $accent;
}
.image {
@include lib.border($accent, 0.05);
}
}
@mixin button {
@include lib.element-decel;
background-color: color.change(scheme.$surface1, $alpha: 0.5);
&:hover,
&:focus {
background-color: color.change(scheme.$surface2, $alpha: 0.5);
}
&:active {
background-color: color.change(scheme.$overlay0, $alpha: 0.5);
}
&:disabled {
color: scheme.$subtext0;
}
}
@mixin button-active {
@include lib.element-decel;
background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 50%), $alpha: 0.5);
&:hover,
&:focus {
background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 30%), $alpha: 0.5);
}
&:active {
background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 20%), $alpha: 0.5);
}
}
@mixin media-button {
@include lib.element-decel;
&:disabled {
color: color.change(scheme.$overlay2, $alpha: 1);
}
&:hover,
&:focus {
color: color.mix(scheme.$subtext1, scheme.$subtext0, 50%);
}
&:active {
color: scheme.$subtext0;
}
}
.sidebar {
@include font.mono;
background-color: scheme.$mantle;
color: scheme.$text;
padding: lib.s(18) lib.s(20);
min-width: lib.s(380);
.pane {
@include lib.spacing(20, true);
}
.separator {
background-color: if(scheme.$light, scheme.$surface1, scheme.$overlay0);
margin: 0 lib.s(10);
}
.header-bar {
margin-bottom: lib.s(10);
@include lib.spacing;
& > :not(button) {
font-weight: bold;
font-size: lib.s(16);
}
& > button {
@include lib.element-decel;
@include lib.rounded(10);
padding: lib.s(3) lib.s(8);
&:disabled {
color: color.change(scheme.$overlay0, $alpha: 1);
}
&:hover,
&:focus {
color: scheme.$subtext0;
}
&:active {
color: color.change(scheme.$overlay2, $alpha: 1);
}
&.enabled {
$-base: color.change(scheme.$base, $alpha: 1);
background-color: scheme.$primary;
color: $-base;
&:hover,
&:focus {
background-color: color.mix(scheme.$primary, $-base, 80%);
}
&:active {
background-color: color.mix(scheme.$primary, $-base, 70%);
}
}
}
}
.empty {
color: scheme.$subtext0;
font-size: lib.s(18);
.icon {
font-size: lib.s(48);
}
}
.user {
@include lib.spacing(15);
.face {
@include lib.rounded(10);
background-position: center;
background-repeat: no-repeat;
background-size: cover;
min-width: lib.s(96);
min-height: lib.s(96);
font-size: lib.s(48);
font-weight: bold;
background-color: scheme.$base;
}
.details {
font-size: lib.s(14);
@include lib.spacing(8, true);
.name {
font-size: lib.s(18);
color: scheme.$text;
margin-bottom: lib.s(10);
}
$-colours: scheme.$yellow, scheme.$blue;
@for $i from 1 through list.length($-colours) {
:nth-child(#{$i + 1}) {
color: list.nth($-colours, $i);
}
}
}
}
.media {
@include lib.spacing(15);
.cover-art {
@include lib.rounded(10);
@include lib.element-decel;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
min-width: lib.s(128);
min-height: lib.s(128);
font-size: lib.s(64);
font-weight: bold;
background-color: scheme.$base;
color: scheme.$subtext0;
}
.details {
font-size: lib.s(14);
.title {
font-size: lib.s(16);
color: scheme.$text;
}
.artist {
color: scheme.$green;
}
.controls {
margin-top: lib.s(20);
margin-bottom: lib.s(5);
font-size: lib.s(24);
& > button {
@include media-button;
}
}
.slider {
@include lib.rounded(5);
@include lib.fluent-decel(1000ms);
min-height: lib.s(8);
background-color: scheme.$overlay0;
color: scheme.$subtext1;
}
.time {
margin-top: lib.s(5);
font-size: lib.s(13);
color: scheme.$subtext0;
}
}
}
.notification {
.wrapper {
padding-bottom: lib.s(10);
}
.inner {
@include lib.rounded(20);
background-color: color.change(scheme.$surface1, $alpha: 0.4);
&.low {
@include notification(if(scheme.$light, scheme.$surface1, scheme.$overlay0));
@if not scheme.$borders {
background-color: color.change(scheme.$surface0, $alpha: 0.4);
}
}
&.normal {
@include lib.border(scheme.$primary, if(scheme.$light, 0.5, 0.3));
@include notification(scheme.$primary);
}
&.critical {
@include lib.border(scheme.$error, 0.8);
@include notification(scheme.$error);
@if not scheme.$borders {
background-color: color.change(color.mix(scheme.$surface1, scheme.$error, 80%), $alpha: 0.4);
}
}
}
.actions {
@include lib.spacing;
& > button {
@include button;
@include lib.rounded(10);
padding: lib.s(5) lib.s(10);
}
}
}
.upcoming {
.list {
min-height: lib.s(300);
}
.day {
@include lib.spacing($vertical: true);
&:not(:first-child) {
margin-top: lib.s(20);
}
.date {
margin-left: lib.s(10);
}
.sublabel {
font-size: lib.s(14);
color: scheme.$subtext0;
}
.events {
@include lib.rounded(20);
background-color: color.change(scheme.$surface1, $alpha: 0.4);
padding: lib.s(10) lib.s(15);
@include lib.spacing(10, true);
}
.event {
@include lib.spacing(8);
}
.calendar-indicator {
@include lib.rounded(5);
min-width: lib.s(1);
$-colours: scheme.$red, scheme.$sapphire, scheme.$flamingo, scheme.$maroon, scheme.$pink, scheme.$sky,
scheme.$peach, scheme.$yellow, scheme.$green, scheme.$rosewater, scheme.$mauve, scheme.$teal,
scheme.$blue;
@for $i from 1 through list.length($-colours) {
&.calendar-#{$i} {
background-color: list.nth($-colours, $i);
}
}
}
}
}
.players {
.player {
@include lib.spacing(40, true);
.cover-art {
@include lib.rounded(10);
@include lib.element-decel;
@include lib.shadow(scheme.$mantle, $blur: 5, $spread: 2);
background-position: center;
background-repeat: no-repeat;
background-size: cover;
min-width: lib.s(256);
min-height: lib.s(256);
font-size: lib.s(96);
font-weight: bold;
background-color: scheme.$base;
color: scheme.$subtext0;
margin-top: lib.s(20);
}
.progress {
margin: 0 lib.s(40);
.slider {
@include lib.rounded(8);
@include lib.fluent-decel(1000ms);
min-height: lib.s(15);
background-color: scheme.$overlay0;
color: scheme.$subtext1;
}
.time {
margin-top: lib.s(5);
font-size: lib.s(13);
color: scheme.$subtext1;
}
}
.details {
font-size: lib.s(14);
margin-top: lib.s(20);
@include lib.spacing(3, true);
.title {
font-size: lib.s(18);
color: scheme.$text;
font-weight: bold;
}
.artist {
color: scheme.$green;
}
.album {
color: scheme.$subtext0;
}
}
.controls {
margin-top: lib.s(-20);
margin-bottom: lib.s(5);
button {
@include media-button;
// Cause some nerd font icons don't have the correct width
&.needs-adjustment {
padding-right: lib.s(5);
}
}
.playback {
font-size: lib.s(32);
@include lib.spacing(40);
}
.options {
margin: 0 lib.s(40);
margin-top: lib.s(-10);
font-size: lib.s(20);
@include lib.spacing(20);
}
}
}
.indicators {
@include lib.spacing(10);
& > button {
@include lib.rounded(1000);
@include lib.element-decel;
min-width: lib.s(10);
min-height: lib.s(10);
background-color: color.change(scheme.$overlay0, $alpha: 0.5);
&:hover,
&:focus {
background-color: color.change(scheme.$overlay1, $alpha: 0.5);
}
&:active {
background-color: color.change(scheme.$overlay2, $alpha: 0.5);
}
&.active {
background-color: color.change(scheme.$primary, $alpha: 0.9);
&:hover,
&:focus {
background-color: color.change(scheme.$primary, $alpha: 0.7);
}
&:active {
background-color: color.change(scheme.$primary, $alpha: 0.6);
}
}
}
}
}
.no-wp-prompt {
font-size: lib.s(16);
color: scheme.$error;
margin-top: lib.s(8);
}
.streams {
.list {
@include lib.spacing(10, true);
}
.stream {
@include lib.rounded(20);
@include lib.element-decel;
background-color: color.change(scheme.$surface1, $alpha: 0.4);
padding: lib.s(10) lib.s(15);
@include lib.spacing(5);
&.playing {
background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 50%), $alpha: 0.4);
}
.icon {
font-size: lib.s(28);
margin-right: lib.s(12);
}
.sublabel {
font-size: lib.s(14);
color: scheme.$subtext0;
}
trough {
@include lib.rounded(10);
min-width: lib.s(100);
min-height: lib.s(10);
background-color: color.change(scheme.$error, $alpha: 0.3);
fill {
@include lib.rounded(10);
background-color: color.change(scheme.$overlay0, $alpha: 1);
}
highlight {
@include lib.rounded(10);
background-color: scheme.$subtext1;
}
}
& > button {
@include media-button;
font-size: lib.s(18);
min-width: lib.s(20);
min-height: lib.s(20);
}
}
}
.device-selector {
@include lib.spacing(10, true);
.selector {
@include lib.rounded(20);
background-color: color.change(scheme.$surface1, $alpha: 0.4);
padding: lib.s(10) lib.s(15);
.icon {
font-size: lib.s(20);
}
.separator {
margin-bottom: lib.s(8);
margin-top: lib.s(5);
background-color: if(scheme.$light, scheme.$overlay1, scheme.$overlay0);
}
.list {
color: scheme.$subtext0;
@include lib.spacing(3, true);
}
.device {
@include lib.spacing;
}
.selected {
color: scheme.$text;
@include lib.spacing(10);
.icon {
font-size: lib.s(32);
}
.sublabel {
color: scheme.$subtext0;
}
}
button {
@include lib.element-decel;
&:hover,
&:focus {
color: scheme.$subtext1;
}
&:active {
color: scheme.$text;
}
}
}
.stream {
@include lib.rounded(20);
@include lib.element-decel;
background-color: color.change(scheme.$surface1, $alpha: 0.4);
padding: lib.s(10) lib.s(15);
@include lib.spacing(5);
&.playing {
background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 50%), $alpha: 0.4);
}
.icon {
font-size: lib.s(28);
margin-right: lib.s(12);
}
.sublabel {
font-size: lib.s(14);
color: scheme.$subtext0;
}
trough {
@include lib.rounded(10);
min-width: lib.s(100);
min-height: lib.s(10);
background-color: color.change(scheme.$error, $alpha: 0.3);
fill {
@include lib.rounded(10);
background-color: color.change(scheme.$overlay0, $alpha: 1);
}
highlight {
@include lib.rounded(10);
background-color: scheme.$subtext1;
}
}
& > button {
@include media-button;
font-size: lib.s(18);
min-width: lib.s(20);
min-height: lib.s(20);
}
}
}
.networks {
.list {
@include lib.spacing(10, true);
}
.network {
@include lib.rounded(20);
@include lib.element-decel;
background-color: color.change(scheme.$surface1, $alpha: 0.4);
padding: lib.s(10) lib.s(15);
@include lib.spacing(5);
&.connected {
background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 50%), $alpha: 0.4);
& > button {
@include button-active;
}
}
.icon {
font-size: lib.s(28);
margin-right: lib.s(12);
}
.sublabel {
font-size: lib.s(14);
color: scheme.$subtext0;
}
& > button {
@include button;
@include lib.rounded(1000);
@include font.icon;
font-size: lib.s(18);
min-width: lib.s(30);
min-height: lib.s(30);
}
}
}
.bluetooth {
.list {
@include lib.spacing(10, true);
}
.device {
@include lib.rounded(20);
@include lib.element-decel;
background-color: color.change(scheme.$surface1, $alpha: 0.4);
padding: lib.s(10) lib.s(15);
@include lib.spacing(5);
&.connected {
background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 50%), $alpha: 0.4);
& > button {
@include button-active;
}
}
.icon {
font-size: lib.s(28);
margin-right: lib.s(12);
}
.sublabel {
font-size: lib.s(14);
color: scheme.$subtext0;
}
& > button {
@include button;
@include lib.rounded(1000);
@include font.icon;
font-size: lib.s(18);
min-width: lib.s(30);
min-height: lib.s(30);
}
}
}
.updates {
.list {
@include lib.spacing(10, true);
}
.repo {
@include lib.rounded(20);
@include lib.element-decel;
background-color: color.change(scheme.$surface1, $alpha: 0.4);
padding: lib.s(10) lib.s(15);
@include lib.spacing(5);
.icon {
font-size: lib.s(28);
&:not(:last-child) {
margin-right: lib.s(12);
}
}
.sublabel {
font-size: lib.s(14);
color: scheme.$subtext0;
}
.body {
margin-top: lib.s(10);
font-size: lib.s(14);
}
}
}
.news {
min-height: lib.s(200);
.empty {
margin-top: lib.s(40);
}
.list {
@include lib.spacing(10, true);
}
.article {
@include lib.rounded(20);
@include lib.element-decel;
background-color: color.change(scheme.$surface1, $alpha: 0.4);
padding: lib.s(10) lib.s(15);
@include lib.spacing(5);
.icon {
font-size: lib.s(28);
&:not(:last-child) {
margin-right: lib.s(12);
}
}
.sublabel {
font-size: lib.s(14);
color: scheme.$subtext0;
}
.body {
margin-top: lib.s(10);
font-size: lib.s(14);
}
}
}
.headlines {
min-height: lib.s(200);
.empty {
margin-top: lib.s(40);
}
.list {
@include lib.spacing(10, true);
}
.category {
@include lib.rounded(20);
@include lib.element-decel;
background-color: color.change(scheme.$surface0, $alpha: 0.5);
padding: lib.s(10) lib.s(15);
@include lib.spacing(5);
.icon {
font-size: lib.s(28);
&:not(:last-child) {
margin-right: lib.s(12);
}
}
.sublabel {
font-size: lib.s(14);
color: scheme.$subtext0;
}
.body {
margin-top: lib.s(10);
font-size: lib.s(14);
@include lib.spacing(8, true);
}
}
.article {
@include lib.rounded(20);
@include lib.element-decel;
background-color: color.change(scheme.$surface1, $alpha: 0.3);
padding: lib.s(10) lib.s(15);
.article-body {
@include font.reading;
@include lib.element-decel;
font-size: lib.s(15);
margin-top: lib.s(10);
color: scheme.$subtext1;
& > :last-child {
margin-top: lib.s(8);
}
}
button:hover .article-body,
button:focus .article-body {
color: color.mix(scheme.$subtext0, scheme.$blue, 60%);
}
}
}
.time-date {
padding: lib.s(12) lib.s(8);
font-size: lib.s(48);
font-weight: bold;
color: scheme.$primary;
& > * {
@include lib.spacing(3);
}
.ampm {
font-size: lib.s(24);
font-weight: normal;
margin-top: lib.s(18);
color: scheme.$secondary;
}
.date {
font-size: lib.s(20);
color: scheme.$tertiary;
}
}
.calendar {
@include lib.rounded(20);
background-color: color.change(scheme.$surface1, $alpha: 0.4);
padding: lib.s(15);
.calendar-view {
@include lib.spacing(10, true);
.header {
@include lib.spacing(10);
& > button {
@include lib.rounded(1000);
@include lib.element-decel;
background-color: color.change(scheme.$surface2, $alpha: 0.4);
min-width: lib.s(28);
min-height: lib.s(28);
font-size: lib.s(18);
&:first-child {
padding: 0 lib.s(10);
}
&:hover,
&:focus {
background-color: color.change(scheme.$surface2, $alpha: 0.6);
}
&:active {
background-color: color.change(scheme.$surface2, $alpha: 0.8);
}
}
}
.weekdays {
@include lib.spacing(10);
& > label {
min-width: lib.s(40);
font-weight: bold;
color: scheme.$subtext1;
}
}
.month {
@include lib.spacing(10, true);
}
.week {
@include lib.spacing(10);
}
.day {
@include lib.rounded(1000);
@include lib.element-decel;
min-width: lib.s(40);
min-height: lib.s(40);
&.dim {
color: scheme.$subtext0;
}
&.today:not(.dim) {
background-color: scheme.$primary;
color: color.change(scheme.$base, $alpha: 1);
}
&:hover,
&:focus {
color: scheme.$subtext0;
}
&:active {
color: color.change(scheme.$overlay2, $alpha: 1);
}
&.dim {
color: scheme.$subtext0;
&:hover,
&:focus {
color: color.change(scheme.$overlay2, $alpha: 1);
}
&:active {
color: color.change(scheme.$overlay1, $alpha: 1);
}
}
&.today:not(.dim) {
background-color: scheme.$primary;
color: color.change(scheme.$base, $alpha: 1);
&:hover,
&:focus {
background-color: color.mix(scheme.$primary, scheme.$base, 80%);
}
&:active {
background-color: color.mix(scheme.$primary, scheme.$base, 70%);
}
}
label {
margin-top: lib.s(8);
}
.indicator {
@include lib.rounded(10);
@include lib.element-decel;
min-height: lib.s(3);
margin: 0 lib.s(8);
}
$-max: 5;
@for $i from 1 through $-max {
&.events-#{$i} {
$-colour: color.mix(scheme.$red, scheme.$green, calc(100% / $-max) * $i);
.indicator {
background-color: $-colour;
}
&:hover .indicator,
&:focus .indicator {
background-color: color.mix($-colour, scheme.$base, 80%);
}
&:active .indicator {
background-color: color.mix($-colour, scheme.$base, 70%);
}
&.dim .indicator {
background-color: color.mix($-colour, scheme.$base, 60%);
}
&.today:not(.dim) {
$-colour: color.mix($-colour, color.complement(scheme.$primary), 50%);
.indicator {
background-color: $-colour;
}
&:hover .indicator,
&:focus .indicator {
background-color: color.mix($-colour, scheme.$base, 80%);
}
&:active .indicator {
background-color: color.mix($-colour, scheme.$base, 70%);
}
}
}
}
}
}
.events {
@include lib.spacing(10, true);
.header {
font-weight: bold;
@include lib.spacing(10);
& > button {
@include lib.rounded(1000);
@include lib.element-decel;
min-width: lib.s(24);
min-height: lib.s(24);
&:hover,
&:focus {
color: scheme.$subtext0;
}
&:active {
color: color.change(scheme.$overlay2, $alpha: 1);
}
}
}
scrollable {
min-height: lib.s(315);
}
.date {
margin-left: lib.s(10);
}
.sublabel {
font-size: lib.s(14);
color: scheme.$subtext0;
}
.list {
padding: lib.s(5);
@include lib.spacing(10, true);
}
.event {
@include lib.spacing(8);
}
.calendar-indicator {
@include lib.rounded(5);
min-width: lib.s(1);
$-colours: scheme.$red, scheme.$sapphire, scheme.$flamingo, scheme.$maroon, scheme.$pink, scheme.$sky,
scheme.$peach, scheme.$yellow, scheme.$green, scheme.$rosewater, scheme.$mauve, scheme.$teal,
scheme.$blue;
@for $i from 1 through list.length($-colours) {
&.calendar-#{$i} {
background-color: list.nth($-colours, $i);
}
}
}
}
}
}