.page-content { height: calc(100vh - 48px); /* Full height minus header */ margin-top: 48px; /* Push down below header */ width: 100%; position: relative; overflow-x: hidden; /* Prevent horizontal scrolling */ overflow-y: scroll; /* Enable vertical scrolling */ } .container { max-width: 1400px; margin: 0 auto; padding: 0 var(--space-2); position: relative; z-index: var(--z-base); } /* Sticky controls container */ .controls { position: sticky; top: -54px; z-index: calc(var(--z-header) - 1); background: var(--bg-color); padding: var(--space-1) 0; box-shadow: var(--shadow-xs); } /* Responsive container for larger screens */ @media (min-width: 2150px) { .container { max-width: 1800px; } } @media (min-width: 3000px) { .container { max-width: 2400px; } } .controls-right { display: flex; align-items: center; gap: 8px; margin-left: auto; /* Push to the right */ } .actions { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); flex-wrap: nowrap; width: 100%; } .action-buttons { display: flex; align-items: center; gap: var(--space-2); flex-wrap: nowrap; } /* Action button styling */ .control-group { position: relative; } .control-group button { min-width: 100px; display: flex; align-items: center; justify-content: center; gap: 4px; border-radius: var(--border-radius-xs); padding: 4px 10px; border: 1px solid var(--border-color); background: var(--card-bg); color: var(--text-color); font-size: 0.85em; transition: var(--transition-base); cursor: pointer; box-shadow: var(--shadow-xs); } .control-group button:hover, .control-group button:focus-visible { border-color: var(--lora-accent); background: var(--bg-color); transform: translateY(-1px); box-shadow: var(--shadow-lg); outline: none; } .control-group button:active { transform: translateY(0); box-shadow: var(--shadow-xs); } .control-group button i { opacity: 0.8; transition: opacity 0.2s ease; } .control-group button:hover i, .control-group button:focus-visible i { opacity: 1; } .control-group button:disabled { cursor: not-allowed; opacity: 0.6; pointer-events: none; } .control-group button.loading, .dropdown-toggle.loading { cursor: wait; opacity: 0.7; pointer-events: none; } /* Controls */ .control-group button.favorite-filter, .control-group button.update-filter { position: relative; overflow: hidden; } .control-group button.favorite-filter.active { background: var(--lora-accent); color: white; } .control-group button.favorite-filter i { margin-right: 4px; color: var(--favorite-color); } .control-group button.update-filter i { margin-right: 4px; color: var(--lora-accent); } .control-group button.update-filter.active { background: var(--lora-accent); color: white; } .control-group button.update-filter.active i { color: white; } .update-filter-group .dropdown-main.update-filter.active + .dropdown-toggle { background: var(--lora-accent); border-color: var(--lora-accent); color: white; } .update-filter-group .dropdown-main.update-filter.active + .dropdown-toggle i { color: inherit; } /* Active state for buttons that can be toggled */ .control-group button.active { background: var(--lora-accent); color: white; border-color: var(--lora-accent); } /* Keyboard shortcut indicator styling */ .shortcut-key { display: inline-flex; align-items: center; justify-content: center; margin-left: 6px; min-width: 16px; height: 16px; padding: 0 3px; font-size: 11px; font-weight: 600; line-height: 1; border-radius: var(--border-radius-xs); background-color: var(--shortcut-bg); border: 1px solid var(--shortcut-border); color: var(--shortcut-text); vertical-align: middle; opacity: 0.8; transition: var(--transition-base); } .control-group button:hover .shortcut-key { opacity: 1; background-color: oklch(var(--lora-accent-l) var(--lora-accent-c) var(--lora-accent-h) / 0.2); } [data-theme="dark"] .shortcut-key { --shortcut-bg: oklch(var(--lora-accent-l) var(--lora-accent-c) var(--lora-accent-h) / 0.15); --shortcut-border: oklch(var(--lora-accent-l) var(--lora-accent-c) var(--lora-accent-h) / 0.3); } /* Ensure correct vertical alignment for text+shortcut */ .control-group button span { display: inline-flex; align-items: center; } /* Select dropdown styling */ .control-group select { min-width: 100px; padding: 4px 26px 4px 10px; border-radius: var(--border-radius-xs); border: 1px solid var(--border-color); background-color: var(--card-bg); color: var(--text-color); font-size: 0.85em; appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right 6px center; background-size: 14px; cursor: pointer; transition: var(--transition-base); box-shadow: var(--shadow-xs); } /* Style for optgroups */ .control-group select optgroup { font-weight: 600; font-style: normal; color: var(--text-color); background-color: var(--card-bg); } .control-group select option { padding: 4px 8px; background-color: var(--card-bg); color: var(--text-color); } /* Dark theme optgroup styling */ [data-theme="dark"] .control-group select optgroup { background-color: var(--card-bg); color: var(--text-color); } [data-theme="dark"] .control-group select option { background-color: var(--card-bg); color: var(--text-color); } .control-group select:hover { border-color: var(--lora-accent); background-color: var(--bg-color); transform: translateY(-1px); box-shadow: var(--shadow-lg); } .control-group select:focus { outline: none; border-color: var(--lora-accent); box-shadow: 0 0 0 2px oklch(var(--lora-accent) / 0.15); } /* Disabled sort dropdown — used when VLM custom filter is active */ .control-group select:disabled { opacity: 0.5; cursor: not-allowed; background-color: var(--bg-color); border-color: var(--border-color); box-shadow: none; transform: none; } .control-group select:disabled:hover { border-color: var(--border-color); background-color: var(--bg-color); transform: none; box-shadow: none; } /* === Sort dropdown — decoupled trigger width =========================== The native is kept in the DOM (visually hidden) so existing JS that reads/writes `.value` / `.disabled` and dynamically adds/removes