/* 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; }