mirror of https://github.com/lllyasviel/Fooocus
1155 lines
23 KiB
CSS
1155 lines
23 KiB
CSS
/* based on https://github.com/AUTOMATIC1111/stable-diffusion-webui/blob/v1.6.0/style.css */
|
|
|
|
.loader-container {
|
|
display: flex; /* Use flex to align items horizontally */
|
|
align-items: center; /* Center items vertically within the container */
|
|
white-space: nowrap; /* Prevent line breaks within the container */
|
|
}
|
|
|
|
.loader {
|
|
border: 8px solid #f3f3f3; /* Light grey */
|
|
border-top: 8px solid #3498db; /* Blue */
|
|
border-radius: 50%;
|
|
width: 30px;
|
|
height: 30px;
|
|
animation: spin 2s linear infinite;
|
|
}
|
|
|
|
@keyframes spin {
|
|
0% { transform: rotate(0deg); }
|
|
100% { transform: rotate(360deg); }
|
|
}
|
|
|
|
/* Style the progress bar */
|
|
progress {
|
|
appearance: none; /* Remove default styling */
|
|
height: 20px; /* Set the height of the progress bar */
|
|
border-radius: 5px; /* Round the corners of the progress bar */
|
|
background-color: #f3f3f3; /* Light grey background */
|
|
width: 100%;
|
|
vertical-align: middle !important;
|
|
}
|
|
|
|
/* Style the progress bar container */
|
|
.progress-container {
|
|
margin-left: 20px;
|
|
margin-right: 20px;
|
|
flex-grow: 1; /* Allow the progress container to take up remaining space */
|
|
}
|
|
|
|
/* Set the color of the progress bar fill */
|
|
progress::-webkit-progress-value {
|
|
background-color: #3498db; /* Blue color for the fill */
|
|
}
|
|
|
|
progress::-moz-progress-bar {
|
|
background-color: #3498db; /* Blue color for the fill in Firefox */
|
|
}
|
|
|
|
/* Style the text on the progress bar */
|
|
progress::after {
|
|
content: attr(value '%'); /* Display the progress value followed by '%' */
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
color: white; /* Set text color */
|
|
font-size: 14px; /* Set font size */
|
|
}
|
|
|
|
/* Style other texts */
|
|
.loader-container > span {
|
|
margin-left: 5px; /* Add spacing between the progress bar and the text */
|
|
}
|
|
|
|
.progress-bar > .generating {
|
|
display: none !important;
|
|
}
|
|
|
|
.progress-bar{
|
|
height: 30px !important;
|
|
}
|
|
|
|
.progress-bar span {
|
|
text-align: right;
|
|
width: 215px;
|
|
}
|
|
div:has(> #positive_prompt) {
|
|
border: none;
|
|
}
|
|
|
|
#positive_prompt {
|
|
padding: 1px;
|
|
background: var(--background-fill-primary);
|
|
}
|
|
|
|
.type_row {
|
|
height: 84px !important;
|
|
}
|
|
|
|
.type_row_half {
|
|
height: 34px !important;
|
|
}
|
|
|
|
.refresh_button {
|
|
border: none !important;
|
|
background: none !important;
|
|
font-size: none !important;
|
|
box-shadow: none !important;
|
|
}
|
|
|
|
.advanced_check_row {
|
|
width: 100% !important;
|
|
max-width: 400px !important;
|
|
}
|
|
|
|
.min_check {
|
|
min-width: min(1px, 100%) !important;
|
|
}
|
|
|
|
.resizable_area {
|
|
resize: vertical;
|
|
overflow: auto !important;
|
|
}
|
|
|
|
|
|
|
|
.aspect_ratios label {
|
|
flex: calc(50% - 5px) !important;
|
|
}
|
|
|
|
.aspect_ratios label span {
|
|
white-space: nowrap !important;
|
|
}
|
|
|
|
.aspect_ratios label input {
|
|
margin-left: -5px !important;
|
|
}
|
|
|
|
.lora_enable label {
|
|
height: 100%;
|
|
}
|
|
|
|
.lora_enable label input {
|
|
margin: auto;
|
|
}
|
|
|
|
.lora_enable label span {
|
|
display: none;
|
|
}
|
|
|
|
@-moz-document url-prefix() {
|
|
.lora_weight input[type=number] {
|
|
width: 80px;
|
|
}
|
|
}
|
|
|
|
#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;
|
|
}
|
|
|
|
.canvas-tooltip-info {
|
|
position: absolute;
|
|
top: 28px;
|
|
left: 2px;
|
|
cursor: help;
|
|
background-color: rgba(0, 0, 0, 0.3);
|
|
width: 20px;
|
|
height: 20px;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
flex-direction: column;
|
|
|
|
z-index: 100;
|
|
}
|
|
|
|
.canvas-tooltip-info::after {
|
|
content: '';
|
|
display: block;
|
|
width: 2px;
|
|
height: 7px;
|
|
background-color: white;
|
|
margin-top: 2px;
|
|
}
|
|
|
|
.canvas-tooltip-info::before {
|
|
content: '';
|
|
display: block;
|
|
width: 2px;
|
|
height: 2px;
|
|
background-color: white;
|
|
}
|
|
|
|
.canvas-tooltip-content {
|
|
display: none;
|
|
background-color: #f9f9f9;
|
|
color: #333;
|
|
border: 1px solid #ddd;
|
|
padding: 15px;
|
|
position: absolute;
|
|
top: 40px;
|
|
left: 10px;
|
|
width: 250px;
|
|
font-size: 16px;
|
|
opacity: 0;
|
|
border-radius: 8px;
|
|
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
|
|
|
z-index: 100;
|
|
}
|
|
|
|
.canvas-tooltip:hover .canvas-tooltip-content {
|
|
display: block;
|
|
animation: fadeIn 0.5s;
|
|
opacity: 1;
|
|
}
|
|
|
|
@keyframes fadeIn {
|
|
from {opacity: 0;}
|
|
to {opacity: 1;}
|
|
}
|
|
|
|
.styler {
|
|
overflow:inherit !important;
|
|
}
|
|
|
|
.gradio-container{
|
|
overflow: visible;
|
|
max-width: none !important;
|
|
width: 100% !important;
|
|
}
|
|
|
|
/* Ensure full width utilization */
|
|
.gradio-container .contain {
|
|
max-width: none !important;
|
|
width: 100% !important;
|
|
padding: 0 1rem !important;
|
|
}
|
|
|
|
/* Make main layout responsive and full width */
|
|
.gradio-container .block {
|
|
width: 100% !important;
|
|
max-width: none !important;
|
|
}
|
|
|
|
/* Ensure rows use full width */
|
|
.gradio-container .row {
|
|
width: 100% !important;
|
|
gap: 1rem !important;
|
|
}
|
|
|
|
/* Optimize for full viewport width */
|
|
body {
|
|
margin: 0 !important;
|
|
padding: 0 !important;
|
|
}
|
|
|
|
.gradio-container {
|
|
min-width: 100vw !important;
|
|
}
|
|
|
|
/* 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,0.9);
|
|
}
|
|
.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;
|
|
}
|
|
|
|
#stylePreviewOverlay {
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
width: 128px;
|
|
height: 128px;
|
|
position: fixed;
|
|
top: 0px;
|
|
left: 0px;
|
|
border: solid 1px lightgrey;
|
|
transform: translate(-140px, 20px);
|
|
background-size: cover;
|
|
background-position: center;
|
|
background-color: rgba(0, 0, 0, 0.3);
|
|
border-radius: 5px;
|
|
z-index: 100;
|
|
transition: transform 0.1s ease, opacity 0.3s ease;
|
|
}
|
|
|
|
#stylePreviewOverlay.lower-half {
|
|
transform: translate(-140px, -140px);
|
|
}
|
|
|
|
/* scrollable box for style selections */
|
|
.contain .tabs {
|
|
height: 100%;
|
|
}
|
|
|
|
.contain .tabs .tabitem.style_selections_tab {
|
|
height: 100%;
|
|
}
|
|
|
|
.contain .tabs .tabitem.style_selections_tab > div:first-child {
|
|
height: 100%;
|
|
}
|
|
|
|
.contain .tabs .tabitem.style_selections_tab .style_selections {
|
|
min-height: 200px;
|
|
height: 100%;
|
|
}
|
|
|
|
.contain .tabs .tabitem.style_selections_tab .style_selections .wrap[data-testid="checkbox-group"] {
|
|
position: absolute; /* remove this to disable scrolling within the checkbox-group */
|
|
overflow: auto;
|
|
padding-right: 2px;
|
|
max-height: 100%;
|
|
}
|
|
|
|
.contain .tabs .tabitem.style_selections_tab .style_selections .wrap[data-testid="checkbox-group"] label {
|
|
/* max-width: calc(35% - 15px) !important; */ /* add this to enable 3 columns layout */
|
|
flex: calc(50% - 5px) !important;
|
|
}
|
|
|
|
.contain .tabs .tabitem.style_selections_tab .style_selections .wrap[data-testid="checkbox-group"] label span {
|
|
/* white-space:nowrap; */ /* add this to disable text wrapping (better choice for 3 columns layout) */
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
/* styles preview tooltip */
|
|
.preview-tooltip {
|
|
background-color: #fff8;
|
|
font-family: monospace;
|
|
text-align: center;
|
|
border-radius: 5px 5px 0px 0px;
|
|
display: none; /* remove this to enable tooltip in preview image */
|
|
}
|
|
|
|
#inpaint_canvas .canvas-tooltip-info {
|
|
top: 2px;
|
|
}
|
|
|
|
#inpaint_brush_color input[type=color]{
|
|
background: none;
|
|
}
|
|
|
|
/* =============================================================================
|
|
Configuration Section Styles
|
|
============================================================================= */
|
|
|
|
/* Configuration section accordions */
|
|
.config-section {
|
|
margin-bottom: 10px !important;
|
|
}
|
|
|
|
.config-section .label-wrap {
|
|
padding: 10px 15px !important;
|
|
background: var(--background-fill-secondary) !important;
|
|
border-radius: 8px !important;
|
|
}
|
|
|
|
.config-section .label-wrap:hover {
|
|
background: var(--background-fill-tertiary) !important;
|
|
}
|
|
|
|
/* Configuration labels */
|
|
.config-label {
|
|
display: block;
|
|
font-weight: 500;
|
|
margin-bottom: 8px;
|
|
color: var(--body-text-color);
|
|
font-size: 0.95em;
|
|
}
|
|
|
|
/* Folder display table */
|
|
.folder-display {
|
|
max-height: 150px;
|
|
overflow-y: auto;
|
|
border-radius: 6px;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.folder-display table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
}
|
|
|
|
.folder-display td {
|
|
padding: 8px 12px;
|
|
border-bottom: 1px solid var(--border-color-primary);
|
|
font-family: monospace;
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.folder-display tr:last-child td {
|
|
border-bottom: none;
|
|
}
|
|
|
|
/* Folder buttons */
|
|
.folder-btn {
|
|
min-width: 80px !important;
|
|
}
|
|
|
|
/* Reset buttons */
|
|
.reset-btn {
|
|
min-width: 100px !important;
|
|
background: var(--button-secondary-background-fill) !important;
|
|
}
|
|
|
|
.reset-btn:hover {
|
|
background: var(--button-secondary-background-fill-hover) !important;
|
|
}
|
|
|
|
.reset-btn-mini {
|
|
min-width: 40px !important;
|
|
max-width: 40px !important;
|
|
padding: 0 8px !important;
|
|
background: var(--button-secondary-background-fill) !important;
|
|
font-size: 1.1em !important;
|
|
}
|
|
|
|
.reset-btn-mini:hover {
|
|
background: var(--button-secondary-background-fill-hover) !important;
|
|
}
|
|
|
|
/* Config styles checkbox group */
|
|
.config-styles {
|
|
max-height: 250px;
|
|
overflow-y: auto;
|
|
padding: 10px;
|
|
border: 1px solid var(--border-color-primary);
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.config-styles label {
|
|
flex: calc(50% - 10px) !important;
|
|
margin: 4px !important;
|
|
}
|
|
|
|
/* Configuration status message */
|
|
.config-status {
|
|
margin-top: 10px;
|
|
padding: 10px;
|
|
border-radius: 6px;
|
|
}
|
|
|
|
/* Row with reset button */
|
|
.config-row-with-reset {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
gap: 10px;
|
|
}
|
|
|
|
.config-row-with-reset > div:first-child {
|
|
flex: 1;
|
|
}
|
|
|
|
/* Responsive adjustments for config section */
|
|
@media (max-width: 768px) {
|
|
.reset-btn-mini {
|
|
min-width: 36px !important;
|
|
max-width: 36px !important;
|
|
}
|
|
|
|
.folder-btn {
|
|
min-width: 60px !important;
|
|
}
|
|
|
|
.reset-btn {
|
|
min-width: 80px !important;
|
|
}
|
|
}
|
|
|
|
/* Highlight effect for changed settings */
|
|
.config-changed {
|
|
border-left: 3px solid var(--color-accent) !important;
|
|
padding-left: 10px !important;
|
|
}
|
|
|
|
/* Tooltip for reset buttons */
|
|
.reset-btn[title], .reset-btn-mini[title] {
|
|
cursor: help;
|
|
}
|
|
|
|
/* Group styling in config sections */
|
|
.config-section .gr-group {
|
|
margin-bottom: 15px;
|
|
padding: 12px;
|
|
border: 1px solid var(--border-color-primary);
|
|
border-radius: 8px;
|
|
background: var(--background-fill-primary);
|
|
}
|
|
|
|
/* Better spacing for config inputs */
|
|
.config-section input[type="text"],
|
|
.config-section select,
|
|
.config-section .gradio-dropdown {
|
|
margin-bottom: 5px;
|
|
}
|
|
|
|
/* Save/Restore buttons area */
|
|
.config-actions {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
gap: 15px;
|
|
margin-top: 20px;
|
|
padding-top: 15px;
|
|
border-top: 1px solid var(--border-color-primary);
|
|
}
|
|
|
|
/* =============================================================================
|
|
Style Manager Styles
|
|
============================================================================= */
|
|
|
|
/* Modify Styles button */
|
|
.modify-styles-btn {
|
|
margin-top: 10px;
|
|
width: 100%;
|
|
}
|
|
|
|
/* Style Editor Panel */
|
|
.style-editor-panel {
|
|
margin-top: 15px;
|
|
padding: 15px;
|
|
border: 1px solid var(--border-color-primary);
|
|
border-radius: 8px;
|
|
background: var(--background-fill-secondary);
|
|
}
|
|
|
|
.style-editor-panel h4 {
|
|
margin-top: 0;
|
|
margin-bottom: 15px;
|
|
color: var(--body-text-color);
|
|
font-size: 1em;
|
|
}
|
|
|
|
/* Style editor dropdown */
|
|
.style-editor-panel .gradio-dropdown {
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
/* Style editor textboxes */
|
|
.style-editor-panel textarea {
|
|
font-family: monospace;
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
/* Style type indicator */
|
|
.style-editor-panel .style-type-indicator {
|
|
margin-bottom: 10px;
|
|
padding: 5px 10px;
|
|
border-radius: 4px;
|
|
font-size: 0.85em;
|
|
}
|
|
|
|
/* Style type badges */
|
|
.style-type-badge {
|
|
display: inline-block;
|
|
padding: 2px 8px;
|
|
border-radius: 4px;
|
|
font-size: 0.8em;
|
|
font-weight: 500;
|
|
margin-left: 8px;
|
|
}
|
|
|
|
.style-type-system {
|
|
background: var(--background-fill-tertiary);
|
|
color: var(--body-text-color);
|
|
}
|
|
|
|
.style-type-user {
|
|
background: var(--color-accent);
|
|
color: white;
|
|
}
|
|
|
|
/* Style list container */
|
|
.style-list-container {
|
|
max-height: 400px;
|
|
overflow-y: auto;
|
|
padding-right: 5px;
|
|
}
|
|
|
|
/* Style item in list */
|
|
.style-item {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 8px 12px;
|
|
margin-bottom: 4px;
|
|
background: var(--background-fill-primary);
|
|
border-radius: 6px;
|
|
cursor: pointer;
|
|
transition: background 0.2s ease;
|
|
}
|
|
|
|
.style-item:hover {
|
|
background: var(--background-fill-secondary);
|
|
}
|
|
|
|
.style-item.selected {
|
|
background: var(--background-fill-tertiary);
|
|
border-left: 3px solid var(--color-accent);
|
|
}
|
|
|
|
.style-item-name {
|
|
flex: 1;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.style-item-type {
|
|
font-size: 0.75em;
|
|
padding: 2px 6px;
|
|
border-radius: 3px;
|
|
background: var(--background-fill-tertiary);
|
|
}
|
|
|
|
/* Prompt template highlight */
|
|
.prompt-template-highlight {
|
|
background: rgba(255, 193, 7, 0.3);
|
|
padding: 0 2px;
|
|
border-radius: 2px;
|
|
}
|
|
|
|
/* =============================================================================
|
|
Image Library Styles
|
|
============================================================================= */
|
|
|
|
/* Open Library Button */
|
|
.open-library-btn {
|
|
margin-top: 10px;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
/* Library Modal Overlay - Gradio handles display via visible prop */
|
|
#image_library_modal {
|
|
position: fixed !important;
|
|
top: 0 !important;
|
|
left: 0 !important;
|
|
width: 100vw !important;
|
|
height: 100vh !important;
|
|
background: rgba(0, 0, 0, 0.85) !important;
|
|
z-index: 9999 !important;
|
|
padding: 10px !important;
|
|
box-sizing: border-box !important;
|
|
}
|
|
|
|
/* Flex centering when visible */
|
|
#image_library_modal .gradio-group {
|
|
display: flex !important;
|
|
align-items: stretch !important;
|
|
justify-content: center !important;
|
|
width: 100% !important;
|
|
height: 100% !important;
|
|
}
|
|
|
|
/* Library Modal Content */
|
|
.library-modal-content {
|
|
background: var(--background-fill-primary) !important;
|
|
border-radius: 12px !important;
|
|
width: 98vw !important;
|
|
max-width: 98vw !important;
|
|
height: calc(100vh - 20px) !important;
|
|
max-height: calc(100vh - 20px) !important;
|
|
display: flex !important;
|
|
flex-direction: column !important;
|
|
padding: 15px !important;
|
|
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5) !important;
|
|
border: 1px solid var(--border-color-primary) !important;
|
|
overflow: hidden !important;
|
|
}
|
|
|
|
/* Library Modal Header */
|
|
.library-modal-header {
|
|
display: flex !important;
|
|
justify-content: space-between !important;
|
|
align-items: center !important;
|
|
margin-bottom: 10px !important;
|
|
padding-bottom: 8px !important;
|
|
border-bottom: 1px solid var(--border-color-primary) !important;
|
|
flex-shrink: 0 !important;
|
|
}
|
|
|
|
.library-modal-header h2 {
|
|
margin: 0 !important;
|
|
color: var(--body-text-color) !important;
|
|
font-size: 1.3em !important;
|
|
}
|
|
|
|
/* Close Button */
|
|
.library-close-btn {
|
|
width: 36px !important;
|
|
height: 36px !important;
|
|
min-width: 36px !important;
|
|
border-radius: 50% !important;
|
|
font-size: 22px !important;
|
|
line-height: 1 !important;
|
|
padding: 0 !important;
|
|
background: var(--background-fill-secondary) !important;
|
|
border: 1px solid var(--border-color-primary) !important;
|
|
cursor: pointer !important;
|
|
}
|
|
|
|
.library-close-btn:hover {
|
|
background: var(--color-accent) !important;
|
|
color: white !important;
|
|
}
|
|
|
|
/* Left panel - navigation */
|
|
.library-left-panel {
|
|
display: flex !important;
|
|
flex-direction: column !important;
|
|
height: 100% !important;
|
|
padding-right: 10px !important;
|
|
border-right: 1px solid var(--border-color-primary) !important;
|
|
overflow: hidden !important;
|
|
}
|
|
|
|
/* Right panel - preview */
|
|
.library-right-panel {
|
|
display: flex !important;
|
|
flex-direction: column !important;
|
|
height: 100% !important;
|
|
padding-left: 10px !important;
|
|
overflow-y: auto !important;
|
|
max-height: calc(100vh - 100px) !important;
|
|
}
|
|
|
|
/* Refresh button */
|
|
.library-refresh-btn {
|
|
margin-bottom: 10px !important;
|
|
}
|
|
|
|
/* Column slider */
|
|
#library_column_slider {
|
|
min-width: 100px !important;
|
|
}
|
|
|
|
/* Image Library Gallery - fill available space */
|
|
#library_gallery {
|
|
flex: 1 !important;
|
|
min-height: 0 !important;
|
|
overflow-y: auto !important;
|
|
}
|
|
|
|
/* Hide gallery built-in preview when clicking */
|
|
#library_gallery .preview {
|
|
display: none !important;
|
|
}
|
|
|
|
/* Library gallery thumbnails */
|
|
#library_gallery .thumbnail-item {
|
|
cursor: pointer;
|
|
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
|
}
|
|
|
|
#library_gallery .thumbnail-item:hover {
|
|
transform: scale(1.02);
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
/* Preview image - fit within panel */
|
|
#library_preview_image {
|
|
flex-shrink: 0 !important;
|
|
max-height: 50vh !important;
|
|
width: 100% !important;
|
|
object-fit: contain !important;
|
|
}
|
|
|
|
#library_preview_image img {
|
|
max-height: 50vh !important;
|
|
object-fit: contain !important;
|
|
}
|
|
|
|
/* Image metadata display - scrollable */
|
|
#library_image_info {
|
|
max-height: 150px !important;
|
|
overflow-y: auto !important;
|
|
font-family: monospace;
|
|
font-size: 0.85em;
|
|
flex-shrink: 0 !important;
|
|
}
|
|
|
|
#library_image_info pre {
|
|
white-space: pre-wrap;
|
|
word-wrap: break-word;
|
|
}
|
|
|
|
/* Tags input styling */
|
|
#image_tags {
|
|
margin-top: 5px;
|
|
margin-bottom: 5px;
|
|
}
|
|
|
|
#library_edit_tags {
|
|
margin-top: 10px;
|
|
}
|
|
|
|
/* Library action buttons */
|
|
.library-action-btn {
|
|
margin-top: 5px;
|
|
}
|
|
|
|
/* Tag badges in metadata */
|
|
.tag-badge {
|
|
display: inline-block;
|
|
padding: 2px 8px;
|
|
margin: 2px;
|
|
background: var(--color-accent);
|
|
color: white;
|
|
border-radius: 12px;
|
|
font-size: 0.8em;
|
|
}
|
|
|
|
/* Library empty state */
|
|
.library-empty {
|
|
text-align: center;
|
|
padding: 40px;
|
|
color: var(--body-text-color-subdued);
|
|
}
|
|
|
|
/* Library loading state */
|
|
.library-loading {
|
|
text-align: center;
|
|
padding: 40px;
|
|
color: var(--body-text-color-subdued);
|
|
}
|
|
|
|
/* Image details panel */
|
|
.image-details-panel {
|
|
background: var(--background-fill-secondary);
|
|
border-radius: 8px;
|
|
padding: 15px;
|
|
margin-top: 10px;
|
|
}
|
|
|
|
.image-details-panel h4 {
|
|
margin-top: 0;
|
|
margin-bottom: 10px;
|
|
color: var(--body-text-color);
|
|
}
|
|
|
|
/* Metadata key-value display */
|
|
.metadata-row {
|
|
display: flex;
|
|
padding: 4px 0;
|
|
border-bottom: 1px solid var(--border-color-primary);
|
|
}
|
|
|
|
.metadata-row:last-child {
|
|
border-bottom: none;
|
|
}
|
|
|
|
.metadata-key {
|
|
flex: 0 0 120px;
|
|
font-weight: 500;
|
|
color: var(--body-text-color);
|
|
}
|
|
|
|
.metadata-value {
|
|
flex: 1;
|
|
color: var(--body-text-color);
|
|
word-break: break-word;
|
|
}
|
|
|
|
/* Responsive adjustments for library */
|
|
@media (max-width: 768px) {
|
|
#library_gallery {
|
|
min-height: 300px;
|
|
}
|
|
|
|
#library_image_info {
|
|
max-height: 200px;
|
|
}
|
|
|
|
.metadata-key {
|
|
flex: 0 0 80px;
|
|
font-size: 0.9em;
|
|
}
|
|
}
|
|
|
|
/* =============================================================================
|
|
Multiselect Mode Styles
|
|
============================================================================= */
|
|
|
|
/* Multiselect mode checkbox */
|
|
#library_multiselect_mode {
|
|
margin-top: 10px;
|
|
}
|
|
|
|
#library_multiselect_mode label {
|
|
font-weight: 500;
|
|
cursor: pointer;
|
|
}
|
|
|
|
/* Selected count badge */
|
|
.selected-count-badge {
|
|
display: inline-block;
|
|
padding: 4px 12px;
|
|
background: var(--color-accent);
|
|
color: white;
|
|
border-radius: 16px;
|
|
font-size: 0.9em;
|
|
font-weight: 500;
|
|
margin-left: 10px;
|
|
}
|
|
|
|
/* Delete selected button */
|
|
.delete-selected-btn {
|
|
background: #dc3545 !important;
|
|
color: white !important;
|
|
border: none !important;
|
|
}
|
|
|
|
.delete-selected-btn:hover {
|
|
background: #c82333 !important;
|
|
}
|
|
|
|
/* Selected image indicator in gallery */
|
|
#library_gallery .thumbnail-item.selected {
|
|
outline: 3px solid var(--color-accent) !important;
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
/* Multiselect mode gallery cursor */
|
|
#library_gallery.multiselect-mode .thumbnail-item {
|
|
cursor: crosshair;
|
|
}
|
|
|
|
/* Selection overlay for thumbnails */
|
|
#library_gallery .thumbnail-item::after {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: transparent;
|
|
pointer-events: none;
|
|
transition: background 0.2s ease;
|
|
}
|
|
|
|
#library_gallery .thumbnail-item.selected::after {
|
|
background: rgba(var(--color-accent-rgb, 52, 152, 219), 0.3);
|
|
}
|
|
|
|
/* Checkbox for all images - always visible */
|
|
#library_gallery .thumbnail-item::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 5px;
|
|
right: 5px;
|
|
width: 20px;
|
|
height: 20px;
|
|
background: rgba(255, 255, 255, 0.9);
|
|
border: 2px solid var(--border-color-primary);
|
|
border-radius: 4px;
|
|
z-index: 10;
|
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
|
|
transition: all 0.2s ease;
|
|
pointer-events: none;
|
|
}
|
|
|
|
/* Checkbox hover state */
|
|
#library_gallery .thumbnail-item:hover::before {
|
|
border-color: var(--color-accent);
|
|
background: rgba(255, 255, 255, 1);
|
|
}
|
|
|
|
/* Checked state - show checkmark */
|
|
#library_gallery .thumbnail-item.selected::before {
|
|
content: '✓';
|
|
background: var(--color-accent);
|
|
border-color: var(--color-accent);
|
|
color: white;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 12px;
|
|
font-weight: bold;
|
|
}
|
|
|
|
/* Actual checkbox element (positioned on top of ::before) */
|
|
#library_gallery .library-checkbox {
|
|
position: absolute;
|
|
top: 5px;
|
|
right: 5px;
|
|
width: 20px;
|
|
height: 20px;
|
|
z-index: 15;
|
|
cursor: pointer;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
#library_gallery .library-checkbox .checkmark {
|
|
display: none;
|
|
}
|
|
|
|
/* Selected images list panel */
|
|
.selected-images-list {
|
|
max-height: 200px;
|
|
overflow-y: auto;
|
|
background: var(--background-fill-secondary);
|
|
border-radius: 8px;
|
|
padding: 10px;
|
|
margin-top: 10px;
|
|
border: 1px solid var(--border-color-primary);
|
|
}
|
|
|
|
.selected-images-list:empty {
|
|
display: none;
|
|
}
|
|
|
|
.selected-image-item {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 6px 10px;
|
|
margin-bottom: 4px;
|
|
background: var(--background-fill-primary);
|
|
border-radius: 4px;
|
|
font-size: 0.85em;
|
|
}
|
|
|
|
.selected-image-item:last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.selected-image-name {
|
|
flex: 1;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.selected-image-remove {
|
|
width: 20px;
|
|
height: 20px;
|
|
min-width: 20px;
|
|
border-radius: 50%;
|
|
background: var(--button-secondary-background-fill);
|
|
border: none;
|
|
cursor: pointer;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 14px;
|
|
margin-left: 8px;
|
|
padding: 0;
|
|
}
|
|
|
|
.selected-image-remove:hover {
|
|
background: #dc3545;
|
|
color: white;
|
|
} |