1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2024-12-24 00:34:04 +00:00
transmission/web/assets/css/transmission-app.scss

1674 lines
32 KiB
SCSS

@use 'sass:color';
@use 'sass:math';
// Colors related to torrent status
$blue-100: #dbedff;
$blue-200: #c8e1ff;
$blue-300: #79b8ff;
$blue-700: #044289;
$green-100: #dcffe4;
$green-200: #bef5cb;
$green-300: #85e89d;
$green-500: #28a745;
$green-700: #176f2c;
$grey-500: #828282;
$grey-700: #373737;
$grey-800: #292929;
$grey-900: #191919;
$pink-300: #f692ce;
$pink-700: #b93a86;
$red-500: #d73a49;
$white: #fff;
$yellow-300: #ffea7f;
$yellow-700: #dbab09;
$nice-grey: #f8f8f8;
$nice-grey-darker: #f0f0f0;
$dark-mode-black: #121212;
$default-accent-color: #fff8c5;
$default-accent-color-dark: #2e2e2e;
$default-border-dark: #575757;
$default-border-light: #aeaeae;
// Z-INDEX ENUM
// $z-index-progressbar: 1;
$z-index-popup: 2;
// ICONS -- see assets/img/README.md for sources and license details
// Are you a designer? New icon PRs welcomed!
$image-alt-speed-disabled: '../img/modern-tortoise.png';
$image-alt-speed-enabled: '../img/modern-tortoise-blue.png';
$image-baseline: '../img/horizontal-rule.svg';
$image-chevron-dn: '../img/chevron-down.svg';
$image-chevron-up: '../img/chevron-up.svg';
$image-lock-fill: '../img/lock-fill.svg';
$image-magnet: '../img/magnet.svg';
$image-pause-circle-active: '../img/pause-circle-active.svg';
$image-pause-circle-idle: '../img/pause-circle-idle.svg';
$image-play-circle-active: '../img/play-circle-active.svg';
$image-play-circle-idle: '../img/play-circle-idle.svg';
/// MIXINS
@mixin for-phone-only {
@media (max-width: 599px) {
@content;
}
}
@mixin for-tablet-portrait-up {
@media (min-width: 600px) {
@content;
}
}
@mixin button {
border: 1px solid var(--color-border);
cursor: pointer;
display: inline-block;
padding: 3px;
user-select: none;
}
/// GLOBAL
:root {
--color-fg-error: #{$red-500};
--color-fg-port-closed: #{$red-500};
--color-fg-port-open: #{$green-500};
--color-progressbar-background-2: #{$grey-500};
--color-progressbar-verify-1: #{$pink-300};
--color-progressbar-verify-2: #{$pink-700};
--color-progressbar-magnet-1: #{$yellow-300};
--color-progressbar-magnet-2: #{$yellow-700};
--color-progressbar-magnet-paused-1: #{$default-accent-color};
--color-progressbar-magnet-paused-2: #{$grey-500};
--color-progressbar-leech-paused-1: #{$blue-200};
--color-progressbar-leech-paused-2: #{$grey-500};
--color-progressbar-leech-queued-1: #{$blue-100};
--color-progressbar-leech-queued-2: #{$blue-300};
--color-progressbar-leech-1: #{$blue-300};
--color-progressbar-leech-2: #{$blue-700};
--color-progressbar-seed-paused-1: #{$green-200};
--color-progressbar-seed-paused-2: #{$grey-500};
--color-progressbar-seed-queued-1: #{$green-100};
--color-progressbar-seed-queued-2: #{$green-300};
--color-progressbar-seed-1: #{$green-300};
--color-progressbar-seed-2: #{$green-700};
color-scheme: light dark;
@media (prefers-color-scheme: dark) {
--color-bg-hover: #{$nice-grey};
--color-fg-primary: #fff;
--color-bg-primary: #{$grey-800};
--color-bg-odd: #{$grey-900};
--color-bg-even: #{$grey-800};
--color-bg-menu: #{$grey-800};
--color-fg-secondary: #{$nice-grey};
--color-fg-on-popup: #{$nice-grey};
--color-fg-disabled: #{$nice-grey};
--color-bg-popup: #{$grey-800};
--color-bg-warn: #cf6679;
--color-fg-warn: #{$dark-mode-black};
--color-border: #{$nice-grey};
--color-border-selected: #d0d7de;
--color-fg-tertiary: #{$grey-500};
--color-toolbar-background: #{$grey-800};
--color-inspector-background: #{$grey-800};
--color-inspector-tabs: #{$nice-grey};
--color-bg-selected: #{$default-accent-color-dark};
--color-bg-tabs: #{$grey-700};
--color-progressbar-background-1: #426389;
--color-default-border: #{$default-border-dark};
}
@media (prefers-color-scheme: light) {
--color-bg-hover: #{$nice-grey};
--color-fg-primary: #404040;
--color-bg-primary: #fff;
--color-bg-even: #{$white};
--color-bg-odd: #{$nice-grey};
--color-bg-menu: #{$nice-grey};
--color-fg-on-popup: #{$grey-900};
--color-bg-popup: #{$white};
--color-fg-secondary: #{$grey-500};
--color-border: #{$grey-500};
--color-border-selected: #d0d7de;
--color-fg-tertiary: #{$grey-500};
--color-bg-warn: #e4606d5b;
--color-fg-warn: #cf212e;
--color-fg-disabled: #{$grey-500};
--color-toolbar-background: #{$nice-grey};
--color-inspector-background: #{$white};
--color-bg-tabs: #{$nice-grey-darker};
--color-inspector-tabs: #{$nice-grey};
--color-bg-selected: #{$default-accent-color};
--color-progressbar-background-1: #{$nice-grey};
--color-default-border: #{$default-border-light};
--color-dialog-border: #{$nice-grey};
}
}
html,
body {
color: var(--color-fg-primary);
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,
Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
height: 100%;
margin: 0;
}
img {
border: 0;
}
a {
color: var(--color-fg-primary);
outline: 0;
text-decoration: underline;
}
.hidden {
display: none;
}
.even {
background-color: var(--color-bg-even);
}
.odd {
background-color: var(--color-bg-odd);
}
.mainwin {
display: flex;
flex-direction: column;
height: 100%;
position: relative;
> * {
margin: 0;
padding: 0;
}
}
.mainwin-workarea {
display: flex;
flex: 1;
flex-direction: row;
overflow: auto;
}
input {
border: 1px solid var(--color-border);
border-radius: 3px;
padding: 4px 5px;
}
/// TOOLBAR
$toolbar-height-number: 50;
$toolbar-height: $toolbar-height-number * 1px;
#mainwin-toolbar {
align-items: center;
background: var(--color-toolbar-background);
border-bottom: 1px solid var(--color-default-border);
display: flex;
flex-direction: row;
height: $toolbar-height;
margin: 0;
width: 100%;
button {
background-color: transparent;
background-position: center;
background-repeat: no-repeat;
border: 0;
border-radius: 5px;
cursor: pointer;
height: $toolbar-height;
margin-right: 6px;
user-select: none;
width: $toolbar-height;
svg {
stroke: var(--color-fg-primary); // ios only? idk yet
}
&:disabled {
cursor: default;
opacity: 0.25;
}
}
> .toolbar-separator {
border-left: 1px solid var(--color-default-border);
height: 25px;
margin: 0 6px 0 0;
}
:nth-last-child(2) {
border: 0;
flex-grow: 1;
}
}
.toolbar-icon {
stroke: var(--color-fg-primary);
}
#toolbar-inspector {
svg {
color: var(--color-fg-primary);
}
}
#toolbar-overflow {
margin-right: 4px;
svg {
fill: var(--color-fg-primary);
height: 36px;
width: 36px;
}
&.alt-speed-enabled {
background-image: url($image-alt-speed-enabled);
background-position: bottom left;
background-size: 20px;
}
}
/// FILTERBAR
.mainwin-filterbar {
align-items: center;
background: var(--color-toolbar-background);
border-bottom: 1px solid var(--color-default-border);
display: flex;
flex-direction: row;
height: 30px;
width: 100%;
@include for-phone-only {
padding: 5px 10px;
:not(select):not(input) {
display: none;
}
#torrent-search {
padding: 5px;
}
}
> * {
margin-right: 5px;
padding: 0 5px;
}
}
$speed-icon-size: 12px;
.speed-up-icon {
background-image: url($image-chevron-up);
background-repeat: no-repeat;
background-size: $speed-icon-size $speed-icon-size;
height: $speed-icon-size;
width: $speed-icon-size;
}
.speed-dn-icon {
background-image: url($image-chevron-dn);
background-repeat: no-repeat;
background-size: $speed-icon-size $speed-icon-size;
height: $speed-icon-size;
width: $speed-icon-size;
}
/// TORRENT CONTAINER
$pauseresume-size-number: 20;
$pauseresume-size: $pauseresume-size-number * 1px;
$progressbar-border-number: 1;
$progressbar-height-number: 14;
$popup-top: 61px; // TODO: ugly that this is hardcoded
.flex {
flex-grow: 1;
}
#torrent-container {
flex-grow: 1;
left: 0;
margin: 0;
overflow: auto;
-webkit-overflow-scrolling: touch;
padding: 0;
right: 0;
}
.torrent-container {
background-color: $white;
}
$app-image: '../img/box.svg';
$audio-image: '../img/music.svg';
$folder-image: '../img/folder.svg';
$font-image: '../img/type.svg';
$image-image: '../img/image.svg';
$package-image: '../img/package.svg';
$text-image: '../img/file-text.svg';
$video-image: '../img/film.svg';
@mixin mime-icon-compact($mime-icon) {
&[data-icon-multifile='true'] {
background-image: url($folder-image);
background-position: center;
background-size: 16px;
}
}
@mixin mime-icon($mime-icon) {
// background-image: url($mime-icon);
background-color: var(--color-fg-primary);
-webkit-mask-image: url($mime-icon);
mask-image: url($mime-icon);
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
&[data-icon-multifile='true'] {
-webkit-mask-image: url($mime-icon), url($folder-image);
mask-image: url($mime-icon), url($folder-image);
-webkit-mask-position: top left, bottom right;
mask-position: top left, bottom right;
-webkit-mask-repeat: no-repeat, no-repeat;
mask-repeat: no-repeat, no-repeat;
-webkit-mask-size: 16px, 16px;
mask-size: 16px, 16px;
}
}
.torrent-list {
cursor: pointer;
list-style-type: none;
margin: 0;
padding: 0;
text-align: left;
width: 100%;
.torrent {
border-bottom: 1px solid var(--color-default-border);
user-select: none;
.icon {
// color the background svg fill
background-color: var(--color-fg-primary);
background-position: center, top left;
&[data-icon-mime-type='audio'] {
@include mime-icon($audio-image);
}
&[data-icon-mime-type='application'] {
@include mime-icon($app-image);
}
&[data-icon-mime-type='font'] {
@include mime-icon($font-image);
}
&[data-icon-mime-type='image'] {
@include mime-icon($image-image);
}
&[data-icon-mime-type='model'] {
@include mime-icon($package-image);
}
&[data-icon-mime-type='text'] {
@include mime-icon($text-image);
}
&[data-icon-mime-type='video'] {
@include mime-icon($video-image);
}
}
&.compact {
$icon-size-num: 16;
$icon-size: $icon-size-num * 1px;
align-items: center;
display: flex;
flex-direction: row-reverse;
.icon {
flex-shrink: 0;
height: $icon-size;
-webkit-mask-size: $icon-size, $icon-size-num * 0.5px;
mask-size: $icon-size, $icon-size-num * 0.5px;
width: $icon-size;
&[data-icon-multifile='true'] {
@include mime-icon($folder-image);
}
}
> * {
margin: 5px;
}
}
&:not(.compact) {
$icon-size-num: 32;
$icon-size: $icon-size-num * 1px;
align-items: center;
display: grid;
grid-column-gap: 12px;
grid-template-areas:
'icon name labels'
'icon peers peers'
'icon progressbar progressbar'
'icon progress-text progress-text';
grid-template-columns: $icon-size auto 1fr;
padding: 6px 12px;
.icon {
background-size: $icon-size, $icon-size-num * 0.5px;
grid-area: icon;
height: $icon-size;
width: $icon-size;
}
.torrent-name {
color: var(--color-fg-primary);
grid-area: name;
&.paused {
color: var(--color-fg-disabled);
}
}
.torrent-labels {
grid-area: labels;
}
.torrent-peer-details {
grid-area: peers;
}
.torrent-progress {
display: flex;
flex-direction: row;
grid-area: progressbar;
}
.torrent-progress-details {
grid-area: progress-text;
}
> * {
margin: 1px 0;
}
}
&.selected {
background-color: var(--color-bg-selected);
}
}
.icon {
background-position: center;
background-repeat: no-repeat;
}
.torrent-pauseresume-button {
background-position: center center;
background-repeat: no-repeat;
background-size: $pauseresume-size;
margin-left: math.floor(math.div($pauseresume-size-number, 2)) * 1px;
width: $pauseresume-size;
&[data-action='pause'] {
background-image: url($image-pause-circle-idle);
&:active,
&:hover {
background-image: url($image-pause-circle-active);
}
}
&[data-action='resume'] {
background-image: url($image-play-circle-idle);
&:active,
&:hover {
background-image: url($image-play-circle-active);
}
}
}
.torrent-progress-details.error,
.torrent-peer-details.error {
color: var(--color-fg-error);
}
.torrent-name {
font-weight: bold;
margin-bottom: 2px;
margin-top: 2px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
&.compact {
font-size: 1em;
font-weight: normal;
}
&:not(.paused) {
color: var(--color-fg-primary);
}
}
.torrent-labels {
font-size: x-small;
font-weight: normal;
margin-bottom: 2px;
margin-top: 2px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
&.compact {
flex: 1;
font-size: x-small;
}
}
.torrent-progress-details,
.torrent-peer-details {
color: var(--color-fg-primary);
font-size: x-small;
}
.torrent-progress-bar {
background-repeat: no-repeat;
border-color: var(--color-border-selected);
border-radius: 3px;
border-style: solid;
border-width: 1px;
height: ($progressbar-height-number - ($progressbar-border-number * 2)) *
1px;
&.full {
flex-grow: 1;
margin: 2px 0;
}
&.compact {
min-width: 50px;
width: 50px;
}
@function progressbar-gradient($color1, $color2) {
@return linear-gradient(to bottom, $color1, $color2 80%);
}
@mixin progressbar-background($color1, $color2) {
background: progressbar-gradient($color1, $color2),
progressbar-gradient(
var(--color-progressbar-background-1),
var(--color-progressbar-background-1)
);
background-repeat: no-repeat;
}
&.leech.paused {
@include progressbar-background(
var(--color-progressbar-leech-paused-1),
var(--color-progressbar-leech-paused-1)
);
}
&.leech.queued {
@include progressbar-background(
var(--color-progressbar-leech-queued-1),
var(--color-progressbar-leech-queued-1)
);
}
&.leech {
@include progressbar-background(
var(--color-progressbar-leech-1),
var(--color-progressbar-leech-1)
);
}
&.magnet.paused {
@include progressbar-background(
var(--color-progressbar-magnet-paused-1),
var(--color-progressbar-magnet-paused-1)
);
}
&.magnet {
@include progressbar-background(
var(--color-progressbar-magnet-1),
var(--color-progressbar-magnet-1)
);
}
&.seed.paused {
@include progressbar-background(
var(--color-progressbar-seed-paused-1),
var(--color-progressbar-seed-paused-1)
);
}
&.seed.queued {
@include progressbar-background(
var(--color-progressbar-seed-queued-1),
var(--color-progressbar-seed-queued-1)
);
}
&.seed {
@include progressbar-background(
var(--color-progressbar-seed-1),
var(--color-progressbar-seed-1)
);
}
&.verify {
@include progressbar-background(
var(--color-progressbar-verify-1),
var(--color-progressbar-verify-1)
);
}
}
}
/// PREFERENCES DIALOG
@include for-phone-only {
html,
body {
overflow: hidden;
}
input[type='checkbox'] {
height: 20px;
width: 20px;
}
}
#inspector,
#prefs-dialog {
@include for-phone-only {
left: 0;
}
@include for-tablet-portrait-up {
border-left: 1px solid var(--color-default-border);
width: 570px;
}
}
#prefs-dialog {
$background-color: var(--color-inspector-background);
background: $background-color;
border: 0;
bottom: 0;
box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014,
0 9px 28px 8px #0000000d;
position: absolute;
right: 0;
top: $popup-top;
z-index: $z-index-popup;
.tabs-page {
grid-column-gap: 8px;
grid-row-gap: 5px;
grid-template-columns: 1fr 1fr;
margin: 20px;
&:not(.hidden) {
display: grid;
}
.section-label {
font-weight: bold;
grid-column: span 2;
// margin-left: -20px;
padding-bottom: 5px;
&:not(:first-of-type) {
margin-top: 20px;
}
}
}
.alt-speed-section-label {
background: transparent url($image-alt-speed-enabled) no-repeat;
background-position: left;
background-position-y: 4px;
background-size: 20px;
padding-left: 22px;
}
:disabled,
.disabled {
color: var(--color-fg-disabled);
}
#alt-times-div,
#autostart-div,
#port-forwarding,
#randomize-port,
#suffix-div,
#use-dht-div,
#use-lpd-div,
#use-pex-div,
#utp-enabled,
.alt-speed-label {
grid-column: span 2;
}
#default-trackers {
height: 300px;
}
.blocklist-size-label,
.blocklist-update-button,
.register-handler-button,
.port-status {
grid-column: 2 / 3;
}
.blocklist-size-label {
font-size: smaller;
}
.blocklist-size-number {
font-weight: bolder;
}
.port-status-label {
display: inline-block;
font-weight: bold;
margin-left: 5px;
&[data-open='true'] {
color: var(--color-fg-port-open);
}
&[data-open='false'] {
color: var(--color-fg-port-closed);
}
}
#default-trackers,
.default-trackers-label {
grid-column: 1 / 3;
}
.alt-speed-label {
font-size: smaller;
font-style: lighter;
// nudge it up next to the section label
margin: -10px 0 10px;
}
}
#prefs-dialog.ui-tabs .ui-tabs-panel {
padding: 0;
user-select: none;
}
.prefs-section {
text-align: left;
> * {
padding: 0 8px 8px;
}
.title {
color: var(--color-fg-primary);
font-size: larger;
font-weight: bold;
margin-bottom: 10px;
padding-left: 0;
}
.row {
.key {
float: left;
padding-top: 3px;
> * {
margin-left: 0;
}
}
.value {
margin-left: 150px;
> * {
width: 100%;
}
}
}
}
/// TABS
.tabs-container {
align-items: stretch;
background: var(--color-inspector-background);
bottom: 0;
display: flex;
flex-direction: column;
position: absolute;
right: 0;
top: $popup-top;
z-index: $z-index-popup;
@include for-phone-only {
left: 0;
}
@include for-tablet-portrait-up {
width: 550px;
}
}
.tabs-buttons {
align-self: center;
background-color: var(--color-bg-tabs);
border: 1px solid var(--color-border-selected);
border-radius: 6px;
display: flex;
margin: 10px 0;
button {
appearance: none;
border: 1px solid transparent;
border-radius: 6px;
color: var(--color-fg-primary);
}
}
.tabs-pages {
box-sizing: border-box;
flex: 1;
overflow-x: hidden;
overflow-y: auto;
@include for-phone-only {
padding: 0 8px 20px;
}
@include for-tablet-portrait-up {
padding: 0 20px 20px;
}
}
.tabs-button {
background-color: var(--color-bg-tabs);
border: 1px solid transparent;
font-size: 14px;
padding: 3px 8px;
&:active,
&:checked,
&.selected {
background-color: var(--color-bg-even);
border: 1px solid var(--color-fg-primary);
border-radius: 6px;
font-weight: 500;
}
}
/// INSPECTOR
#inspector {
box-shadow: 0 3px 6px rgba(58, 58, 58, 0.7);
}
.inspector-info-page {
font-size: 14px;
// TODO: this is (mostly) copied from prefs-dialog.
// can it be folded into a single set of rules?
grid-column-gap: 8px;
grid-row-gap: 8px;
grid-template-columns: auto 1fr;
margin: 20px;
padding: 12px;
&:not(.hidden) {
display: grid;
}
.section-label {
font-size: 16px;
font-weight: bold;
grid-column: span 2;
padding-bottom: 5px;
&:not(:first-of-type) {
margin-top: 20px;
}
}
label {
font-weight: 500;
}
:not(.section-label) {
// this section is not copied
overflow-x: hidden;
text-overflow: ellipsis;
}
}
.inspector-info-magnet {
button {
background-color: var(--color-border);
background-position: top;
background-repeat: no-repeat;
border: 0;
cursor: pointer;
height: 1rem;
-webkit-mask: url($image-magnet) no-repeat center / 14px;
mask: url($image-magnet) no-repeat center / 14px;
vertical-align: middle;
width: 1rem;
}
}
#inspector .tabs-button,
#prefs-dialog .tabs-button {
height: 30px;
margin: 0;
min-width: 40px;
}
#inspector-file-list {
margin: 0;
padding: 0;
.inspector-torrent-file-list-entry {
display: grid;
grid-column-gap: 5px;
grid-template-areas:
'check name priority'
'blank1 info blank2';
grid-template-columns: 20px 1fr 65px;
margin-bottom: 4px;
padding: 5px;
&.skip {
opacity: 0.5;
}
}
.file-wanted-control {
grid-area: check;
}
.inspector-torrent-file-list-entry-name {
color: var(--color-fg-primary);
cursor: pointer;
font-size: 14px;
grid-area: name;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.inspector-torrent-file-list-entry.skip
> .inspector-torrent-file-list-entry-name {
color: var(--color-fg-disabled);
}
.inspector-torrent-file-list-entry-progress {
color: var(--color-fg-secondary);
font-size: 12px;
grid-area: info;
}
.single-file .inspector-torrent-file-list-entry > .file-wanted-control,
.inspector-torrent-file-list-entry.complete > .file-wanted-control {
cursor: default;
}
}
#inspector-header {
margin: 8px 0;
}
#torrent-inspector-name {
font-size: large;
font-weight: bold;
}
#inspector-tiers-list {
color: var(--color-fg-primary);
margin: 0 10px;
padding: 0 12px;
.tier-list-row {
display: grid;
font-size: 12px;
grid-column-gap: 8px;
grid-row-gap: 4px;
margin-top: 8px;
}
.tier-list-torrent {
color: var(--color-fg-primary);
font-weight: bolder;
margin-left: -12px;
overflow-x: hidden;
padding-top: 20px;
text-overflow: ellipsis;
white-space: nowrap;
}
.tier-list-tracker {
font-size: 14px;
font-weight: bolder;
grid-column: span 2;
margin-top: 8px;
padding-bottom: 4px;
}
.tier-announce,
.tier-scrape,
.tier-state {
text-align: left;
}
.tier-downloads,
.tier-leechers,
.tier-seeders {
text-align: right;
}
}
// Peers Tab
.peer-list {
$table-border: 1px solid var(--color-default-border);
border: $table-border;
border-collapse: collapse;
cursor: default;
table-layout: fixed;
text-align: left;
width: 100%;
td,
th {
font-size: smaller;
padding: 5px;
}
td {
border: $table-border;
color: var(--color-fg-secondary);
// padding: 5px 10px;
}
.torrent-row td {
background: var(--color-default-border);
color: var(--color-fg-primary);
font-size: normal;
font-weight: bolder;
overflow-x: hidden;
padding: 10px;
text-overflow: ellipsis;
white-space: nowrap;
}
.encryption {
&[data-encrypted='true'] {
background-color: var(--color-border-selected);
-webkit-mask: url($image-lock-fill) no-repeat center / 14px;
mask: url($image-lock-fill) no-repeat center / 14px;
width: 10px;
}
}
.peer-address,
.percent-done,
.speed-down,
.speed-up {
text-align: right;
}
.percent-done {
width: 10%;
}
.speed-down,
.speed-up {
width: 15%;
}
.peer-address {
width: 25%;
}
.peer-app-name {
overflow-x: hidden;
text-overflow: ellipsis;
white-space: nowrap;
@include for-phone-only {
display: none;
}
@include for-tablet-portrait-up {
width: 25%;
}
}
.status {
cursor: pointer;
}
}
/// FILE PRIORITY BUTTONS
.file-priority-radiobox {
$size-number: 20;
$size: $size-number * 1px;
$halfsize: math.floor(math.div($size-number, 2)) * 1px;
grid-area: priority;
> * {
appearance: none;
background-color: var(--color-border-selected);
background-position: center;
background-repeat: no-repeat;
background-size: $halfsize, $size;
border: 1px solid var(--color-border);
height: $size;
margin: 0;
padding: 0;
width: $size;
}
> .low {
background-image: url($image-chevron-dn);
border-right-width: 0;
}
> .normal {
background-image: url($image-baseline);
}
> .high {
background-image: url($image-chevron-up);
border-left-width: 0;
}
//if input is checked then change the background color
> .checked {
background-color: var(--color-bg-hover);
}
}
/// CONTEXT MENU
.context-menu {
$disabled-color: var(--color-fg-disabled);
background-color: var(--color-bg-primary);
border-radius: 5px;
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.7);
color: var(--color-fg-on-popup);
padding: 10px 5px;
position: absolute;
z-index: 9999;
.context-menuitem {
font-size: 13px;
font-weight: 400;
list-style: none;
margin-right: 10px;
padding: 5px 15px;
&:hover:not(:disabled),
&:focus:not(:disabled) {
background-color: var(--color-bg-hover);
border-radius: 6px;
cursor: pointer;
font-weight: 500;
}
&:disabled {
color: $disabled-color;
cursor: none;
}
&.warning:hover {
background-color: var(--color-bg-warn);
color: var(--color-fg-warn);
}
}
}
.context-menu-separator {
border-bottom: 1px solid var(--color-fg-secondary);
margin-bottom: 10px;
padding-bottom: 10px;
}
/// OVERFLOW MENU
.overflow-menu {
background: var(--color-bg-popup);
border-radius: 5px;
box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014,
0 9px 28px 8px #0000000d;
color: var(--color-fg-on-popup);
min-width: 220px;
overflow: auto;
-webkit-overflow-scrolling: touch;
padding: 10px;
position: absolute;
right: 20px;
top: 50px;
z-index: $z-index-popup;
@include for-phone-only() {
height: 80vh;
}
// hide the fullscreen button unless we're on mobile
@include for-tablet-portrait-up {
#display-fullscreen-check,
#display-fullscreen-label {
display: none;
}
}
fieldset {
border: 0;
display: block;
margin: 8px 0;
}
fieldset ul {
margin: 0;
padding-left: 0;
li {
list-style-type: none;
}
a {
cursor: pointer;
}
}
.table-row {
align-items: center;
border-radius: 6px;
display: flex;
flex-direction: row;
padding: 3px 0;
}
legend {
color: var(--color-fg-primary);
font-weight: bolder;
margin: 12px 0 4px;
}
a,
button,
label {
display: inline-flex;
font-size: 1em;
width: 100%;
}
a,
button {
background: transparent;
border: 0;
cursor: pointer;
display: block;
padding: 4px 0;
text-align: left;
text-decoration: none;
width: 150px;
}
.input-and-label {
align-items: center;
display: inline-flex;
flex-direction: row;
}
#display-options {
display: flex;
flex-direction: column;
}
#speed-options {
display: flex;
flex-direction: column;
> .speed-up,
> .speed-down {
align-items: center;
display: flex;
flex-direction: row;
padding: 4px 0;
> label {
overflow: hidden;
width: 80px;
}
}
.alt-speed {
display: grid;
grid-column-gap: 5px;
grid-row-gap: 5px;
grid-template-areas:
'check lb'
'turtle values';
grid-template-columns: 22px 1fr;
margin-bottom: 4px;
}
#alt-speed-check {
grid-area: check;
&:checked ~ #alt-speed-image {
background-image: url($image-alt-speed-enabled);
background-position: left;
background-size: 22px;
}
&:not(:checked) ~ #alt-speed-image {
background-image: url($image-alt-speed-disabled);
background-size: 22px;
}
}
#alt-speed-image {
background-position: center;
background-repeat: no-repeat;
grid-area: turtle;
}
#alt-speed-label {
grid-area: lb;
}
#alt-speed-values-label {
font-size: small;
grid-area: values;
}
}
}
/// DIALOGS
$dialog-padding-number: 20;
$dialog-logo-padding-number: math.div($dialog-padding-number * 2, 3);
$logo-size: 64px;
@include for-phone-only {
.dialog-buttons {
padding-top: $dialog-logo-padding-number * 1px;
}
.dialog-container {
opacity: 96%;
position: absolute;
top: $popup-top;
width: 100%;
}
.dialog-logo {
padding-bottom: $dialog-logo-padding-number * 1px;
}
.dialog-window {
align-items: center;
display: flex;
flex-direction: column;
}
}
@include for-tablet-portrait-up {
.dialog-container {
min-width: 400px;
position: absolute;
top: $popup-top * 2;
}
.dialog-heading {
grid-area: heading;
}
.dialog-logo {
grid-area: icon;
padding-right: $dialog-logo-padding-number * 1px;
}
.dialog-window {
background-color: var(--color-bg-popup);
color: var(--color-fg-on-popup);
display: grid;
grid-column-gap: 12px;
grid-template-areas:
'icon heading'
'icon message'
'icon workarea'
'icon buttons';
grid-template-columns: $logo-size 1fr;
padding: 2px 12px;
}
}
.dialog-buttons {
display: flex;
float: right;
grid-area: buttons;
margin: 10px 0 0;
text-align: center;
button {
appearance: none;
background: var(--color-bg-primary);
border: 1px solid var(--color-default-border);
border-radius: 5px;
color: var(--color-fg-primary);
margin-left: 8px;
padding: 8px;
text-decoration: none;
}
}
.dialog-buttons-begin {
flex-grow: 1;
}
.dialog-buttons-end {
display: none;
}
dialog {
border: 0;
}
.dialog-container {
box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014,
0 9px 28px 8px #0000000d;
color: var(--color-fg-primary);
display: block;
padding: 0;
z-index: $z-index-popup;
@include for-tablet-portrait-up() {
border: 0;
border-radius: 8px;
max-width: 50%;
}
}
.dialog-heading {
align-items: center;
display: flex;
font-size: 1.2em;
font-weight: bold;
}
.dialog-logo {
background: transparent url('../img/logo.png') top left no-repeat;
height: $logo-size;
width: $logo-size;
}
.dialog-message {
grid-area: message;
margin: 10px 0 0;
}
.dialog-window {
background: var(--color-bg-primary);
border-radius: 8px;
padding: $dialog-padding-number * 1px;
}
.dialog-workarea {
display: flex;
flex-direction: column;
grid-area: workarea;
margin: 10px 0 0;
> * {
margin-bottom: 5px;
}
}
/// ABOUT DIALOG
.about-dialog {
max-width: initial;
}
.about-dialog .dialog-workarea > * {
margin-bottom: 10px;
}
.about-dialog-version-number {
margin-left: 4px;
}
.about-dialog-version-checksum {
font-size: small;
font-style: italic;
font-weight: normal;
margin-left: auto;
padding-left: 10px;
}
/// OPEN TORRENT DIALOG
.open-torrent {
input {
margin-bottom: 15px;
}
#auto-start-label {
margin-left: 5px;
}
}
/// HOTKEYS DIALOG
.shortcuts-dialog {
table {
border-collapse: collapse;
width: 100%;
}
th,
td {
border: 1px solid var(--color-border);
padding: 5px 10px;
}
}
/// RENAME DIALOG
#torrent-rename-name {
min-width: 400px;
}
/// SET-LOCATION DIALOG
#move-container #torrent-path {
min-width: 400px;
}
/// STATISTICS DIALOG
.tabs-pages,
.inspector-info-page,
.statistics-dialog {
.content {
column-gap: 16px;
display: grid;
grid-row-gap: 6px;
grid-template-columns: auto 1fr;
margin-top: 4px;
@include for-phone-only {
margin: 4px 0 16px;
}
@include for-tablet-portrait-up {
margin: 4px 16px 16px;
}
div {
word-break: break-word;
}
}
fieldset {
border: 0;
margin: 0;
padding: 0;
}
legend {
font-weight: bolder;
margin-bottom: 4px;
}
}
/// UPLOAD DIALOG
#free-space-text {
display: inline-block;
font-size: smaller;
font-style: italic;
}
#torrent-upload-frame {
border: 0;
display: block; /* Don't change this : safari forms won't target hidden frames (they open a new window) */
height: 0;
left: -1000px;
margin: 0;
padding: 0;
position: absolute;
top: -1000px;
width: 0;
}
.ui-menu {
width: 200px;
}