stable-diffusion-webui/style.css

1832 lines
40 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* temporary fix to load default gradio font in frontend instead of backend */
@import url('/webui-assets/css/sourcesanspro.css');
/* temporary fix to hide gradio crop tool until it's fixed https://github.com/gradio-app/gradio/issues/3810 */
div.gradio-image button[aria-label="Edit"] {
display: none;
}
/* general gradio fixes */
:root, .dark{
--checkbox-label-gap: 0.25em 0.1em;
--section-header-text-size: 12pt;
--block-background-fill: transparent;
}
.block.padded:not(.gradio-accordion) {
padding: 0 !important;
}
div.gradio-container{
max-width: unset !important;
}
.hidden{
display: none !important;
}
.invisible {
visibility: hidden !important;
}
.compact{
background: transparent !important;
padding: 0 !important;
}
div.form{
border-width: 0;
box-shadow: none;
background: transparent;
overflow: visible;
gap: 0.5em;
}
.block.gradio-dropdown,
.block.gradio-slider,
.block.gradio-checkbox,
.block.gradio-textbox,
.block.gradio-radio,
.block.gradio-checkboxgroup,
.block.gradio-number,
.block.gradio-colorpicker {
border-width: 0 !important;
box-shadow: none !important;
}
div.gradio-group, div.styler{
border-width: 0 !important;
background: none;
}
.gap.compact{
padding: 0;
gap: 0.2em 0;
}
div.compact{
gap: 1em;
}
.gradio-dropdown label span:not(.has-info),
.gradio-textbox label span:not(.has-info),
.gradio-number label span:not(.has-info)
{
margin-bottom: 0;
}
.gradio-dropdown ul.options{
z-index: 3000;
min-width: fit-content;
max-width: inherit;
white-space: nowrap;
}
@media (pointer:fine) {
.gradio-dropdown ul.options li.item {
padding: 0.05em 0;
}
}
.gradio-dropdown ul.options li.item.selected {
background-color: var(--neutral-100);
}
.dark .gradio-dropdown ul.options li.item.selected {
background-color: var(--neutral-900);
}
.gradio-dropdown div.wrap.wrap.wrap.wrap{
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
.gradio-dropdown:not(.multiselect) .wrap-inner.wrap-inner.wrap-inner{
flex-wrap: unset;
}
.gradio-dropdown .single-select{
white-space: nowrap;
overflow: hidden;
}
.gradio-dropdown .token-remove.remove-all.remove-all{
display: none;
}
.gradio-dropdown.multiselect .token-remove.remove-all.remove-all{
display: flex;
}
.gradio-slider input[type="number"]{
width: 6em;
}
.block.gradio-checkbox {
margin: 0.75em 1.5em 0 0;
}
.gradio-html div.wrap{
height: 100%;
}
div.gradio-html.min{
min-height: 0;
}
.block.gradio-gallery{
background: var(--input-background-fill);
}
.gradio-container .prose a, .gradio-container .prose a:visited{
color: unset;
text-decoration: none;
}
a{
font-weight: bold;
cursor: pointer;
}
/* gradio 3.39 puts a lot of overflow: hidden all over the place for an unknown reason. */
div.gradio-container, .block.gradio-textbox, div.gradio-group, div.gradio-dropdown{
overflow: visible !important;
}
/* align-items isn't enough and elements may overflow in Safari. */
.unequal-height {
align-content: flex-start;
}
/* general styled components */
.gradio-button.tool{
max-width: 2.2em;
min-width: 2.2em !important;
height: 2.4em;
align-self: end;
line-height: 1em;
border-radius: 0.5em;
}
.gradio-button.secondary-down{
background: var(--button-secondary-background-fill);
color: var(--button-secondary-text-color);
}
.gradio-button.secondary-down, .gradio-button.secondary-down:hover{
box-shadow: 1px 1px 1px rgba(0,0,0,0.25) inset, 0px 0px 3px rgba(0,0,0,0.15) inset;
}
.gradio-button.secondary-down:hover{
background: var(--button-secondary-background-fill-hover);
color: var(--button-secondary-text-color-hover);
}
button.custom-button{
border-radius: var(--button-large-radius);
padding: var(--button-large-padding);
font-weight: var(--button-large-text-weight);
border: var(--button-border-width) solid var(--button-secondary-border-color);
background: var(--button-secondary-background-fill);
color: var(--button-secondary-text-color);
font-size: var(--button-large-text-size);
display: inline-flex;
justify-content: center;
align-items: center;
transition: var(--button-transition);
box-shadow: var(--button-shadow);
text-align: center;
}
div.block.gradio-accordion {
border: 1px solid var(--block-border-color) !important;
border-radius: 8px !important;
margin: 2px 0;
padding: 8px 8px;
}
input[type="checkbox"].input-accordion-checkbox{
vertical-align: sub;
margin-right: 0.5em;
}
/* txt2img/img2img specific */
.block.token-counter{
position: absolute;
display: inline-block;
right: 1em;
min-width: 0 !important;
width: auto;
z-index: 100;
top: -0.75em;
}
.block.token-counter-visible{
display: block !important;
}
.block.token-counter span{
background: var(--input-background-fill) !important;
box-shadow: 0 0 0.0 0.3em rgba(192,192,192,0.15), inset 0 0 0.6em rgba(192,192,192,0.075);
border: 2px solid rgba(192,192,192,0.4) !important;
border-radius: 0.4em;
}
.block.token-counter.error span{
box-shadow: 0 0 0.0 0.3em rgba(255,0,0,0.15), inset 0 0 0.6em rgba(255,0,0,0.075);
border: 2px solid rgba(255,0,0,0.4) !important;
}
.block.token-counter div{
display: inline;
}
.block.token-counter span{
padding: 0.1em 0.75em;
}
[id$=_subseed_show]{
min-width: auto !important;
flex-grow: 0 !important;
display: flex;
}
[id$=_subseed_show] label{
margin-bottom: 0.65em;
align-self: end;
}
[id$=_seed_extras] > div{
gap: 0.5em;
}
.html-log .comments{
padding-top: 0.5em;
}
.html-log .comments:empty{
padding-top: 0;
}
.html-log .performance {
font-size: 0.85em;
color: #444;
display: flex;
}
.html-log .performance p{
display: inline-block;
}
.html-log .performance p.time, .performance p.vram, .performance p.time abbr, .performance p.vram abbr {
margin-bottom: 0;
color: var(--block-title-text-color);
}
.html-log .performance p.time {
}
.html-log .performance p.vram {
margin-left: auto;
}
.html-log .performance .measurement{
color: var(--body-text-color);
font-weight: bold;
}
#txt2img_generate, #img2img_generate {
min-height: 4.5em;
}
#txt2img_generate, #img2img_generate {
min-height: 4.5em;
}
.generate-box-compact #txt2img_generate, .generate-box-compact #img2img_generate {
min-height: 3em;
}
@media screen and (min-width: 2500px) {
#txt2img_gallery, #img2img_gallery {
min-height: 768px;
}
}
.gradio-gallery .thumbnails img {
object-fit: scale-down !important;
}
#txt2img_actions_column, #img2img_actions_column {
gap: 0.5em;
}
#txt2img_tools, #img2img_tools{
gap: 0.4em;
}
.interrogate-col{
min-width: 0 !important;
max-width: fit-content;
gap: 0.5em;
}
.interrogate-col > button{
flex: 1;
}
.generate-box{
position: relative;
}
.gradio-button.generate-box-skip, .gradio-button.generate-box-interrupt, .gradio-button.generate-box-interrupting{
position: absolute;
width: 50%;
height: 100%;
display: none;
background: #b4c0cc;
}
.gradio-button.generate-box-skip:hover, .gradio-button.generate-box-interrupt:hover, .gradio-button.generate-box-interrupting:hover{
background: #c2cfdb;
}
.gradio-button.generate-box-interrupt, .gradio-button.generate-box-interrupting{
left: 0;
border-radius: 0.5rem 0 0 0.5rem;
}
.gradio-button.generate-box-skip{
right: 0;
border-radius: 0 0.5rem 0.5rem 0;
}
#img2img_scale_resolution_preview.block{
display: flex;
align-items: end;
}
#txtimg_hr_finalres .resolution, #img2img_scale_resolution_preview .resolution{
font-weight: bold;
}
#txtimg_hr_finalres div.pending, #img2img_scale_resolution_preview div.pending {
opacity: 1;
transition: opacity 0s;
}
.inactive{
opacity: 0.5;
}
[id$=_column_batch]{
min-width: min(13.5em, 100%) !important;
}
div.dimensions-tools{
min-width: 1.6em !important;
max-width: fit-content;
flex-direction: column;
place-content: center;
}
div#extras_scale_to_tab div.form{
flex-direction: row;
}
#img2img_sketch, #img2maskimg, #inpaint_sketch {
overflow: overlay !important;
resize: auto;
background: var(--panel-background-fill);
z-index: 5;
}
.image-buttons > .form{
justify-content: center;
}
.infotext {
overflow-wrap: break-word;
}
#img2img_column_batch{
align-self: end;
margin-bottom: 0.9em;
}
#img2img_unused_scale_by_slider{
visibility: hidden;
width: 0.5em;
max-width: 0.5em;
min-width: 0.5em;
}
div.toprow-compact-stylerow{
margin: 0.5em 0;
}
div.toprow-compact-tools{
min-width: fit-content !important;
max-width: fit-content;
}
/* settings */
#quicksettings {
align-items: end;
}
#quicksettings > div, #quicksettings > fieldset{
max-width: 36em;
width: fit-content;
flex: 0 1 fit-content;
padding: 0;
border: none;
box-shadow: none;
background: none;
}
#quicksettings > div.gradio-dropdown{
min-width: 24em !important;
}
#settings{
display: block;
}
#settings > div{
border: none;
margin-left: 10em;
padding: 0 var(--spacing-xl);
}
#settings > div.tab-nav{
float: left;
display: block;
margin-left: 0;
width: 10em;
}
#settings > div.tab-nav button{
display: block;
border: none;
text-align: left;
white-space: initial;
padding: 4px;
}
#settings > div.tab-nav .settings-category{
display: block;
margin: 1em 0 0.25em 0;
font-weight: bold;
text-decoration: underline;
cursor: default;
user-select: none;
}
#settings_result{
height: 1.4em;
margin: 0 1.2em;
}
table.popup-table{
background: var(--body-background-fill);
color: var(--body-text-color);
border-collapse: collapse;
margin: 1em;
border: 4px solid var(--body-background-fill);
}
table.popup-table td{
padding: 0.4em;
border: 1px solid rgba(128, 128, 128, 0.5);
max-width: 36em;
}
table.popup-table .muted{
color: #aaa;
}
table.popup-table .link{
text-decoration: underline;
cursor: pointer;
font-weight: bold;
}
.ui-defaults-none{
color: #aaa !important;
}
#settings span{
color: var(--body-text-color);
}
#settings .gradio-textbox, #settings .gradio-slider, #settings .gradio-number, #settings .gradio-dropdown, #settings .gradio-checkboxgroup, #settings .gradio-radio{
margin-top: 0.75em;
}
#settings span .settings-comment {
display: inline
}
.settings-comment a{
text-decoration: underline;
}
.settings-comment .info{
opacity: 0.75;
}
.settings-comment .info ol{
margin: 0.4em 0 0.8em 1em;
}
#sysinfo_download a.sysinfo_big_link{
font-size: 24pt;
}
#sysinfo_download a{
text-decoration: underline;
}
#sysinfo_validity{
font-size: 18pt;
}
#settings .settings-info{
max-width: 48em;
border: 1px dotted #777;
margin: 0;
padding: 1em;
}
/* live preview */
.progressDiv{
position: absolute;
height: 20px;
background: #b4c0cc;
border-radius: 3px !important;
top: -14px;
left: 0px;
width: 100%;
}
.progress-container{
position: relative;
}
[id$=_results].mobile{
margin-top: 28px;
}
.dark .progressDiv{
background: #424c5b;
}
.progressDiv .progress{
width: 0%;
height: 20px;
background: #0060df;
color: white;
font-weight: bold;
line-height: 20px;
padding: 0 8px 0 0;
text-align: right;
border-radius: 3px;
overflow: visible;
white-space: nowrap;
padding: 0 0.5em;
}
.livePreview{
position: absolute;
z-index: 300;
background: var(--background-fill-primary);
width: 100%;
height: 100%;
}
.livePreview img{
position: absolute;
object-fit: contain;
width: 100%;
height: calc(100% - 60px); /* to match gradio's height */
}
/* fullscreen popup (ie in Lora's (i) button) */
.popup-metadata{
color: black;
background: white;
display: inline-block;
padding: 1em;
white-space: pre-wrap;
}
.global-popup{
display: flex;
position: fixed;
z-index: 1001;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
}
.global-popup *{
box-sizing: border-box;
}
.global-popup-close:before {
content: "×";
position: fixed;
right: 0.25em;
top: 0;
cursor: pointer;
color: white;
font-size: 32pt;
}
.global-popup-close{
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(20, 20, 20, 0.95);
}
.global-popup-inner{
display: inline-block;
margin: auto;
padding: 2em;
z-index: 1001;
max-height: 90%;
max-width: 90%;
}
/* fullpage image viewer */
#lightboxModal{
display: none;
position: fixed;
z-index: 1001;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgba(20, 20, 20, 0.95);
user-select: none;
-webkit-user-select: none;
flex-direction: column;
}
.modalControls {
display: flex;
position: absolute;
right: 0px;
left: 0px;
gap: 1em;
padding: 1em;
background-color:rgba(0,0,0,0);
z-index: 1;
transition: 0.2s ease background-color;
}
.modalControls:hover {
background-color:rgba(0,0,0, var(--sd-webui-modal-lightbox-toolbar-opacity));
}
.modalClose {
margin-left: auto;
}
.modalControls span{
color: white;
text-shadow: 0px 0px 0.25em black;
font-size: 35px;
font-weight: bold;
cursor: pointer;
width: 1em;
}
.modalControls span:hover, .modalControls span:focus{
color: #999;
text-decoration: none;
}
#lightboxModal > img {
display: block;
margin: auto;
width: auto;
}
#lightboxModal > img.modalImageFullscreen{
object-fit: contain;
height: 100%;
width: 100%;
min-height: 0;
}
.modalPrev,
.modalNext {
cursor: pointer;
position: absolute;
top: 50%;
width: auto;
padding: 16px;
margin-top: -50px;
color: white;
font-weight: bold;
font-size: 20px;
transition: 0.6s ease;
border-radius: 0 3px 3px 0;
user-select: none;
-webkit-user-select: none;
}
.modalNext {
right: 0;
border-radius: 3px 0 0 3px;
}
.modalPrev:hover,
.modalNext:hover {
background-color: rgba(0, 0, 0, 0.8);
}
#imageARPreview {
position: absolute;
top: 0px;
left: 0px;
border: 2px solid red;
background: rgba(255, 0, 0, 0.3);
z-index: 900;
pointer-events: none;
display: none;
}
@media (pointer: fine) {
.modalPrev:hover,
.modalNext:hover,
.modalControls:hover ~ .modalPrev,
.modalControls:hover ~ .modalNext,
.modalControls:hover .cursor {
opacity: 1;
}
.modalPrev,
.modalNext,
.modalControls .cursor {
opacity: var(--sd-webui-modal-lightbox-icon-opacity);
}
}
/* context menu (ie for the generate button) */
#context-menu{
z-index:9999;
position:absolute;
display:block;
padding:0px 0;
border:2px solid #a55000;
border-radius:8px;
box-shadow:1px 1px 2px #CE6400;
width: 200px;
}
.context-menu-items{
list-style: none;
margin: 0;
padding: 0;
}
.context-menu-items a{
display:block;
padding:5px;
cursor:pointer;
}
.context-menu-items a:hover{
background: #a55000;
}
/* extensions */
#tab_extensions table{
border-collapse: collapse;
}
#tab_extensions table td, #tab_extensions table th{
border: 1px solid #ccc;
padding: 0.25em 0.5em;
}
#tab_extensions table input[type="checkbox"]{
margin-right: 0.5em;
appearance: checkbox;
}
#tab_extensions button{
max-width: 16em;
}
#tab_extensions input[disabled="disabled"]{
opacity: 0.5;
}
.extension-tag{
font-weight: bold;
font-size: 95%;
}
#available_extensions .info{
margin: 0;
}
#available_extensions .info{
margin: 0.5em 0;
display: flex;
margin-top: auto;
opacity: 0.80;
font-size: 90%;
}
#available_extensions .date_added{
margin-right: auto;
display: inline-block;
}
#available_extensions .star_count{
margin-left: auto;
display: inline-block;
}
/* extensions tab table row hover highlight */
#extensions tr:hover td,
#config_state_extensions tr:hover td,
#available_extensions tr:hover td {
background: rgba(0, 0, 0, 0.15);
}
.dark #extensions tr:hover td ,
.dark #config_state_extensions tr:hover td ,
.dark #available_extensions tr:hover td {
background: rgba(255, 255, 255, 0.15);
}
/* replace original footer with ours */
footer {
display: none !important;
}
#footer{
text-align: center;
}
#footer div{
display: inline-block;
}
#footer .versions{
font-size: 85%;
opacity: 0.85;
}
/* extra networks UI */
.extra-page > div.gap{
gap: 0;
}
.extra-page-prompts{
margin-bottom: 0;
}
.extra-page-prompts.extra-page-prompts-active{
margin-bottom: 1em;
}
.extra-networks > div.tab-nav{
min-height: 2.7rem;
}
.extra-networks > div > [id *= '_extra_']{
margin: 0.3em;
}
.extra-networks .tab-nav .search,
.extra-networks .tab-nav .sort
{
margin: 0.3em;
align-self: center;
width: auto;
}
.extra-networks .tab-nav .search {
width: 16em;
max-width: 16em;
}
.extra-networks .tab-nav .sort {
width: 12em;
max-width: 12em;
}
#txt2img_extra_view, #img2img_extra_view {
width: auto;
}
.extra-network-pane .nocards{
margin: 1.25em 0.5em 0.5em 0.5em;
}
.extra-network-pane .nocards h1{
font-size: 1.5em;
margin-bottom: 1em;
}
.extra-network-pane .nocards li{
margin-left: 0.5em;
text-align: left;
}
.extra-network-pane .card .button-row{
display: inline-flex;
visibility: hidden;
color: white;
position: absolute;
right: 0;
z-index: 1;
}
.extra-network-pane .card:hover .button-row{
visibility: visible;
}
.extra-network-pane .card-button{
color: white;
width: 1.5em;
text-shadow: 2px 2px 3px black;
color: white;
padding: 0.25em 0.1em;
font-size: 2rem;
}
.extra-network-pane .copy-path-button::before {
content: "⎘";
}
.extra-network-pane .metadata-button::before{
content: "🛈";
}
.extra-network-pane .edit-button::before{
content: "🛠";
}
.extra-network-pane .card-button:hover{
color: red;
}
.standalone-card-preview.card .preview{
position: absolute;
object-fit: cover;
width: 100%;
height:100%;
}
.extra-network-pane .card, .standalone-card-preview.card{
display: inline-block;
margin: 0.5rem;
width: 16rem;
height: 24rem;
box-shadow: 0 0 5px rgba(128, 128, 128, 0.5);
border-radius: 0.2rem;
position: relative;
background-size: auto 100%;
background-position: center;
overflow: hidden;
cursor: pointer;
background-image: url('./file=html/card-no-preview.png')
}
.extra-network-pane .card:hover{
box-shadow: 0 0 2px 0.3em rgba(0, 128, 255, 0.35);
}
.extra-network-pane .card .actions .additional{
display: none;
}
.extra-network-pane .card .actions{
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 0.5em;
background: rgba(0,0,0,0.5);
box-shadow: 0 0 0.25em 0.25em rgba(0,0,0,0.5);
text-shadow: 0 0 0.2em black;
}
.extra-network-pane .card .actions *{
color: white;
}
.extra-network-pane .card .actions .name{
font-size: 1.7em;
font-weight: bold;
line-break: anywhere;
}
.extra-network-pane .card .actions .description {
display: block;
max-height: 3em;
white-space: pre-wrap;
line-height: 1.1;
}
.extra-network-pane .card .actions .description:hover {
max-height: none;
}
.extra-network-pane .card .actions:hover .additional{
display: block;
}
.extra-network-pane .card ul{
margin: 0.25em 0 0.75em 0.25em;
cursor: unset;
}
.extra-network-pane .card ul a{
cursor: pointer;
}
.extra-network-pane .card ul a:hover{
color: red;
}
.extra-network-pane .card .preview{
position: absolute;
object-fit: cover;
width: 100%;
height:100%;
}
div.block.gradio-box.edit-user-metadata {
width: 56em;
background: var(--body-background-fill);
padding: 2em !important;
}
.edit-user-metadata .extra-network-name{
font-size: 18pt;
color: var(--body-text-color);
}
.edit-user-metadata .file-metadata{
color: var(--body-text-color);
}
.edit-user-metadata .file-metadata th{
text-align: left;
}
.edit-user-metadata .file-metadata th, .edit-user-metadata .file-metadata td{
padding: 0.3em 1em;
overflow-wrap: anywhere;
word-break: break-word;
}
.edit-user-metadata .wrap.translucent{
background: var(--body-background-fill);
}
.edit-user-metadata .gradio-highlightedtext span{
word-break: break-word;
}
.edit-user-metadata-buttons{
margin-top: 1.5em;
}
div.block.gradio-box.popup-dialog, .popup-dialog {
width: 56em;
background: var(--body-background-fill);
padding: 2em !important;
}
div.block.gradio-box.popup-dialog > div:last-child, .popup-dialog > div:last-child{
margin-top: 1em;
}
div.block.input-accordion{
}
.input-accordion-extra{
flex: 0 0 auto !important;
margin: 0 0.5em 0 auto;
}
div.accordions > div.input-accordion{
min-width: fit-content !important;
}
div.accordions > div.gradio-accordion .label-wrap span{
white-space: nowrap;
margin-right: 0.25em;
}
div.accordions{
gap: 0.5em;
}
div.accordions > div.input-accordion.input-accordion-open{
flex: 1 auto;
flex-flow: column;
}
/* sticky right hand columns */
#img2img_results, #txt2img_results, #extras_results {
position: sticky;
top: 0.5em;
}
body.resizing {
cursor: col-resize !important;
}
body.resizing * {
pointer-events: none !important;
}
body.resizing .resize-handle {
pointer-events: initial !important;
}
.resize-handle {
position: relative;
cursor: col-resize;
grid-column: 2 / 3;
min-width: 16px !important;
max-width: 16px !important;
height: 100%;
}
.resize-handle::after {
content: '';
position: absolute;
top: 0;
bottom: 0;
left: 7.5px;
border-left: 1px dashed var(--border-color-primary);
}
/* ========================= */
.clusterize-scroll {
width: 100%;
height: 100%;
/* Use scroll instead of auto so that content size doesn't change when there is no content. */
overflow: clip scroll;
}
.clusterize-content {
flex: 1;
outline: 0;
/* need to manually set the gap to 0 to fix item dimension calcs. */
gap: 0;
counter-reset: clusterize-counter;
padding: var(--spacing-md);
}
.clusterize-extra-row {
margin-top: 0 !important;
margin-bottom: 0 !important;
}
.clusterize-extra-row.clusterize-keep-parity {
display: none;
}
.clusterize-no-data, .clusterize-error {
width: 100%;
text-align: center;
color: var(--input-placeholder-color) !important;
}
.extra-network-pane {
display: flex;
flex-direction: column;
flex-wrap: nowrap;
height: calc(100vh - 24rem);
resize: vertical;
min-height: 52rem;
overflow: hidden;
}
.extra-network-content {
position: relative;
display: flex;
flex-wrap: nowrap;
width: 100%;
height: 100%;
}
.extra-network-content--container {
display: flex;
flex-wrap: nowrap;
width: 100%;
height: 100%;
flex-direction: column;
gap: var(--spacing-sm);
}
.extra-network-content--dirs-view {
flex: 0 1 min-content;
flex-flow: row wrap;
max-height: 20%;
gap: var(--spacing-sm);
overflow: clip auto;
border: 1px solid var(--block-border-color);
padding: var(--spacing-md);
}
.extra-network-content--cards {
flex: 1;
flex-direction: row;
min-height: 0; /* prevent children from oversizing this container */
}
.extra-network-content.resize-handle-col {
display: flex;
flex-direction: column;
overflow: auto;
}
/* Can be simplified using :has but this is only recently supported in firefox. */
.resize-handle-row.resize-handle-hidden .resize-handle {
display: none;
}
/* Can be simplified using :has but this is only recently supported in firefox. */
.resize-handle-row.resize-handle-hidden {
display: flex !important;
}
/* Only recently supported in firefox. Switch to this eventually to simplify code.
.resize-handle-row:has(> .resize-handle-col.hidden) {
display: flex !important;
}
.resize-handle-row:has(> .resize-handle-col.hidden)>.resize-handle {
display: none;
}
*/
.extra-network-tree {
display: flex;
border: 1px solid var(--block-border-color);
}
.extra-network-cards {
display: flex;
border: 1px solid var(--block-border-color);
}
.extra-network-controls-div {
margin-left: auto !important;
}
.extra-network-controls {
display: flex;
flex-wrap: wrap;
flex-direction: row;
margin-bottom: var(--spacing-sm);
}
.extra-network-controls--container {
display: flex;
flex-direction: column;
margin-left: var(--spacing-xxl);
margin-right: var(--spacing-xxl);
}
.extra-network-controls--header {
flex: 1;
text-align: center;
color: var(--input-placeholder-color);
padding: 0;
margin: 0;
border-bottom: var(--input-border-width) solid var(--input-placeholder-color);
line-height: var(--text-sm);
}
.extra-network-controls--buttons {
display: flex;
flex-direction: row;
flex: 1;
gap: 0 var(--spacing-sm);
place-items: center stretch;
justify-content: space-evenly;
}
.extra-network-control {
background: transparent;
border: var(--input-border-width) solid transparent;
border-radius: var(--input-radius);
box-sizing: border-box;
cursor: pointer;
user-select: none;
}
.extra-network-control--icon {
width: var(--text-xxl);
height: var(--text-xxl);
color: var(--input-placeholder-color);
background: transparent;
margin: var(--spacing-sm);
}
.extra-network-control:hover {
background: var(--button-secondary-background-fill-hover);
}
.extra-network-control:active {
background: var(--button-secondary-background-fill);
}
.extra-network-control:active .extra-network-control--icon {
color: var(--button-secondary-text-color-hover);
}
.extra-network-control[data-selected] .extra-network-control--icon {
color: var(--button-secondary-text-color);
}
/* ==== SEARCH INPUT ==== */
.extra-network-control--search {
align-self: end;
display: flex;
flex-direction: row;
outline: var(--input-border-width) solid var(--input-border-color);
border-radius: var(--input-radius);
align-items: center;
justify-content: center;
gap: var(--spacing-sm);
box-sizing: border-box;
background: var(--input-background-fill);
}
/* Add outline to the contianer when the inner search-text <input> has focus. */
.extra-network-control--search:focus-within {
outline: calc(var(--input-border-width) * 2) solid var(--input-border-color-focus);
}
/* Search icon on left of container. */
.extra-network-control--search-icon {
user-select: none;
color: var(--input-placeholder-color);
width: var(--input-text-size);
height: var(--input-text-size);
margin-left: var(--input-padding);
}
/* circle with X icon on right of container used to clear input. */
.extra-network-control--search-clear-icon {
user-select: none;
cursor: pointer;
color: var(--input-placeholder-color);
width: var(--input-text-size);
height: var(--input-text-size);
}
/* <input> text in container. */
.extra-network-control--search .extra-network-control--search-text {
display: flex;
color: var(--body-text-color);
background: transparent;
font-weight: var(--input-text-weight);
font-size: var(--input-text-size);
line-height: var(--line-sm);
padding: var(--input-padding) var(--spacing-sm) var(--input-padding) var(--spacing-sm);
margin: 0;
border: none;
outline: none;
}
/* Make "clear" button visible when user has entered text in search-text <input>. */
.extra-network-control--search .extra-network-control--search-text:not(:placeholder-shown)+.extra-network-control--search-clear {
visibility: visible;
}
/* "Clear" button on right of container. Invisible until user enters text in <input>. */
.extra-network-control--search .extra-network-control--search-clear {
visibility: hidden;
border-radius: 0 var(--input-radius) var(--input-radius) 0;
border: var(--input-border-width) solid transparent;
transition: background var(--button-transition);
user-select: none;
cursor: pointer;
align-self: stretch;
/* forces button to fill vertical */
padding: var(--input-padding);
}
.extra-network-control--search .extra-network-control--search-clear:hover {
color: var(--button-secondary-background-fill-hover);
}
.extra-network-control--search .extra-network-control--search-clear:hover .extra-network-control--search-clear-icon {
color: var(--button-secondary-text-color-hover);
}
/* Customize behavior or sort direction button icon. */
.extra-network-control--sort-dir[data-sort-dir="ascending"] .extra-network-control--sort-dir-icon-ascending {
fill: var(--button-secondary-text-color);
stroke: var(--button-secondary-text-color);
}
.extra-network-control--sort-dir[data-sort-dir="ascending"] .extra-network-control--sort-dir-icon-descending {
stroke: var(--input-placeholder-color);
}
.extra-network-control--sort-dir[data-sort-dir="descending"] .extra-network-control--sort-dir-icon-descending {
fill: var(--button-secondary-text-color);
stroke: var(--button-secondary-text-color);
}
.extra-network-control--sort-dir[data-sort-dir="descending"] .extra-network-control--sort-dir-icon-ascending {
stroke: var(--input-placeholder-color);
}
/* ==== ICONS ==== */
.extra-network-control--refresh:hover .extra-network-control--icon {
animation: extra-network-control--refresh-keyframe-rotate 3s infinite;
transform-origin: 50% 50%;
transform-box: fill-box;
color: var(--button-secondary-text-color);
}
@keyframes extra-network-control--refresh-keyframe-rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
/* BUTTON ELEMENTS */
.tree-list-item {
display: grid;
grid-auto-rows: 1fr;
grid-template-columns: auto 1fr;
position: relative;
width: 100%;
padding: 0;
margin: 0;
user-select: none;
border: none;
}
/* <button> */
.tree-list-item button {
display: grid;
flex: 1;
width: 100%;
padding: 0 !important;
margin: 0 !important;
user-select: none;
grid-template-rows: min-content;
grid-template-areas: "leading-action leading-visual label trailing-visual trailing-action";
grid-template-columns: min-content min-content minmax(calc(var(--body-text-size) * 1), auto) min-content min-content;
grid-gap: var(--spacing-sm);
place-items: center stretch;
text-align: center;
}
.tree-list-item:hover {
-webkit-transition: all 0.05s ease-in-out;
transition: all 0.05s ease-in-out;
background: var(--button-secondary-background-fill-hover);
}
.tree-list-item button > span {
font-size: var(--button-large-text-size);
color: var(--button-secondary-text-color);
}
/* ==== CHEVRON ICON ACTIONS ==== */
/* Define the animation for the arrow when it is clicked. */
.tree-list-item-action--chevron {
height: var(--button-large-text-size);
width: var(--button-large-text-size);
background: transparent;
margin: 0 !important;
padding: 0 !important;
-ms-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
transition: transform 0.1s ease;
z-index: 0;
}
.tree-list-item[data-expanded] .tree-list-item-action--chevron {
-ms-transform: rotate(135deg);
-webkit-transform: rotate(135deg);
transform: rotate(135deg);
}
.ctrl-pressed:not(.shift-pressed) .tree-list-item-action--chevron:hover {
-ms-transform: rotate(135deg);
-webkit-transform: rotate(135deg);
transform: rotate(135deg);
}
.shift-pressed:not(.ctrl-pressed) .tree-list-item-action--chevron:hover {
-ms-transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
}
.tree-list-item-action--chevron .chevron-icon-single,
.tree-list-item-action--chevron .chevron-icon-double {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
transition: all 0.1s ease;
}
.tree-list-item-action--chevron .chevron-icon-single {
opacity: 1;
stroke: var(--input-placeholder-color);
}
:is(.ctrl-pressed:not(.shift-pressed), .shift-pressed:not(.ctrl-pressed)) .tree-list-item-action--chevron:hover .chevron-icon-double {
opacity: 1;
stroke: var(--button-primary-border-color);
}
:is(.ctrl-pressed:not(.shift-pressed), .shift-pressed:not(.ctrl-pressed)) .tree-list-item-action--chevron:hover .chevron-icon-single,
:not(.ctrl-pressed:not(.shift-pressed), .shift-pressed:not(.ctrl-pressed)) .tree-list-item-action--chevron .chevron-icon-double {
opacity: 0;
}
/* Text for button. */
.tree-list-item-label {
position: relative;
grid-area: label;
padding-left: 0.25em;
text-align: start;
}
/* Text for button truncated. */
.tree-list-item-label--truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* Icon for button. */
.tree-list-item-visual {
pointer-events: none;
align-items: right;
}
/* Icon for button when it is before label. */
.tree-list-item-visual--leading {
grid-area: leading-visual;
width: var(--button-large-text-size);
text-align: right;
}
/* Icon for button when it is after label. */
.tree-list-item-visual--trailing {
grid-area: trailing-visual;
width: var(--button-large-text-size);
text-align: right;
}
/* Dropdown arrow for button. */
.tree-list-item-action--leading {
grid-area: leading-action;
}
.tree-list-item--file .tree-list-item-action--leading {
visibility: hidden;
}
/* Allow trailing action to overlap previous columns when area is too small. */
.tree-list-item-action--trailing {
z-index: 10;
grid-area: 1 / label / 1 / trailing-action;
justify-self: end;
padding-left: var(--spacing-sm);
}
/* Force background color on hover to hide any overlapped column content. */
.tree-list-item:hover .tree-list-item-action--trailing {
background: var(--button-secondary-background-fill-hover);
}
.tree-list-item .button-row {
display: flex;
visibility: hidden;
flex-direction: row;
align-items: center;
place-content: center;
gap: var(--spacing-sm);
box-sizing: border-box;
margin: 0;
margin-right: var(--spacing-sm);
}
.tree-list-item:hover .button-row {
visibility: visible;
}
.tree-list-item .card-button {
width: 100%;
height: 100%;
text-shadow: var(--shadow-drop);
font-size: var(--button-large-text-size);
color: var(--button-secondary-text-color);
padding: 0;
margin: 0;
}
/* Custom scrollbar style. Only works on chromium based browsers. */
.styled-scrollbar::-webkit-scrollbar {
background: transparent;
width: var(--text-lg);
}
.styled-scrollbar::-webkit-scrollbar-track {
background: transparent;
background-clip: content-box;
}
.styled-scrollbar::-webkit-scrollbar-thumb {
background: var(--border-color-primary);
border-radius: var(--radius-xl);
border: calc(var(--button-border-width) * 4) solid var(--background-fill-primary);
}
.styled-scrollbar::-webkit-scrollbar-button {
display: none;
}
/* Long-press buttons. Wipe L->R effect when button is held, then toggles color. */
.extra-network-dirs-view-button {
position: relative;
overflow: hidden;
z-index: 0;
user-select: none;
}
.extra-network-dirs-view-button:not(.pressed):hover {
-webkit-transition: all 0.05s ease-in-out;
transition: all 0.05s ease-in-out;
background: var(--button-secondary-background-fill-hover);
}
.extra-network-dirs-view-button[data-selected] {
background: var(--button-secondary-background-fill);
}
.extra-network-dirs-view-button[data-selected]:not(.pressed):hover {
-webkit-transition: all 0.05s ease-in-out;
transition: all 0.05s ease-in-out;
background: var(--button-secondary-background-fill-hover);
}
.extra-network-dirs-view-button.recurse {
background: var(--button-primary-background-fill);
border-color: var(--button-primary-border-color);
}
.extra-network-dirs-view-button.recurse:not(.pressed):hover {
-webkit-transition: all 0.05s ease-in-out;
transition: all 0.05s ease-in-out;
background: var(--button-primary-background-fill-hover);
}
.extra-network-dirs-view-button::after {
position: absolute;
content: "";
top: 0;
left: 0;
width: 0;
height: 100%;
transition: all 0.35s cubic-bezier(0.215, 0.61, 0.355, 1);
z-index: -1;
}
.extra-network-dirs-view-button:not(.recurse)::after {
background: var(--button-secondary-background-fill-hover);
}
.extra-network-dirs-view-button.recurse::after {
background: var(--button-primary-background-fill-hover);
}
.extra-network-dirs-view-button.pressed::after {
width: 100%;
transition: all 0.8s cubic-bezier(0.215, 0.61, 0.355, 1);
}
.extra-network-dirs-view-button[data-selected] {
outline: var(--spacing-xs) solid var(--button-primary-border-color);
outline-offset: calc(-1 * var(--spacing-xs));
}
.tree-list-item {
position: relative;
overflow: hidden;
z-index: 0;
user-select: none;
}
.tree-list-item:not(.pressed):hover {
-webkit-transition: all 0.05s ease-in-out;
transition: all 0.05s ease-in-out;
background: var(--button-secondary-background-fill-hover);
}
.tree-list-item[data-selected] {
background: var(--button-secondary-background-fill);
}
.tree-list-item.pressed:hover {
-webkit-transition: all 0.05s ease-in-out;
transition: all 0.05s ease-in-out;
background: var(--button-secondary-background-fill);
}
.tree-list-item::after {
position: absolute;
content: "";
top: 0;
left: 0;
width: 0;
height: 100%;
background: var(--button-secondary-background-fill-hover);
transition: all 0.35s cubic-bezier(0.215, 0.61, 0.355, 1);
z-index: -1;
}
.tree-list-item.pressed::after {
width: 100%;
transition: all 0.8s cubic-bezier(0.215, 0.61, 0.355, 1);
}
.tree-list-item.recurse .tree-list-item-action--chevron .chevron-icon-single {
stroke: var(--button-primary-border-color);
}
.tree-list-item-indent {
height: 100%;
position: relative;
display: inline-block;
}
.tree-list-item-indent > * {
display: inline-block;
position: relative;
width: 1em;
height: 100%;
}
.tree-list-item-indent > *::after {
content: "";
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 50%;
border-left: 1px solid var(--border-color-primary);
}
.tree-list-item-indent > *[data-selected]::after {
border-left: 1px solid var(--button-primary-border-color);
}
.extra-network-list-splash {
display: block;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
z-index: 99;
background: var(--body-background-fill);
padding: var(--block-label-padding);
text-align: center;
}