diff --git a/core/sources/civarchive.py b/core/sources/civarchive.py index 14d0234..0e06125 100644 --- a/core/sources/civarchive.py +++ b/core/sources/civarchive.py @@ -843,6 +843,9 @@ def _normalize_archive_version( "id": version_id, "name": version.get("name") or "", "base_model": version.get("baseModel") or version.get("base_model") or version.get("baseModelType"), + "platform_url": version.get("platform_url") or version.get("platformUrl"), + "civitai_model_id": version.get("civitai_model_id") or version.get("civitaiModelId"), + "civitai_model_version_id": version.get("civitai_model_version_id") or version.get("civitaiModelVersionId"), "published_at": version.get("publishedAt") or version.get("createdAt"), "updated_at": version.get("updatedAt"), "description": version.get("description") or "", @@ -911,6 +914,9 @@ def get_civarchive_model_details( "platform": context.get("platform"), "url": f"{CIVARCHIVE_BASE_URL}/models/{model_id}", "version_url": selected.get("url"), + "platform_url": selected.get("platform_url"), + "civitai_model_id": selected.get("civitai_model_id"), + "civitai_model_version_id": selected.get("civitai_model_version_id"), "versions": [selected], "selected_version": selected, "images": selected.get("images", []), @@ -979,6 +985,9 @@ def get_civarchive_model_details( "platform": context.get("platform") or context.get("platform_name"), "url": f"{CIVARCHIVE_BASE_URL}/models/{model_id}", "version_url": selected.get("url") if selected else f"{CIVARCHIVE_BASE_URL}/models/{model_id}", + "platform_url": selected.get("platform_url") if selected else None, + "civitai_model_id": selected.get("civitai_model_id") if selected else None, + "civitai_model_version_id": selected.get("civitai_model_version_id") if selected else None, "versions": versions, "selected_version": selected, "images": selected.get("images", []) if selected else [], @@ -1057,6 +1066,9 @@ def _build_result_from_normalized_version( "type": model_details.get("type") or file_info.get("type"), "filename": filename, "url": url, + "platform_url": version.get("platform_url") or version.get("platformUrl"), + "civitai_model_id": version.get("civitai_model_id") or version.get("civitaiModelId"), + "civitai_model_version_id": version.get("civitai_model_version_id") or version.get("civitaiModelVersionId"), "download_url": download_urls[0], "download_urls": download_urls, "size": size, @@ -1527,6 +1539,9 @@ def _build_result_from_payload( "type": context.get("type") or selected_file.get("type"), "filename": filename, "url": civarchive_url, + "platform_url": version.get("platform_url") or version.get("platformUrl"), + "civitai_model_id": version.get("civitai_model_id") or version.get("civitaiModelId"), + "civitai_model_version_id": version.get("civitai_model_version_id") or version.get("civitaiModelVersionId"), "download_url": download_urls[0], "download_urls": download_urls, "size": _extract_file_size_bytes(selected_file), diff --git a/web/css/resolver-main.css b/web/css/resolver-main.css index 3b089d3..21cc0d8 100644 --- a/web/css/resolver-main.css +++ b/web/css/resolver-main.css @@ -1,4 +1,4 @@ -#model-resolver-modal, +#model-resolver-modal, #model-resolver-modal button, #model-resolver-modal input, #model-resolver-modal select { @@ -102,8 +102,8 @@ height: 30px; padding: 0 12px; color: var(--mr-text); - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); - border: 1px solid var(--mr-missing-control-border, rgba(255,255,255,0.105)); + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); + border: 1px solid var(--mr-missing-control-border, rgba(255, 255, 255, 0.105)); border-radius: var(--mr-missing-control-radius, 7px); box-shadow: var(--mr-missing-control-shadow, none); box-sizing: border-box; @@ -125,8 +125,8 @@ #model-resolver-modal .mr-btn-copy-compact:hover:not(:disabled), #model-resolver-modal .mr-copy-main-btn:hover:not(:disabled) { color: var(--mr-text); - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.06)); - border-color: var(--mr-missing-control-border-hover, rgba(255,255,255,0.17)); + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.06)); + border-color: var(--mr-missing-control-border-hover, rgba(255, 255, 255, 0.17)); transform: none; } @@ -139,8 +139,8 @@ #model-resolver-modal .mr-btn-copy-compact:focus-visible, #model-resolver-modal .mr-copy-main-btn:focus-visible { outline: none; - border-color: var(--mr-missing-control-focus-border, rgba(114,211,138,0.30)); - box-shadow: 0 0 0 2px var(--mr-missing-control-focus-ring, rgba(114,211,138,0.08)); + border-color: var(--mr-missing-control-focus-border, rgba(114, 211, 138, 0.30)); + box-shadow: 0 0 0 2px var(--mr-missing-control-focus-ring, rgba(114, 211, 138, 0.08)); } .mr-btn-filter.active, @@ -148,16 +148,16 @@ #model-resolver-modal .mr-btn-filter.active, #model-resolver-modal .mr-copy-mode.active { color: #dffbe5; - background: rgba(114,211,138,0.13); - border-color: rgba(114,211,138,0.32); + background: rgba(114, 211, 138, 0.13); + border-color: rgba(114, 211, 138, 0.32); } .mr-btn-filter.active:hover:not(:disabled), .mr-copy-mode.active:hover:not(:disabled), #model-resolver-modal .mr-btn-filter.active:hover:not(:disabled), #model-resolver-modal .mr-copy-mode.active:hover:not(:disabled) { - background: rgba(114,211,138,0.17); - border-color: rgba(114,211,138,0.42); + background: rgba(114, 211, 138, 0.17); + border-color: rgba(114, 211, 138, 0.42); } .mr-models-list-pad { @@ -366,6 +366,7 @@ } @media (max-width: 720px) { + .mr-loaded-models-header, .mr-copy-toolbar, .mr-model-section-header { @@ -423,22 +424,25 @@ margin-bottom: var(--mr-spacing-10); padding: var(--mr-spacing-10) var(--mr-spacing-12); border-radius: var(--mr-ui-radius-lg); - background: linear-gradient(135deg, rgba(255,255,255,0.04) 0%, rgba(255,255,255,0.02) 100%); + background: linear-gradient(135deg, rgba(255, 255, 255, 0.04) 0%, rgba(255, 255, 255, 0.02) 100%); border: 1px solid var(--mr-border-strong); box-shadow: var(--mr-shadow-elevated); } + .mr-missing-summary-title { display: flex; align-items: baseline; gap: var(--mr-spacing-10); flex-wrap: wrap; } + .mr-missing-summary-count { font-size: var(--mr-spacing-15); font-weight: 700; color: var(--mr-text); letter-spacing: -0.02em; } + .mr-missing-summary-meta { font-size: var(--mr-font-sm); color: var(--mr-text-muted); @@ -452,11 +456,11 @@ .mr-missing-browser { --mr-missing-bg: #111; - --mr-missing-surface: rgba(255,255,255,0.03); - --mr-missing-surface-raised: rgba(255,255,255,0.052); - --mr-missing-surface-muted: rgba(255,255,255,0.02); - --mr-missing-line: rgba(255,255,255,0.075); - --mr-missing-line-strong: rgba(255,255,255,0.13); + --mr-missing-surface: rgba(255, 255, 255, 0.03); + --mr-missing-surface-raised: rgba(255, 255, 255, 0.052); + --mr-missing-surface-muted: rgba(255, 255, 255, 0.02); + --mr-missing-line: rgba(255, 255, 255, 0.075); + --mr-missing-line-strong: rgba(255, 255, 255, 0.13); --mr-missing-radius: 6px; display: flex; gap: 0; @@ -466,6 +470,7 @@ border: 1px solid var(--mr-missing-line); background: var(--mr-missing-bg); } + .mr-missing-list-pane, .mr-missing-detail-pane { min-width: 0; @@ -474,6 +479,7 @@ contain: layout paint style; background: var(--mr-missing-bg); } + .mr-missing-list-pane { flex: 1 1 auto; display: grid; @@ -481,6 +487,7 @@ border-right: 0; background: var(--mr-missing-bg); } + .mr-missing-browser-splitter { position: relative; flex: 0 0 10px; @@ -494,6 +501,7 @@ border-right: 1px solid var(--mr-missing-line); outline: none; } + .mr-missing-browser-splitter::before { content: ""; position: absolute; @@ -502,21 +510,24 @@ left: 50%; width: 2px; border-radius: 999px; - background: rgba(255,255,255,0.13); + background: rgba(255, 255, 255, 0.13); transform: translateX(-50%); transition: background 0.15s ease, box-shadow 0.15s ease; } + .mr-missing-browser-splitter:hover::before, .mr-missing-browser-splitter:focus-visible::before, .mr-missing-browser.is-resizing .mr-missing-browser-splitter::before { - background: rgba(114,211,138,0.78); - box-shadow: 0 0 0 3px rgba(114,211,138,0.12); + background: rgba(114, 211, 138, 0.78); + box-shadow: 0 0 0 3px rgba(114, 211, 138, 0.12); } + .mr-missing-browser.is-resizing .mr-missing-list-pane, .mr-missing-browser.is-resizing .mr-missing-detail-pane { pointer-events: none; user-select: none; } + .mr-missing-browser.is-resizing .mr-missing-list-row, .mr-missing-browser.is-resizing .mr-match-row, .mr-missing-browser.is-resizing .mr-search-results-table tr, @@ -525,6 +536,7 @@ .mr-missing-browser.is-resizing .mr-category-chip { transition: none !important; } + .mr-missing-list-toolbar { display: flex; align-items: center; @@ -534,16 +546,19 @@ border-bottom: 1px solid var(--mr-missing-line); background: var(--mr-missing-surface); } + .mr-missing-list-title { font-size: 15px; font-weight: 750; color: var(--mr-text); } + .mr-missing-list-meta { margin-top: 3px; font-size: 11px; color: var(--mr-text-muted); } + .mr-missing-list-stats { display: flex; align-items: center; @@ -551,6 +566,7 @@ gap: 6px; flex-wrap: wrap; } + .mr-missing-list-tools { display: flex; align-items: center; @@ -558,6 +574,7 @@ gap: 8px; flex-wrap: wrap; } + .mr-missing-resolved-toggle { display: inline-flex; align-items: center; @@ -566,8 +583,8 @@ min-height: 26px; padding: 0 8px; color: var(--mr-text-muted); - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); - border: 1px solid var(--mr-missing-control-border, rgba(255,255,255,0.105)); + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); + border: 1px solid var(--mr-missing-control-border, rgba(255, 255, 255, 0.105)); border-radius: var(--mr-missing-control-radius, 7px); cursor: pointer; font-size: 11px; @@ -576,17 +593,20 @@ white-space: nowrap; transition: var(--mr-missing-control-transition, background 0.15s ease, border-color 0.15s ease, color 0.15s ease); } + .mr-missing-resolved-toggle:hover { color: var(--mr-text); - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.06)); - border-color: var(--mr-missing-control-border-hover, rgba(255,255,255,0.17)); + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.06)); + border-color: var(--mr-missing-control-border-hover, rgba(255, 255, 255, 0.17)); } + .mr-missing-resolved-toggle input { width: 13px; height: 13px; margin: 0; accent-color: #72d38a; } + .mr-missing-resolved-toggle em { display: inline-flex; align-items: center; @@ -596,10 +616,11 @@ padding: 0 4px; border-radius: 999px; color: #c9f6d0; - background: rgba(114,211,138,0.12); + background: rgba(114, 211, 138, 0.12); font-style: normal; font-size: 10px; } + .mr-missing-refresh-btn, #model-resolver-modal .mr-missing-refresh-btn { min-height: 26px; @@ -607,10 +628,12 @@ gap: 5px; font-size: 11px; } + .mr-missing-refresh-btn svg { width: 13px; height: 13px; } + .mr-missing-stat { display: inline-flex; align-items: center; @@ -624,12 +647,15 @@ font-weight: 700; white-space: nowrap; } + .mr-missing-stat-exact { color: #72d38a; } + .mr-missing-stat-partial { color: #f1cf64; } + .mr-missing-list-head, #model-resolver-modal .mr-missing-list-row { display: grid; @@ -637,6 +663,7 @@ align-items: center; gap: 8px; } + .mr-missing-list-head { padding: 10px 12px 10px 8px; border-bottom: 1px solid var(--mr-missing-line); @@ -645,25 +672,28 @@ font-size: 11px; font-weight: 700; } -.mr-missing-list-head > span { + +.mr-missing-list-head>span { display: flex; align-items: center; justify-content: center; min-width: 0; text-align: center; } + .mr-missing-list { min-height: 0; overflow-y: auto; scrollbar-width: auto; background: var(--mr-missing-bg); } + #model-resolver-modal .mr-missing-list-row { width: 100%; min-height: 64px; padding: 9px 12px 9px 8px; border: 0; - border-bottom: 1px solid rgba(255,255,255,0.052); + border-bottom: 1px solid rgba(255, 255, 255, 0.052); border-radius: 0; background: transparent; color: var(--mr-text); @@ -673,51 +703,63 @@ text-align: left; transition: background 0.14s ease, box-shadow 0.14s ease, border-color 0.14s ease; } + @supports (content-visibility: auto) { #model-resolver-modal .mr-missing-list-row { content-visibility: auto; contain-intrinsic-size: auto 64px; } } + #model-resolver-modal .mr-missing-list-row:hover { - background: rgba(255,255,255,0.032); + background: rgba(255, 255, 255, 0.032); } + #model-resolver-modal .mr-missing-list-row:focus-visible { outline: none; - box-shadow: inset 3px 0 0 rgba(114,211,138,0.72), inset 0 0 0 1px rgba(114,211,138,0.16); + box-shadow: inset 3px 0 0 rgba(114, 211, 138, 0.72), inset 0 0 0 1px rgba(114, 211, 138, 0.16); } + #model-resolver-modal .mr-missing-list-row.is-selected { - background: linear-gradient(90deg, rgba(114,211,138,0.12) 0%, rgba(114,211,138,0.055) 42%, rgba(114,211,138,0.018) 100%); - box-shadow: inset 3px 0 0 rgba(114,211,138,0.92), inset 0 0 0 1px rgba(114,211,138,0.12); + background: linear-gradient(90deg, rgba(114, 211, 138, 0.12) 0%, rgba(114, 211, 138, 0.055) 42%, rgba(114, 211, 138, 0.018) 100%); + box-shadow: inset 3px 0 0 rgba(114, 211, 138, 0.92), inset 0 0 0 1px rgba(114, 211, 138, 0.12); } + .mr-missing-list-row.is-resolved { opacity: 0.72; } + .mr-missing-list-row.is-batch-selected { - background: rgba(78,161,255,0.055); + background: rgba(78, 161, 255, 0.055); } + .mr-missing-list-row.is-selected.is-batch-selected { - background: linear-gradient(90deg, rgba(114,211,138,0.13) 0%, rgba(78,161,255,0.065) 58%, rgba(78,161,255,0.025) 100%); + background: linear-gradient(90deg, rgba(114, 211, 138, 0.13) 0%, rgba(78, 161, 255, 0.065) 58%, rgba(78, 161, 255, 0.025) 100%); } + #model-resolver-modal .mr-missing-list-row.is-menu-preview { - background: linear-gradient(90deg, rgba(255,204,102,0.11) 0%, rgba(255,204,102,0.052) 56%, rgba(255,204,102,0.018) 100%); - box-shadow: inset 3px 0 0 rgba(255,204,102,0.74), inset 0 0 0 1px rgba(255,204,102,0.12); + background: linear-gradient(90deg, rgba(255, 204, 102, 0.11) 0%, rgba(255, 204, 102, 0.052) 56%, rgba(255, 204, 102, 0.018) 100%); + box-shadow: inset 3px 0 0 rgba(255, 204, 102, 0.74), inset 0 0 0 1px rgba(255, 204, 102, 0.12); } + #model-resolver-modal .mr-missing-list-row.is-selected.is-menu-preview, #model-resolver-modal .mr-missing-list-row.is-batch-selected.is-menu-preview { - background: linear-gradient(90deg, rgba(255,204,102,0.13) 0%, rgba(78,161,255,0.07) 58%, rgba(114,211,138,0.028) 100%); - box-shadow: inset 3px 0 0 rgba(255,204,102,0.82), inset 0 0 0 1px rgba(255,204,102,0.14); + background: linear-gradient(90deg, rgba(255, 204, 102, 0.13) 0%, rgba(78, 161, 255, 0.07) 58%, rgba(114, 211, 138, 0.028) 100%); + box-shadow: inset 3px 0 0 rgba(255, 204, 102, 0.82), inset 0 0 0 1px rgba(255, 204, 102, 0.14); } + .mr-missing-row-select { display: flex; justify-content: center; align-items: center; } + .mr-missing-head-select { display: flex; justify-content: center; align-items: center; } + .mr-missing-select-all-check, .mr-missing-row-check { width: 14px; @@ -726,16 +768,18 @@ accent-color: #72d38a; cursor: pointer; } + .mr-missing-row-index { display: block; width: 100%; - color: rgba(255,255,255,0.55); + color: rgba(255, 255, 255, 0.55); font-size: 13px; font-weight: 700; line-height: 1; text-align: center; justify-self: stretch; } + .mr-missing-row-model, .mr-missing-row-best, .mr-missing-row-match { @@ -743,10 +787,12 @@ display: grid; gap: 2px; } + .mr-missing-row-model { grid-template-columns: minmax(0, 1fr); align-items: center; } + .mr-missing-row-name, .mr-missing-row-node, .mr-missing-row-best { @@ -755,11 +801,13 @@ text-overflow: ellipsis; white-space: nowrap; } + .mr-missing-row-name { color: var(--mr-text); font-size: 13px; font-weight: 700; } + .mr-missing-row-resolved-pill { display: inline-flex; align-items: center; @@ -768,23 +816,26 @@ padding: 1px 6px; border-radius: 999px; color: #c9f6d0; - background: rgba(114,211,138,0.10); - border: 1px solid rgba(114,211,138,0.20); + background: rgba(114, 211, 138, 0.10); + border: 1px solid rgba(114, 211, 138, 0.20); font-size: 9px; font-weight: 750; line-height: 1; } + .mr-missing-row-node { grid-column: 1; color: var(--mr-text-muted); font-size: 10px; } + .mr-missing-row-node-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .mr-missing-row-type { justify-self: start; max-width: 100%; @@ -801,12 +852,14 @@ text-transform: uppercase; letter-spacing: 0.02em; } + .mr-missing-row-match { justify-self: center; display: inline-flex; align-items: center; color: var(--mr-text-muted); } + .mr-missing-row-match strong { display: inline-flex; align-items: center; @@ -819,6 +872,7 @@ line-height: 1; white-space: nowrap; } + .mr-missing-row-best { color: var(--mr-text-muted); font-size: 11px; @@ -827,20 +881,25 @@ overflow-wrap: anywhere; word-break: normal; } + .mr-missing-row-none { color: var(--mr-text-dim); } + .mr-missing-row-match-exact strong { color: #72d38a; - background: rgba(114,211,138,0.12); + background: rgba(114, 211, 138, 0.12); } + .mr-missing-row-match-partial strong { color: #f1cf64; - background: rgba(241,207,100,0.13); + background: rgba(241, 207, 100, 0.13); } + .mr-missing-row-match-none strong { - color: rgba(255,255,255,0.42); + color: rgba(255, 255, 255, 0.42); } + .mr-missing-row-sources { position: relative; display: block; @@ -849,8 +908,9 @@ width: 104px; height: 50px; } + .mr-missing-source-dot { - --mr-source-rgb: 168,174,181; + --mr-source-rgb: 168, 174, 181; --mr-source-fill-alpha: 0.08; --mr-source-border-hi-alpha: 0.52; --mr-source-border-alpha: 0.34; @@ -868,11 +928,11 @@ font-size: 9px; font-weight: 800; filter: - drop-shadow(0 2px 3px rgba(0,0,0,0.44)) - drop-shadow(0 0 4px rgba(var(--mr-source-rgb), var(--mr-source-glow-alpha))); + drop-shadow(0 2px 3px rgba(0, 0, 0, 0.44)) drop-shadow(0 0 4px rgba(var(--mr-source-rgb), var(--mr-source-glow-alpha))); isolation: isolate; z-index: 1; } + .mr-missing-source-dot::before, .mr-missing-source-dot::after { content: ""; @@ -881,51 +941,58 @@ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 114'%3E%3Cpath fill='black' d='M50 1 Q53 1 56 3 L94 25 Q99 28 99 34 L99 80 Q99 86 94 89 L56 111 Q50 114 44 111 L6 89 Q1 86 1 80 L1 34 Q1 28 6 25 L44 3 Q47 1 50 1 Z'/%3E%3C/svg%3E") center / 100% 100% no-repeat; pointer-events: none; } + .mr-missing-source-dot::before { inset: 0; background: linear-gradient(145deg, rgba(var(--mr-source-rgb), var(--mr-source-border-hi-alpha)), rgba(var(--mr-source-rgb), var(--mr-source-border-alpha)) 42%, - rgba(255,255,255,0.08) - ); + rgba(255, 255, 255, 0.08)); } + .mr-missing-source-dot::after { inset: 1.5px; background: radial-gradient(circle at 35% 22%, rgba(var(--mr-source-rgb), 0.18), transparent 48%), linear-gradient(145deg, rgba(var(--mr-source-rgb), var(--mr-source-fill-alpha)), - rgba(25,27,30,0.94) 54%, - rgba(13,14,16,0.97) - ); + rgba(25, 27, 30, 0.94) 54%, + rgba(13, 14, 16, 0.97)); } + .mr-missing-row-sources .mr-missing-source-dot:nth-child(1) { left: 22px; top: -7px; } + .mr-missing-row-sources .mr-missing-source-dot:nth-child(2) { left: 52px; top: -7px; } + .mr-missing-row-sources .mr-missing-source-dot:nth-child(3) { left: 7px; top: 18px; z-index: 2; } + .mr-missing-row-sources .mr-missing-source-dot:nth-child(4) { left: 37px; top: 18px; z-index: 2; } + .mr-missing-row-sources .mr-missing-source-dot:nth-child(5) { left: 67px; top: 18px; z-index: 2; } + .mr-missing-row-sources .mr-missing-source-dot:nth-child(3):last-child { left: 37px; } + .mr-missing-source-icon { position: relative; z-index: 1; @@ -934,74 +1001,87 @@ height: 15px; flex: 0 0 15px; } + .mr-missing-source-found, .mr-missing-source-exact { - --mr-source-rgb: 114,211,138; + --mr-source-rgb: 114, 211, 138; --mr-source-fill-alpha: 0.16; --mr-source-border-hi-alpha: 0.76; --mr-source-border-alpha: 0.58; --mr-source-glow-alpha: 0.20; } + .mr-missing-source-partial { - --mr-source-rgb: 241,207,100; + --mr-source-rgb: 241, 207, 100; --mr-source-fill-alpha: 0.18; --mr-source-border-hi-alpha: 0.82; --mr-source-border-alpha: 0.62; --mr-source-glow-alpha: 0.24; } + .mr-missing-source-none { - --mr-source-rgb: 150,155,162; + --mr-source-rgb: 150, 155, 162; --mr-source-fill-alpha: 0.05; --mr-source-border-hi-alpha: 0.32; --mr-source-border-alpha: 0.22; --mr-source-glow-alpha: 0.02; } + .mr-missing-source-running, .mr-missing-source-pending { - --mr-source-rgb: 96,190,255; + --mr-source-rgb: 96, 190, 255; --mr-source-fill-alpha: 0.16; --mr-source-border-hi-alpha: 0.78; --mr-source-border-alpha: 0.6; --mr-source-glow-alpha: 0.24; } + .mr-missing-source-error { - --mr-source-rgb: 255,138,128; + --mr-source-rgb: 255, 138, 128; --mr-source-fill-alpha: 0.16; --mr-source-border-hi-alpha: 0.82; --mr-source-border-alpha: 0.62; --mr-source-glow-alpha: 0.22; } + .mr-missing-detail-pane { flex: 0 0 var(--mr-missing-detail-track, 42%); overflow-y: auto; background: var(--mr-missing-bg); } + .mr-missing-detail-pane .mr-card { margin: 0; padding: 18px; background: transparent; box-shadow: none; } + .mr-missing-detail-pane .mr-card:hover { box-shadow: none; } + .mr-missing-detail-pane .mr-card-header { margin-bottom: 10px; } + .mr-missing-detail-pane .mr-card-title { font-size: 16px; letter-spacing: 0; } + .mr-missing-detail-pane .mr-card-subtitle { margin-top: 1px; } + .mr-missing-detail-pane .mr-columns { grid-template-columns: minmax(0, 1fr); gap: 10px; } + .mr-missing-detail-pane .mr-column { padding: 12px; - background: linear-gradient(180deg, rgba(255,255,255,0.028) 0%, rgba(255,255,255,0.014) 100%); + background: linear-gradient(180deg, rgba(255, 255, 255, 0.028) 0%, rgba(255, 255, 255, 0.014) 100%); border: 1px solid var(--mr-missing-line); border-radius: var(--mr-missing-radius); box-shadow: none; @@ -1012,14 +1092,17 @@ flex-direction: column; overflow-y: auto; } + .mr-missing-browser-splitter { display: none; } + .mr-missing-list-pane { max-height: 46vh; border-right: 0; - border-bottom: 1px solid rgba(255,255,255,0.08); + border-bottom: 1px solid rgba(255, 255, 255, 0.08); } + .mr-missing-detail-pane { flex: 0 0 auto; overflow: visible; @@ -1030,21 +1113,25 @@ .mr-missing-list-head { display: none; } + #model-resolver-modal .mr-missing-list-row { grid-template-columns: 24px 18px minmax(0, 1fr); gap: 7px; } + .mr-missing-row-select { grid-row: 1 / span 4; align-self: start; margin-top: 1px; } + .mr-missing-row-index { grid-row: 1 / span 4; align-self: start; margin-top: 1px; text-align: center; } + .mr-missing-row-model, .mr-missing-row-type, .mr-missing-row-best, @@ -1062,16 +1149,18 @@ padding: var(--mr-spacing-10) var(--mr-spacing-12); margin-bottom: var(--mr-spacing-4); transition: background 0.18s ease, box-shadow 0.18s ease; - box-shadow: inset 0 0 0 1px rgba(255,255,255,0.018); + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.018); font-family: "Segoe UI Variable", "Segoe UI", sans-serif; } + .mr-card:nth-child(even) { background: var(--mr-card-bg-alt); } + .mr-card:hover { box-shadow: - inset 0 0 0 1px rgba(255,255,255,0.05), - 0 10px 24px rgba(0,0,0,0.14); + inset 0 0 0 1px rgba(255, 255, 255, 0.05), + 0 10px 24px rgba(0, 0, 0, 0.14); } /* Card Header */ @@ -1082,16 +1171,19 @@ gap: var(--mr-spacing-10); margin-bottom: var(--mr-spacing-6); } + .mr-card-title-wrap { min-width: 0; flex: 1; display: grid; gap: var(--mr-spacing-4); } + .mr-card-title-meta { display: grid; gap: var(--mr-spacing-2); } + .mr-card-title { font-size: var(--mr-spacing-15); line-height: 1.24; @@ -1102,6 +1194,7 @@ word-break: break-word; letter-spacing: -0.01em; } + .mr-card-title-eyebrow { display: block; font-family: 'SF Mono', 'Consolas', 'Monaco', monospace; @@ -1110,6 +1203,7 @@ color: var(--mr-text-dim); word-break: break-all; } + .mr-card-title-primary { display: block; min-width: 0; @@ -1117,6 +1211,7 @@ overflow-wrap: anywhere; word-break: normal; } + .mr-card-title-secondary { display: block; font-size: var(--mr-font-md); @@ -1124,6 +1219,7 @@ color: var(--mr-text-muted); word-break: break-word; } + .mr-card-subtitle { margin-top: 0; display: flex; @@ -1131,58 +1227,67 @@ gap: var(--mr-spacing-4); flex-wrap: wrap; } + .mr-node-chip { display: inline-flex; align-items: center; gap: var(--mr-spacing-4); padding: var(--mr-spacing-2) var(--mr-spacing-7); - background: rgba(255,255,255,0.04); - border: 1px solid rgba(255,255,255,0.06); + background: rgba(255, 255, 255, 0.04); + border: 1px solid rgba(255, 255, 255, 0.06); border-radius: 999px; font-size: var(--mr-font-xs); color: #c8c8c8; white-space: nowrap; flex-shrink: 0; } + .mr-missing-browser .mr-node-chip, .mr-missing-browser .mr-category-chip:not(.mr-type-chip), .mr-missing-browser .mr-search-source-pill { - background: var(--mr-missing-chip-bg, var(--mr-missing-surface-raised, rgba(255,255,255,0.04))); - border-color: var(--mr-missing-chip-border, var(--mr-missing-line, rgba(255,255,255,0.075))); + background: var(--mr-missing-chip-bg, var(--mr-missing-surface-raised, rgba(255, 255, 255, 0.04))); + border-color: var(--mr-missing-chip-border, var(--mr-missing-line, rgba(255, 255, 255, 0.075))); box-shadow: none; } + .mr-missing-browser .mr-badge { border-radius: 999px; box-shadow: none; } + .mr-missing-browser .mr-badge-neutral { - background: var(--mr-missing-surface-raised, rgba(255,255,255,0.04)); - border-color: var(--mr-missing-line, rgba(255,255,255,0.075)); + background: var(--mr-missing-surface-raised, rgba(255, 255, 255, 0.04)); + border-color: var(--mr-missing-line, rgba(255, 255, 255, 0.075)); } + .mr-node-chip.is-locatable { cursor: pointer; padding-right: 9px; color: #f1f1f1; - background: rgba(255,255,255,0.08); - border-color: rgba(255,255,255,0.12); + background: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.12); transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease, transform 0.15s ease; } + .mr-missing-browser .mr-node-chip.is-locatable { - background: var(--mr-missing-chip-bg, var(--mr-missing-surface-raised, rgba(255,255,255,0.04))); - border-color: var(--mr-missing-chip-border, var(--mr-missing-line-strong, rgba(255,255,255,0.12))); + background: var(--mr-missing-chip-bg, var(--mr-missing-surface-raised, rgba(255, 255, 255, 0.04))); + border-color: var(--mr-missing-chip-border, var(--mr-missing-line-strong, rgba(255, 255, 255, 0.12))); transform: none; } + .mr-node-chip.is-locatable:hover { - background: rgba(255,255,255,0.12); - border-color: rgba(255,255,255,0.18); + background: rgba(255, 255, 255, 0.12); + border-color: rgba(255, 255, 255, 0.18); color: #ffffff; transform: translateY(-1px); } + .mr-missing-browser .mr-node-chip.is-locatable:hover { - background: var(--mr-missing-chip-bg-hover, rgba(255,255,255,0.06)); - border-color: var(--mr-missing-chip-border-hover, rgba(255,255,255,0.18)); + background: var(--mr-missing-chip-bg-hover, rgba(255, 255, 255, 0.06)); + border-color: var(--mr-missing-chip-border-hover, rgba(255, 255, 255, 0.18)); transform: none; } + .mr-node-chip-icon { display: inline-flex; align-items: center; @@ -1191,11 +1296,13 @@ height: var(--mr-missing-chip-icon-size, var(--mr-spacing-12)); opacity: 0.95; } + .mr-node-chip-icon svg { width: var(--mr-missing-chip-icon-size, var(--mr-spacing-12)); height: var(--mr-missing-chip-icon-size, var(--mr-spacing-12)); display: block; } + #model-resolver-modal .mr-missing-row-locate { all: unset; display: inline-flex; @@ -1209,8 +1316,8 @@ margin: 0; padding: 2px 8px; gap: var(--mr-spacing-4); - background: var(--mr-missing-chip-bg, rgba(255,255,255,0.045)); - border: 1px solid var(--mr-missing-chip-border, rgba(255,255,255,0.08)); + background: var(--mr-missing-chip-bg, rgba(255, 255, 255, 0.045)); + border: 1px solid var(--mr-missing-chip-border, rgba(255, 255, 255, 0.08)); border-radius: var(--mr-missing-chip-radius, 999px); box-shadow: none; color: #f1f1f1; @@ -1225,27 +1332,31 @@ vertical-align: middle; transition: var(--mr-missing-control-transition, background 0.15s ease, border-color 0.15s ease, color 0.15s ease), transform 0.15s ease; } + #model-resolver-modal .mr-missing-row-locate:hover { - background: var(--mr-missing-chip-bg-hover, rgba(255,255,255,0.06)); - border-color: var(--mr-missing-chip-border-hover, rgba(255,255,255,0.18)); + background: var(--mr-missing-chip-bg-hover, rgba(255, 255, 255, 0.06)); + border-color: var(--mr-missing-chip-border-hover, rgba(255, 255, 255, 0.18)); color: #ffffff; transform: none; } + #model-resolver-modal .mr-missing-row-locate:focus-visible { outline: none; - border-color: var(--mr-missing-control-focus-border, rgba(114,211,138,0.24)); - box-shadow: 0 0 0 1px var(--mr-missing-control-focus-ring, rgba(114,211,138,0.10)); + border-color: var(--mr-missing-control-focus-border, rgba(114, 211, 138, 0.24)); + box-shadow: 0 0 0 1px var(--mr-missing-control-focus-ring, rgba(114, 211, 138, 0.10)); } + #model-resolver-modal .mr-missing-row-locate .mr-node-chip-icon, #model-resolver-modal .mr-missing-row-locate .mr-node-chip-icon svg { width: var(--mr-missing-chip-icon-size, var(--mr-spacing-12)); height: var(--mr-missing-chip-icon-size, var(--mr-spacing-12)); } + .mr-category-chip { display: inline-flex; padding: var(--mr-spacing-2) var(--mr-spacing-7); - background: rgba(255,255,255,0.045); - border: 1px solid rgba(255,255,255,0.07); + background: rgba(255, 255, 255, 0.045); + border: 1px solid rgba(255, 255, 255, 0.07); border-radius: 999px; font-size: 9px; color: #d3d3d3; @@ -1253,6 +1364,7 @@ letter-spacing: 0.08em; font-weight: 700; } + /* ComfyUI node_slot-inspired type chips. */ .mr-type-chip, .mr-info-tag.mr-type-chip, @@ -1271,77 +1383,95 @@ border: 1px solid rgba(var(--mr-type-rgb), var(--mr-type-border-alpha)); color: var(--mr-type-text); box-shadow: - inset 0 0 0 1px rgba(255,255,255,0.026), + inset 0 0 0 1px rgba(255, 255, 255, 0.026), 0 0 12px rgba(var(--mr-type-rgb), var(--mr-type-glow-alpha)); } + .mr-type-chip.mr-type-chip--model { --mr-type-rgb: var(--mr-type-model-rgb, 179, 157, 219); --mr-type-text: var(--mr-type-model-text, #dbcfff); } + .mr-type-chip.mr-type-chip--lora { --mr-type-rgb: var(--mr-type-lora-rgb, 194, 255, 174); --mr-type-text: var(--mr-type-lora-text, #d7ffcb); } + .mr-type-chip.mr-type-chip--style-model { --mr-type-rgb: var(--mr-type-style-model-rgb, 194, 255, 174); --mr-type-text: var(--mr-type-style-model-text, #d7ffcb); } + .mr-type-chip.mr-type-chip--clip { --mr-type-rgb: var(--mr-type-clip-rgb, 255, 213, 0); --mr-type-text: var(--mr-type-clip-text, #ffe678); } + .mr-type-chip.mr-type-chip--clip-vision { --mr-type-rgb: var(--mr-type-clip-vision-rgb, 168, 218, 220); --mr-type-text: var(--mr-type-clip-vision-text, #c7eff0); } + .mr-type-chip.mr-type-chip--clip-vision-output { --mr-type-rgb: var(--mr-type-clip-vision-output-rgb, 173, 116, 82); --mr-type-text: var(--mr-type-clip-vision-output-text, #e8b79a); } + .mr-type-chip.mr-type-chip--conditioning { --mr-type-rgb: var(--mr-type-conditioning-rgb, 255, 169, 49); --mr-type-text: var(--mr-type-conditioning-text, #ffd08c); } + .mr-type-chip.mr-type-chip--controlnet { --mr-type-rgb: var(--mr-type-controlnet-rgb, 110, 231, 183); --mr-type-text: var(--mr-type-controlnet-text, #b1f4db); } + .mr-type-chip.mr-type-chip--image { --mr-type-rgb: var(--mr-type-image-rgb, 100, 181, 246); --mr-type-text: var(--mr-type-image-text, #b9dcff); } + .mr-type-chip.mr-type-chip--latent { --mr-type-rgb: var(--mr-type-latent-rgb, 255, 156, 249); --mr-type-text: var(--mr-type-latent-text, #ffc8fb); } + .mr-type-chip.mr-type-chip--mask { --mr-type-rgb: var(--mr-type-mask-rgb, 129, 199, 132); --mr-type-text: var(--mr-type-mask-text, #bdebc0); } + .mr-type-chip.mr-type-chip--vae { --mr-type-rgb: var(--mr-type-vae-rgb, 255, 110, 110); --mr-type-text: var(--mr-type-vae-text, #ffb8b8); } + .mr-type-chip.mr-type-chip--noise { --mr-type-rgb: var(--mr-type-noise-rgb, 176, 176, 176); --mr-type-text: var(--mr-type-noise-text, #d6d6d6); } + .mr-type-chip.mr-type-chip--sampler { --mr-type-rgb: var(--mr-type-sampler-rgb, 236, 180, 180); --mr-type-text: var(--mr-type-sampler-text, #f2cccc); } + .mr-type-chip.mr-type-chip--sigmas { --mr-type-rgb: var(--mr-type-sigmas-rgb, 205, 255, 205); --mr-type-text: var(--mr-type-sigmas-text, #dcffdc); } + .mr-type-chip.mr-type-chip--guider { --mr-type-rgb: var(--mr-type-guider-rgb, 102, 255, 255); --mr-type-text: var(--mr-type-guider-text, #c7ffff); } + .mr-type-chip.mr-type-chip--taesd { --mr-type-rgb: var(--mr-type-taesd-rgb, 220, 194, 116); --mr-type-text: var(--mr-type-taesd-text, #efd991); } + .mr-card-actions { display: flex; align-items: center; @@ -1350,6 +1480,7 @@ flex-wrap: wrap; flex-shrink: 0; } + .mr-inline-civitai-link { color: var(--mr-text-soft); font-size: var(--mr-font-lg); @@ -1357,6 +1488,7 @@ text-decoration: none; letter-spacing: -0.01em; } + .mr-inline-civitai-link:hover { color: #ffffff; text-decoration: none; @@ -1368,29 +1500,35 @@ grid-template-columns: 1fr 1fr; gap: var(--mr-spacing-8); } + @media (max-width: 700px) { .mr-missing-summary { flex-direction: column; align-items: flex-start; } + .mr-columns { grid-template-columns: 1fr; } + .mr-card-header { flex-direction: column; } + .mr-card-actions { justify-content: flex-start; } } + .mr-column { min-width: 0; background: var(--mr-panel-bg); border: 1px solid transparent; border-radius: 0; padding: var(--mr-spacing-10); - box-shadow: inset 0 0 0 1px rgba(148,163,184,0.06); + box-shadow: inset 0 0 0 1px rgba(148, 163, 184, 0.06); } + .mr-column-header { font-size: var(--mr-font-xs); font-weight: 700; @@ -1401,15 +1539,17 @@ padding-bottom: var(--mr-spacing-6); border-bottom: 1px solid var(--mr-divider); } + .mr-muted-note, .mr-no-matches { padding: var(--mr-spacing-8) var(--mr-spacing-10); border-radius: var(--mr-ui-radius-sm); - background: rgba(255,255,255,0.018); + background: rgba(255, 255, 255, 0.018); border: 1px solid transparent; color: var(--mr-text-muted); font-size: var(--mr-font-sm); } + .mr-missing-browser .mr-column-header { margin-bottom: 9px; padding-bottom: 8px; @@ -1418,15 +1558,18 @@ font-size: 10px; letter-spacing: 0.08em; } + .mr-local-matches-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; } -.mr-local-matches-header > span { + +.mr-local-matches-header>span { min-width: 0; } + .mr-local-matches-refresh-btn, #model-resolver-modal .mr-local-matches-refresh-btn { width: 26px; @@ -1439,25 +1582,29 @@ font-size: 0; line-height: 1; } + .mr-local-matches-refresh-btn .mr-combo-refresh-icon, #model-resolver-modal .mr-local-matches-refresh-btn .mr-combo-refresh-icon { width: 13px; height: 13px; display: block; } + .mr-missing-browser .mr-muted-note, .mr-missing-browser .mr-no-matches { padding: 9px 10px; - background: var(--mr-missing-surface-muted, rgba(255,255,255,0.018)); + background: var(--mr-missing-surface-muted, rgba(255, 255, 255, 0.018)); border: 1px solid transparent; border-radius: var(--mr-missing-control-radius, var(--mr-ui-radius-sm)); } + .mr-inline-note-action { transition: color 0.15s ease, background 0.15s ease; } + .mr-inline-note-action:hover { color: var(--mr-text); - background: rgba(255,255,255,0.05); + background: rgba(255, 255, 255, 0.05); } /* Filename Chips */ @@ -1465,8 +1612,8 @@ display: inline-flex; align-items: center; padding: var(--mr-spacing-5) var(--mr-spacing-10); - background: rgba(255,255,255,0.07); - border: 1px solid rgba(255,255,255,0.08); + background: rgba(255, 255, 255, 0.07); + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 999px; font-family: 'SF Mono', 'Consolas', 'Monaco', monospace; font-size: var(--mr-font-md); @@ -1476,6 +1623,7 @@ text-overflow: ellipsis; white-space: nowrap; } + .mr-chip:hover { background: #444; } @@ -1493,25 +1641,29 @@ text-align: center; border: 1px solid transparent; } + .mr-badge-high { - background: rgba(114,211,138,0.14); + background: rgba(114, 211, 138, 0.14); color: #a7e6b6; - border-color: rgba(114,211,138,0.22); + border-color: rgba(114, 211, 138, 0.22); } + .mr-badge-medium { - background: rgba(225,178,77,0.15); + background: rgba(225, 178, 77, 0.15); color: #efd391; - border-color: rgba(225,178,77,0.2); + border-color: rgba(225, 178, 77, 0.2); } + .mr-badge-low { - background: rgba(224,106,106,0.14); + background: rgba(224, 106, 106, 0.14); color: #efb1b1; - border-color: rgba(224,106,106,0.2); + border-color: rgba(224, 106, 106, 0.2); } + .mr-badge-neutral { - background: rgba(255,255,255,0.06); + background: rgba(255, 255, 255, 0.06); color: #d4d4d4; - border-color: rgba(255,255,255,0.1); + border-color: rgba(255, 255, 255, 0.1); } /* Match Row */ @@ -1522,10 +1674,11 @@ padding: var(--mr-spacing-6) var(--mr-spacing-8); border-radius: var(--mr-ui-radius-sm); margin-bottom: var(--mr-spacing-4); - background: rgba(255,255,255,0.016); + background: rgba(255, 255, 255, 0.016); border: 1px solid transparent; transition: background 0.15s ease, box-shadow 0.15s ease; } + .mr-missing-browser .mr-match-row { display: grid; grid-template-columns: auto minmax(0, 1fr) auto auto; @@ -1533,29 +1686,34 @@ min-height: 44px; margin-bottom: 7px; padding: 9px 10px; - background: var(--mr-missing-surface-muted, rgba(255,255,255,0.016)); + background: var(--mr-missing-surface-muted, rgba(255, 255, 255, 0.016)); border: 1px solid var(--mr-missing-line, transparent); border-radius: var(--mr-missing-control-radius, var(--mr-ui-radius-sm)); box-shadow: none; } + .mr-match-row:hover { - background: rgba(255,255,255,0.032); - box-shadow: inset 0 0 0 1px rgba(255,255,255,0.08); + background: rgba(255, 255, 255, 0.032); + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08); } + .mr-missing-browser .mr-match-row:hover { - background: rgba(255,255,255,0.032); - border-color: var(--mr-missing-line-strong, rgba(255,255,255,0.12)); + background: rgba(255, 255, 255, 0.032); + border-color: var(--mr-missing-line-strong, rgba(255, 255, 255, 0.12)); box-shadow: none; } + .mr-match-row.mr-best-match { - background: rgba(114,211,138,0.08); - box-shadow: inset 0 0 0 1px rgba(114,211,138,0.16); + background: rgba(114, 211, 138, 0.08); + box-shadow: inset 0 0 0 1px rgba(114, 211, 138, 0.16); } + .mr-missing-browser .mr-match-row.mr-best-match { - background: rgba(114,211,138,0.085); - border-color: rgba(114,211,138,0.24); + background: rgba(114, 211, 138, 0.085); + border-color: rgba(114, 211, 138, 0.24); box-shadow: none; } + .mr-match-filename { flex: 1; min-width: 0; @@ -1566,9 +1724,11 @@ font-size: 11.5px; color: var(--mr-text-soft); } + .mr-missing-browser .mr-match-filename { color: var(--mr-text-soft); } + .mr-match-status { display: inline-flex; align-items: center; @@ -1581,14 +1741,17 @@ line-height: 1; white-space: nowrap; } + .mr-match-status-exact { color: #72d38a; - background: rgba(114,211,138,0.10); + background: rgba(114, 211, 138, 0.10); } + .mr-match-status-partial { color: #f1cf64; - background: rgba(241,207,100,0.10); + background: rgba(241, 207, 100, 0.10); } + .mr-local-alternatives-toggle { display: flex; align-items: center; @@ -1598,8 +1761,8 @@ padding: 0 8px; gap: 8px; color: var(--mr-text-muted); - background: rgba(255,255,255,0.022); - border: 1px solid rgba(255,255,255,0.045); + background: rgba(255, 255, 255, 0.022); + border: 1px solid rgba(255, 255, 255, 0.045); border-radius: var(--mr-missing-control-radius, var(--mr-ui-radius-sm)); font-family: inherit; font-size: 11px; @@ -1608,15 +1771,18 @@ box-sizing: border-box; transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease; } + .mr-local-alternatives-toggle:hover { color: var(--mr-text-soft); - background: rgba(255,255,255,0.032); - border-color: rgba(255,255,255,0.06); + background: rgba(255, 255, 255, 0.032); + border-color: rgba(255, 255, 255, 0.06); } + .mr-local-alternatives-toggle:focus-visible { - background: rgba(255,255,255,0.032); + background: rgba(255, 255, 255, 0.032); box-shadow: none; } + .mr-local-alternatives-label { color: var(--mr-text-muted); font-weight: 650; @@ -1624,12 +1790,14 @@ letter-spacing: 0.04em; text-transform: uppercase; } + .mr-local-alternatives-state { margin-left: auto; color: var(--mr-text-dim); font-size: 10px; font-weight: 650; } + .mr-local-alternatives-chevron { width: 7px; height: 7px; @@ -1638,6 +1806,7 @@ transform: rotate(45deg) translateY(-1px); transition: transform 0.15s ease; } + .mr-local-alternatives-toggle[aria-expanded="true"] .mr-local-alternatives-chevron { transform: rotate(225deg) translateY(-1px); } @@ -1653,8 +1822,8 @@ height: var(--mr-missing-search-button-height, 34px); padding: 0 12px; color: var(--mr-text); - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); - border: 1px solid var(--mr-missing-control-border, rgba(255,255,255,0.105)); + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); + border: 1px solid var(--mr-missing-control-border, rgba(255, 255, 255, 0.105)); border-radius: var(--mr-missing-control-radius, 7px); box-shadow: var(--mr-missing-control-shadow, none); box-sizing: border-box; @@ -1668,38 +1837,45 @@ white-space: nowrap; text-decoration: none; } + .mr-btn:hover:not(:disabled), #model-resolver-modal .mr-btn:hover:not(:disabled) { color: var(--mr-text); - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.06)); - border-color: var(--mr-missing-control-border-hover, rgba(255,255,255,0.17)); + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.06)); + border-color: var(--mr-missing-control-border-hover, rgba(255, 255, 255, 0.17)); transform: none; } + .mr-missing-browser .mr-btn, #model-resolver-modal .mr-missing-browser .mr-btn { border-radius: var(--mr-missing-control-radius, var(--mr-ui-radius-sm)); box-shadow: var(--mr-missing-control-shadow, none); } + .mr-missing-browser .mr-btn:hover:not(:disabled), #model-resolver-modal .mr-missing-browser .mr-btn:hover:not(:disabled) { transform: none; } + .mr-btn:disabled, #model-resolver-modal .mr-btn:disabled { opacity: 0.5; cursor: not-allowed; } + .mr-btn:focus-visible, #model-resolver-modal .mr-btn:focus-visible { outline: none; - border-color: var(--mr-missing-control-focus-border, rgba(114,211,138,0.30)); - box-shadow: 0 0 0 2px var(--mr-missing-control-focus-ring, rgba(114,211,138,0.08)); + border-color: var(--mr-missing-control-focus-border, rgba(114, 211, 138, 0.30)); + box-shadow: 0 0 0 2px var(--mr-missing-control-focus-ring, rgba(114, 211, 138, 0.08)); } + @keyframes mr-refresh-spin { to { transform: rotate(360deg); } } + @keyframes mr-suggest-lightbulb-flash { 0% { color: var(--mr-text); @@ -1707,18 +1883,21 @@ filter: none; transform: scale(1); } + 35% { color: #ffd84d; stroke: #ffd84d; - filter: drop-shadow(0 0 7px rgba(255,216,77,0.75)); + filter: drop-shadow(0 0 7px rgba(255, 216, 77, 0.75)); transform: scale(1.12); } + 70% { color: #ffe680; stroke: #ffe680; - filter: drop-shadow(0 0 4px rgba(255,216,77,0.45)); + filter: drop-shadow(0 0 4px rgba(255, 216, 77, 0.45)); transform: scale(1.04); } + 100% { color: var(--mr-text); stroke: var(--mr-text); @@ -1726,6 +1905,7 @@ transform: scale(1); } } + .mr-refresh-spin-target, #model-resolver-modal .mr-refresh-spin-target { display: inline-flex; @@ -1733,88 +1913,102 @@ justify-content: center; line-height: 0; } -.mr-btn.mr-is-refreshing > svg, -#model-resolver-modal .mr-btn.mr-is-refreshing > svg, + +.mr-btn.mr-is-refreshing>svg, +#model-resolver-modal .mr-btn.mr-is-refreshing>svg, .mr-btn.mr-is-refreshing .mr-refresh-spin-target, #model-resolver-modal .mr-btn.mr-is-refreshing .mr-refresh-spin-target { animation: mr-refresh-spin 0.62s linear infinite; transform-origin: center; } + @media (prefers-reduced-motion: reduce) { - .mr-btn.mr-is-refreshing > svg, - #model-resolver-modal .mr-btn.mr-is-refreshing > svg, + + .mr-btn.mr-is-refreshing>svg, + #model-resolver-modal .mr-btn.mr-is-refreshing>svg, .mr-btn.mr-is-refreshing .mr-refresh-spin-target, #model-resolver-modal .mr-btn.mr-is-refreshing .mr-refresh-spin-target { animation: mr-refresh-spin 0.9s linear 1; } } + .mr-btn-primary, #model-resolver-modal .mr-btn-primary { background: var(--mr-accent); - border-color: rgba(114,211,138,0.42); + border-color: rgba(114, 211, 138, 0.42); color: white; } + .mr-btn-primary:hover:not(:disabled), #model-resolver-modal .mr-btn-primary:hover:not(:disabled) { background: var(--mr-accent-hover); - border-color: rgba(114,211,138,0.55); + border-color: rgba(114, 211, 138, 0.55); color: white; } + .mr-btn-secondary, .mr-btn-link, #model-resolver-modal .mr-btn-secondary, #model-resolver-modal .mr-btn-link { - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); color: var(--mr-text); - border-color: var(--mr-missing-control-border, rgba(255,255,255,0.105)); + border-color: var(--mr-missing-control-border, rgba(255, 255, 255, 0.105)); box-shadow: var(--mr-missing-control-shadow, none); } + .mr-missing-browser .mr-btn-secondary, #model-resolver-modal .mr-missing-browser .mr-btn-secondary { - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); - border-color: var(--mr-missing-control-border, var(--mr-missing-line-strong, rgba(255,255,255,0.12))); + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); + border-color: var(--mr-missing-control-border, var(--mr-missing-line-strong, rgba(255, 255, 255, 0.12))); } + .mr-btn-secondary:hover:not(:disabled), .mr-btn-link:hover:not(:disabled), #model-resolver-modal .mr-btn-secondary:hover:not(:disabled), #model-resolver-modal .mr-btn-link:hover:not(:disabled) { - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.06)); + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.06)); color: var(--mr-text); - border-color: var(--mr-missing-control-border-hover, rgba(255,255,255,0.17)); + border-color: var(--mr-missing-control-border-hover, rgba(255, 255, 255, 0.17)); transform: none; } + .mr-missing-browser .mr-btn-secondary:hover:not(:disabled), #model-resolver-modal .mr-missing-browser .mr-btn-secondary:hover:not(:disabled) { - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.055)); - border-color: var(--mr-missing-control-border-hover, rgba(255,255,255,0.18)); + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.055)); + border-color: var(--mr-missing-control-border-hover, rgba(255, 255, 255, 0.18)); transform: none; } + .mr-btn-download, #model-resolver-modal .mr-btn-download { background: var(--mr-accent); - border-color: rgba(114,211,138,0.42); + border-color: rgba(114, 211, 138, 0.42); color: #101010; - box-shadow: 0 8px 18px rgba(114,211,138,0.18); + box-shadow: 0 8px 18px rgba(114, 211, 138, 0.18); } + .mr-btn-download:hover:not(:disabled), #model-resolver-modal .mr-btn-download:hover:not(:disabled) { background: var(--mr-accent-hover); - border-color: rgba(114,211,138,0.55); + border-color: rgba(114, 211, 138, 0.55); color: #101010; transform: none; } + .mr-btn-danger, #model-resolver-modal .mr-btn-danger { background: #f44336; - border-color: rgba(244,67,54,0.52); + border-color: rgba(244, 67, 54, 0.52); color: white; } + .mr-btn-danger:hover:not(:disabled), #model-resolver-modal .mr-btn-danger:hover:not(:disabled) { background: #d32f2f; - border-color: rgba(211,47,47,0.62); + border-color: rgba(211, 47, 47, 0.62); color: white; } + .mr-btn-sm, #model-resolver-modal .mr-btn-sm { min-height: var(--mr-missing-search-button-height, 34px); @@ -1825,29 +2019,34 @@ font-weight: 700; line-height: 1; } + .mr-btn-ghost { - background: rgba(255,255,255,0.018); + background: rgba(255, 255, 255, 0.018); color: var(--mr-text-muted); - border-color: rgba(255,255,255,0.08); + border-color: rgba(255, 255, 255, 0.08); box-shadow: none; } + .mr-btn-ghost:hover:not(:disabled) { - background: rgba(255,255,255,0.04); + background: rgba(255, 255, 255, 0.04); color: var(--mr-text); - border-color: rgba(255,255,255,0.14); + border-color: rgba(255, 255, 255, 0.14); } + .mr-btn-utility { padding-inline: 6px; font-weight: 600; letter-spacing: 0.01em; color: var(--mr-text-soft); } + .mr-btn-link-compact { min-width: 58px; gap: var(--mr-spacing-4); padding-inline: 5px; font-size: 8.75px; } + .mr-missing-browser .mr-local-link-btn, .mr-missing-browser .mr-btn-link-compact { position: relative; @@ -1862,9 +2061,10 @@ color: var(--mr-text-muted); font-size: 0; font-weight: 650; - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); - border-color: var(--mr-missing-control-border, rgba(255,255,255,0.09)); + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); + border-color: var(--mr-missing-control-border, rgba(255, 255, 255, 0.09)); } + .mr-missing-browser .mr-local-link-btn::before, .mr-missing-browser .mr-btn-link-compact::before { content: "Link"; @@ -1875,16 +2075,19 @@ font-size: 10px; line-height: 1; } -.mr-missing-browser .mr-local-link-btn > *, -.mr-missing-browser .mr-btn-link-compact > * { + +.mr-missing-browser .mr-local-link-btn>*, +.mr-missing-browser .mr-btn-link-compact>* { display: none; } + .mr-missing-browser .mr-local-link-btn:hover:not(:disabled), .mr-missing-browser .mr-btn-link-compact:hover:not(:disabled) { color: var(--mr-text); - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.05)); - border-color: var(--mr-missing-control-border-hover, rgba(255,255,255,0.16)); + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.05)); + border-color: var(--mr-missing-control-border-hover, rgba(255, 255, 255, 0.16)); } + .mr-missing-browser .mr-local-link-btn { flex: 0 0 30px; width: 30px; @@ -1893,18 +2096,22 @@ min-height: 30px; padding: 0; } -.mr-missing-browser .mr-local-link-btn > * { + +.mr-missing-browser .mr-local-link-btn>* { display: none; } + .mr-missing-browser .mr-local-link-btn::before { content: none; display: none; } -.mr-missing-browser .mr-local-link-btn > svg { + +.mr-missing-browser .mr-local-link-btn>svg { display: block !important; width: 14px; height: 14px; } + .mr-btn-icon-only, #model-resolver-modal .mr-btn-icon-only { width: var(--mr-missing-search-button-height, 34px); @@ -1914,40 +2121,46 @@ padding: 0; aspect-ratio: 1; } + .mr-btn-icon, #model-resolver-modal .mr-btn-icon { font-size: var(--mr-font-md); } + .mr-btn-icon svg, #model-resolver-modal .mr-btn-icon svg { width: var(--mr-font-base); height: var(--mr-font-base); display: block; } + .mr-card-actions .mr-btn, .mr-match-row .mr-btn, .mr-combo-row .mr-btn { min-height: 28px; } + .mr-search-source-btn { border-radius: 999px; padding-inline: 11px; - background: rgba(255,255,255,0.03); + background: rgba(255, 255, 255, 0.03); color: var(--mr-text); - border-color: rgba(255,255,255,0.1); - box-shadow: inset 0 1px 0 rgba(255,255,255,0.02); + border-color: rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.02); } + .mr-search-source-btn.mr-btn-primary { - background: rgba(255,255,255,0.03); + background: rgba(255, 255, 255, 0.03); color: var(--mr-text); - border-color: rgba(255,255,255,0.1); - box-shadow: inset 0 1px 0 rgba(255,255,255,0.02); + border-color: rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.02); } + .mr-search-source-btn:hover:not(:disabled), .mr-search-source-btn.mr-btn-primary:hover:not(:disabled) { - background: rgba(255,255,255,0.05); + background: rgba(255, 255, 255, 0.05); color: var(--mr-text); - border-color: rgba(255,255,255,0.16); + border-color: rgba(255, 255, 255, 0.16); } /* Download Section */ @@ -1959,38 +2172,45 @@ background: var(--mr-surface-elevated); border-radius: 0; border: 1px solid transparent; - box-shadow: inset 0 0 0 1px rgba(255,255,255,0.05); + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.05); } + .mr-missing-browser .mr-download-section { padding: 10px; gap: 10px; - background: rgba(255,255,255,0.012); - border: 1px solid rgba(255,255,255,0.045); + background: rgba(255, 255, 255, 0.012); + border: 1px solid rgba(255, 255, 255, 0.045); border-radius: var(--mr-missing-control-radius, var(--mr-ui-radius-sm)); box-shadow: none; } + .mr-status-inline { display: flex; align-items: center; gap: var(--mr-spacing-8); flex-wrap: wrap; } + .mr-download-info { font-size: var(--mr-font-sm); color: var(--mr-text-muted); margin-top: 0; line-height: 1.55; } + .mr-missing-browser .mr-status-inline { gap: 7px; } + .mr-missing-browser .mr-download-info { font-size: 11px; } + .mr-download-size { color: var(--mr-text-dim); margin-left: var(--mr-spacing-8); } + .mr-search-source-bar { display: grid; grid-template-columns: 82px minmax(0, 0.85fr) minmax(0, 1fr); @@ -1998,11 +2218,13 @@ gap: 10px; margin-bottom: 0; } + .mr-search-button-picker { width: 82px; min-width: 82px; } -.mr-download-section .mr-search-button-picker > .mr-btn { + +.mr-download-section .mr-search-button-picker>.mr-btn { height: var(--mr-download-control-height); min-height: var(--mr-download-control-height); width: 100%; @@ -2016,6 +2238,7 @@ gap: 8px; white-space: normal; } + .mr-search-btn-text { display: inline-flex; flex-direction: column; @@ -2025,20 +2248,24 @@ line-height: 1.05; text-align: center; } + .mr-search-btn-line { display: block; } -.mr-missing-browser .mr-download-section .mr-search-button-picker > .mr-btn { - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); - border-color: var(--mr-missing-control-border, rgba(255,255,255,0.105)); + +.mr-missing-browser .mr-download-section .mr-search-button-picker>.mr-btn { + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); + border-color: var(--mr-missing-control-border, rgba(255, 255, 255, 0.105)); border-radius: var(--mr-missing-control-radius, 7px); box-shadow: var(--mr-missing-control-shadow, none); } -.mr-missing-browser .mr-download-section .mr-search-button-picker > .mr-btn:hover:not(:disabled) { - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.06)); - border-color: var(--mr-missing-control-border-hover, rgba(255,255,255,0.17)); + +.mr-missing-browser .mr-download-section .mr-search-button-picker>.mr-btn:hover:not(:disabled) { + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.06)); + border-color: var(--mr-missing-control-border-hover, rgba(255, 255, 255, 0.17)); transform: none; } + .mr-search-source-picker { display: grid; grid-template-columns: minmax(0, 1fr); @@ -2047,6 +2274,7 @@ min-width: 0; width: 100%; } + .mr-search-source-picker-label { display: flex; align-items: center; @@ -2058,6 +2286,7 @@ text-transform: uppercase; white-space: nowrap; } + .mr-search-source-picker-label .mr-search-model-help { width: 14px; height: 14px; @@ -2066,13 +2295,14 @@ line-height: 1; transform: translateY(-1px); } + .mr-search-source-select, .mr-search-base-select { width: 100%; height: var(--mr-download-control-height); min-height: var(--mr-download-control-height); padding: 0 11px; - background: rgba(255,255,255,0.04); + background: rgba(255, 255, 255, 0.04); color: var(--mr-text); border: 1px solid var(--mr-border); border-radius: 9px; @@ -2082,46 +2312,55 @@ appearance: none; box-sizing: border-box; } + .mr-missing-browser .mr-search-source-select, .mr-missing-browser .mr-search-base-select { - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); - border-color: var(--mr-missing-control-border, var(--mr-missing-line-strong, rgba(255,255,255,0.12))); + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); + border-color: var(--mr-missing-control-border, var(--mr-missing-line-strong, rgba(255, 255, 255, 0.12))); border-radius: var(--mr-missing-control-radius, 7px); } + .mr-missing-browser .mr-search-source-select:focus, .mr-missing-browser .mr-search-base-select:focus { - border-color: var(--mr-missing-control-focus-border, rgba(114,211,138,0.4)); - box-shadow: 0 0 0 2px var(--mr-missing-control-focus-ring, rgba(114,211,138,0.12)); + border-color: var(--mr-missing-control-focus-border, rgba(114, 211, 138, 0.4)); + box-shadow: 0 0 0 2px var(--mr-missing-control-focus-ring, rgba(114, 211, 138, 0.12)); } + .mr-search-source-select:focus, .mr-search-base-select:focus { - border-color: rgba(114,211,138,0.4); - box-shadow: 0 0 0 3px rgba(114,211,138,0.12); + border-color: rgba(114, 211, 138, 0.4); + box-shadow: 0 0 0 3px rgba(114, 211, 138, 0.12); } + @media (max-width: 720px) { .mr-search-source-bar { grid-template-columns: 1fr; } - .mr-download-section .mr-search-source-bar > .mr-btn { + + .mr-download-section .mr-search-source-bar>.mr-btn { justify-self: start; } } + .mr-search-results { margin-top: 8px; display: none; } + .mr-search-results-table-wrap { margin-top: 8px; overflow-x: auto; - background: rgba(255,255,255,0.025); + background: rgba(255, 255, 255, 0.025); border: 1px solid var(--mr-border); border-radius: 8px; } + .mr-missing-browser .mr-search-results-table-wrap { - background: rgba(255,255,255,0.018); - border-color: rgba(255,255,255,0.052); + background: rgba(255, 255, 255, 0.018); + border-color: rgba(255, 255, 255, 0.052); border-radius: var(--mr-missing-radius, 7px); } + .mr-search-results-table { width: 100%; min-width: var(--mr-table-min, 520px); @@ -2129,44 +2368,55 @@ table-layout: fixed; font-size: 11px; } + .mr-search-results-table th, .mr-search-results-table td { padding: 7px 10px; - border-bottom: 1px solid rgba(255,255,255,0.065); + border-bottom: 1px solid rgba(255, 255, 255, 0.065); vertical-align: middle; } + .mr-search-results-table th { color: var(--mr-text-muted); font-size: 10px; font-weight: 700; text-align: center; - background: rgba(255,255,255,0.035); + background: rgba(255, 255, 255, 0.035); } + .mr-missing-browser .mr-search-results-table th { - background: var(--mr-missing-surface-raised, rgba(255,255,255,0.04)); + background: var(--mr-missing-surface-raised, rgba(255, 255, 255, 0.04)); color: #bdbdbd; } + .mr-search-results-table tr:last-child td { border-bottom: 0; } + .mr-search-col-source { width: var(--mr-source-col, 118px); } + .mr-search-col-model { width: auto; } + .mr-search-col-match { width: var(--mr-match-col, 64px); } + .mr-search-col-size { width: var(--mr-size-col, 64px); } + .mr-search-col-actions { width: var(--mr-actions-col, 72px); } + .mr-search-results-table td:nth-child(3) { text-align: center; } + .mr-search-source-pill { display: inline-flex; gap: 5px; @@ -2176,25 +2426,28 @@ padding: 2px 7px; overflow: hidden; color: var(--mr-text); - background: rgba(255,255,255,0.1); - border: 1px solid rgba(255,255,255,0.08); + background: rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 999px; font-size: 9px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; } + .mr-search-source-cell { display: inline-grid; max-width: 100%; gap: 3px; justify-items: start; } -.mr-search-source-pill > span { + +.mr-search-source-pill>span { min-width: 0; overflow: hidden; text-overflow: ellipsis; } + .mr-search-source-date { display: block; max-width: 100%; @@ -2206,17 +2459,20 @@ text-overflow: ellipsis; white-space: nowrap; } + .mr-search-source-icon { display: block; flex: 0 0 12px; width: 12px; height: 12px; } + .mr-search-result-model { display: grid; min-width: 0; gap: 2px; } + .mr-search-result-model span, .mr-search-result-model small { min-width: 0; @@ -2224,41 +2480,51 @@ text-overflow: ellipsis; white-space: nowrap; } + .mr-search-result-model span { color: var(--mr-text); font-weight: 650; } + .mr-model-version { color: var(--mr-text-secondary); font-style: italic; font-weight: 500; } + .mr-search-result-model small, .mr-search-size, .mr-search-result-empty { color: var(--mr-text-muted); font-size: 10px; } + .mr-search-size { min-width: 0; text-align: center; white-space: nowrap; } + .mr-search-match { font-weight: 750; } + .mr-search-match-strong { color: #72d38a; } + .mr-search-match-medium { color: #f1cf64; } + .mr-search-match-weak { color: #8fd0ff; } + .mr-search-match-neutral { color: var(--mr-text-muted); } + .mr-search-result-actions { display: flex; align-items: center; @@ -2268,6 +2534,7 @@ min-width: 0; width: 100%; } + #model-resolver-modal .mr-search-result-action-btn { display: inline-flex; align-items: center; @@ -2280,11 +2547,11 @@ flex: 0 0 24px; margin: 0; padding: 0; - border: 1px solid var(--mr-missing-control-border, rgba(255,255,255,0.1)); + border: 1px solid var(--mr-missing-control-border, rgba(255, 255, 255, 0.1)); border-radius: var(--mr-missing-control-radius, 7px); - background: var(--mr-missing-control-bg, rgba(255,255,255,0.03)); + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.03)); color: var(--mr-text); - box-shadow: var(--mr-missing-control-shadow, inset 0 1px 0 rgba(255,255,255,0.02)); + box-shadow: var(--mr-missing-control-shadow, inset 0 1px 0 rgba(255, 255, 255, 0.02)); box-sizing: border-box; cursor: pointer; appearance: none; @@ -2299,11 +2566,13 @@ overflow: hidden; transition: var(--mr-missing-control-transition, background 0.15s ease, border-color 0.15s ease, color 0.15s ease); } + #model-resolver-modal .mr-search-result-action-btn:hover:not(:disabled) { - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.05)); - border-color: var(--mr-missing-control-border-hover, rgba(255,255,255,0.16)); + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.05)); + border-color: var(--mr-missing-control-border-hover, rgba(255, 255, 255, 0.16)); transform: none; } + #model-resolver-modal .mr-search-result-action-btn svg { width: var(--mr-missing-icon-size, 13px); height: var(--mr-missing-icon-size, 13px); @@ -2311,11 +2580,13 @@ flex: 0 0 var(--mr-missing-icon-size, 13px); pointer-events: none; } + .mr-search-progress-list { display: grid; gap: 6px; margin: 8px 0; } + .mr-search-progress-list-compact { display: flex; gap: 6px; @@ -2324,12 +2595,14 @@ overflow-x: auto; scrollbar-width: thin; } + .mr-search-progress-item { padding: 6px 8px; - background: rgba(255,255,255,0.035); + background: rgba(255, 255, 255, 0.035); border: 1px solid var(--mr-border); border-radius: 8px; } + .mr-search-progress-list-compact .mr-search-progress-item { display: inline-flex; align-items: center; @@ -2340,10 +2613,12 @@ padding: 3px 8px; border-radius: 999px; } + .mr-missing-browser .mr-search-progress-list-compact .mr-search-progress-item { - background: var(--mr-missing-surface, rgba(255,255,255,0.024)); - border-color: var(--mr-missing-line, rgba(255,255,255,0.075)); + background: var(--mr-missing-surface, rgba(255, 255, 255, 0.024)); + border-color: var(--mr-missing-line, rgba(255, 255, 255, 0.075)); } + .mr-search-progress-list-compact .mr-search-progress-item::before { content: ""; flex: 0 0 6px; @@ -2352,18 +2627,23 @@ border-radius: 999px; background: var(--mr-text-muted); } + .mr-search-progress-list-compact .mr-search-progress-found::before { background: #72d38a; } + .mr-search-progress-list-compact .mr-search-progress-none::before { - background: rgba(255,255,255,0.48); + background: rgba(255, 255, 255, 0.48); } + .mr-search-progress-list-compact .mr-search-progress-error::before { background: #ff8a80; } + .mr-search-progress-list-compact .mr-search-progress-cancelled::before { - background: rgba(255,255,255,0.38); + background: rgba(255, 255, 255, 0.38); } + .mr-search-progress-list-compact .mr-search-progress-source, .mr-search-progress-list-compact .mr-search-progress-status { min-width: 0; @@ -2372,19 +2652,24 @@ white-space: nowrap; font-size: 10px; } + .mr-search-progress-list-compact .mr-search-progress-source { color: var(--mr-text); font-weight: 700; } + .mr-search-progress-list-compact .mr-search-progress-status { color: var(--mr-text-muted); } + .mr-search-progress-list-compact .mr-search-progress-found .mr-search-progress-status { color: #72d38a; } + .mr-search-progress-list-compact .mr-search-progress-error .mr-search-progress-status { color: #ff8a80; } + .mr-search-progress-head { display: flex; align-items: center; @@ -2394,21 +2679,25 @@ font-size: 11px; color: var(--mr-text-muted); } + .mr-search-progress-head span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .mr-search-progress-head span:first-child { color: var(--mr-text); font-weight: 600; } + .mr-search-progress-head .mr-search-progress-status { flex: 0 1 auto; max-width: 55%; text-align: right; } + #model-resolver-modal .mr-search-result-action-btn.mr-search-progress-cancel, #model-resolver-modal .mr-missing-detail-pane .mr-search-result-action-btn.mr-search-progress-cancel { width: 16px; @@ -2423,12 +2712,14 @@ background: rgba(255, 120, 112, 0.055); color: #ff8a80; } + #model-resolver-modal .mr-search-result-action-btn.mr-search-progress-cancel:hover:not(:disabled), #model-resolver-modal .mr-missing-detail-pane .mr-search-result-action-btn.mr-search-progress-cancel:hover:not(:disabled) { background: rgba(255, 120, 112, 0.12); border-color: rgba(255, 120, 112, 0.48); color: #ffd2ce; } + #model-resolver-modal .mr-search-result-action-btn.mr-search-progress-cancel svg, #model-resolver-modal .mr-missing-detail-pane .mr-search-result-action-btn.mr-search-progress-cancel svg { width: 9px; @@ -2437,48 +2728,59 @@ color: currentColor; stroke: currentColor; } + .mr-search-progress-bar { height: 5px; overflow: hidden; - background: rgba(255,255,255,0.08); + background: rgba(255, 255, 255, 0.08); border-radius: 5px; } + .mr-search-progress-fill { height: 100%; background: var(--mr-accent); border-radius: inherit; transition: width 0.42s ease, background 0.2s ease; } + .mr-search-progress-running .mr-search-progress-fill { - background: linear-gradient(90deg, rgba(114,211,138,0.62), var(--mr-accent)); + background: linear-gradient(90deg, rgba(114, 211, 138, 0.62), var(--mr-accent)); } + .mr-search-progress-found .mr-search-progress-fill { background: #72d38a; } + .mr-search-progress-none .mr-search-progress-fill { - background: rgba(255,255,255,0.32); + background: rgba(255, 255, 255, 0.32); } + .mr-search-progress-error .mr-search-progress-fill { background: #ff8a80; } + .mr-search-progress-cancelled .mr-search-progress-fill { - background: rgba(255,255,255,0.28); + background: rgba(255, 255, 255, 0.28); } + .mr-combo-section { position: relative; margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--mr-divider); } + .mr-missing-browser .mr-combo-section { border-top-color: var(--mr-missing-line, var(--mr-divider)); } + .mr-combo-row { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; } + .mr-combo-label { opacity: 0.9; font-size: 10px; @@ -2488,12 +2790,13 @@ letter-spacing: 0.08em; text-transform: uppercase; } + .mr-combo-input { flex: 1; min-width: 0; min-height: 30px; padding: 5px 10px; - background: rgba(255,255,255,0.04); + background: rgba(255, 255, 255, 0.04); color: var(--mr-text); border: 1px solid var(--mr-border); border-radius: 10px; @@ -2501,16 +2804,19 @@ outline: none; transition: border-color 0.16s ease, box-shadow 0.16s ease, background 0.16s ease; } + .mr-missing-browser .mr-combo-input { min-height: 34px; - background: rgba(255,255,255,0.035); - border-color: var(--mr-missing-line-strong, rgba(255,255,255,0.12)); + background: rgba(255, 255, 255, 0.035); + border-color: var(--mr-missing-line-strong, rgba(255, 255, 255, 0.12)); border-radius: var(--mr-missing-control-radius, 7px); } + .mr-combo-input:focus { - border-color: rgba(114,211,138,0.4); - box-shadow: 0 0 0 3px rgba(114,211,138,0.12); + border-color: rgba(114, 211, 138, 0.4); + box-shadow: 0 0 0 3px rgba(114, 211, 138, 0.12); } + .mr-combo-list { position: absolute; top: calc(100% + 4px); @@ -2526,33 +2832,39 @@ border-radius: 12px; box-shadow: var(--mr-shadow-elevated); } + .mr-missing-browser .mr-combo-list { background: #1b1b1b; - border-color: var(--mr-missing-line-strong, rgba(255,255,255,0.12)); + border-color: var(--mr-missing-line-strong, rgba(255, 255, 255, 0.12)); border-radius: var(--mr-missing-radius, 7px); - box-shadow: 0 16px 36px rgba(0,0,0,0.3); + box-shadow: 0 16px 36px rgba(0, 0, 0, 0.3); } + .mr-combo-option { padding: 8px 10px; cursor: pointer; - border-bottom: 1px solid rgba(255,255,255,0.04); + border-bottom: 1px solid rgba(255, 255, 255, 0.04); font-size: 12px; color: var(--mr-text); background: transparent; transition: background 0.14s ease, color 0.14s ease; } + .mr-combo-option:last-child { border-bottom: none; } + .mr-combo-option:hover, .mr-combo-option.is-highlighted { - background: rgba(114,211,138,0.12); + background: rgba(114, 211, 138, 0.12); } + .mr-combo-option-row { display: flex; align-items: center; gap: 6px; } + .mr-combo-option code { flex: 1 1 0%; white-space: nowrap; @@ -2560,6 +2872,7 @@ text-overflow: ellipsis; color: var(--mr-text); } + .mr-combo-folder { margin-top: 4px; font-size: 10px; @@ -2569,6 +2882,7 @@ text-overflow: ellipsis; white-space: nowrap; } + .mr-combo-list.mr-local-model-browser { box-sizing: border-box; left: auto; @@ -2579,36 +2893,43 @@ padding: 0; z-index: var(--mr-z-context-menu); } + .mr-local-model-browser-scroll { box-sizing: border-box; overflow: auto; padding: 6px; } + .mr-local-model-browser .mr-folder-browser-root.is-preferred { - border-color: rgba(114,211,138,0.18); - background: rgba(114,211,138,0.035); + border-color: rgba(114, 211, 138, 0.18); + background: rgba(114, 211, 138, 0.035); } + .mr-local-model-browser .mr-folder-browser-root-title { font-size: 11px; } + .mr-local-model-row { min-height: 30px; } + .mr-local-model-file-icon { - color: rgba(120,170,255,0.95); + color: rgba(120, 170, 255, 0.95); } + .mr-local-model-folder-tag { min-width: 0; max-width: 42%; padding: 2px 6px; border-radius: 999px; - background: rgba(255,255,255,0.045); + background: rgba(255, 255, 255, 0.045); color: var(--mr-text-muted); font-size: 10px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .mr-local-model-folder-row { font-weight: 700; } @@ -2622,27 +2943,32 @@ border-radius: 10px; font-size: 13px; margin-top: 8px; - border: 1px solid rgba(255,255,255,0.06); + border: 1px solid rgba(255, 255, 255, 0.06); } + .mr-status-icon { font-size: 16px; flex-shrink: 0; } + .mr-status-error { background: rgba(244, 67, 54, 0.1); border: 1px solid rgba(244, 67, 54, 0.3); color: #ef9a9a; } + .mr-status-success { background: rgba(76, 175, 80, 0.1); border: 1px solid rgba(76, 175, 80, 0.3); color: #a5d6a7; } + .mr-status-info { background: rgba(33, 150, 243, 0.1); border: 1px solid rgba(33, 150, 243, 0.3); color: #90caf9; } + .mr-status-warning { background: rgba(255, 152, 0, 0.1); border: 1px solid rgba(255, 152, 0, 0.3); @@ -2653,17 +2979,20 @@ .mr-progress-container { margin-top: 8px; } + .mr-progress-bar { height: 6px; background: #333; border-radius: 3px; overflow: hidden; } + .mr-progress-fill { height: 100%; background: var(--mr-accent); transition: width 0.3s ease; } + .mr-progress-text { display: flex; justify-content: space-between; @@ -2673,12 +3002,14 @@ font-size: 11px; color: var(--mr-text-muted); } -.mr-progress-text > span:first-child { + +.mr-progress-text>span:first-child { min-width: 0; overflow: hidden; text-overflow: ellipsis; } -.mr-progress-text > span:last-child { + +.mr-progress-text>span:last-child { flex: 0 0 auto; text-align: right; white-space: nowrap; @@ -2688,16 +3019,20 @@ .mr-scrollable { overflow-y: auto; } + .mr-scrollable::-webkit-scrollbar { width: 8px; } + .mr-scrollable::-webkit-scrollbar-track { background: transparent; } + .mr-scrollable::-webkit-scrollbar-thumb { background: #444; border-radius: 4px; } + .mr-scrollable::-webkit-scrollbar-thumb:hover { background: #555; } @@ -2711,12 +3046,14 @@ gap: 10px; flex-wrap: wrap; padding: 0 16px; - background: linear-gradient(180deg, rgba(255,255,255,0.018) 0%, rgba(255,255,255,0.032) 100%); - border-top: 1px solid rgba(255,255,255,0.08); + background: linear-gradient(180deg, rgba(255, 255, 255, 0.018) 0%, rgba(255, 255, 255, 0.032) 100%); + border-top: 1px solid rgba(255, 255, 255, 0.08); } + .mr-footer.mr-footer-is-missing { justify-content: flex-end; } + .mr-footer-actions { display: flex; justify-content: flex-end; @@ -2727,9 +3064,11 @@ margin-left: auto; min-width: 0; } + .mr-footer:not(.mr-footer-is-missing) .mr-footer-actions { display: none; } + .mr-footer-star-link { display: flex; align-items: center; @@ -2742,20 +3081,25 @@ flex: 0 1 auto; white-space: nowrap; } + .mr-footer.mr-footer-is-missing .mr-footer-star-link { flex: 0 0 auto; margin-right: auto; } + .mr-footer-star-link.mr-footer-star-hidden { display: none; } + .mr-footer-star-link:hover, .mr-footer-star-link:focus-visible { color: #d7d7d7; } + .mr-footer-star-link:focus-visible { outline: none; } + .mr-footer-star-icon { display: inline-flex; align-items: center; @@ -2765,23 +3109,27 @@ flex: 0 0 18px; border-radius: 50%; color: #f2cc60; - background: rgba(242,204,96,0.14); - border: 1px solid rgba(242,204,96,0.42); + background: rgba(242, 204, 96, 0.14); + border: 1px solid rgba(242, 204, 96, 0.42); box-shadow: none; } + .mr-footer-star-icon svg { width: 10px; height: 10px; display: block; flex: 0 0 auto; } + .mr-footer-star-text { min-width: 0; } + .mr-footer-star-text span { color: #f2cc60; font-weight: 700; } + .mr-footer-btn { min-height: 34px; min-width: 138px; @@ -2791,13 +3139,16 @@ line-height: 1; backdrop-filter: none; } + .mr-footer-menu-wrap { position: relative; display: inline-flex; } + .mr-footer-menu-button { justify-content: center; } + .mr-footer-menu-button::after { content: ""; width: 9px; @@ -2809,10 +3160,12 @@ transform: rotate(0deg); transition: transform 0.15s ease, opacity 0.15s ease; } + .mr-footer-menu-button[aria-expanded="true"]::after { transform: rotate(180deg); opacity: 0.95; } + .mr-footer-menu { display: none; position: absolute; @@ -2822,16 +3175,18 @@ max-height: min(420px, calc(100vh - 140px)); overflow-y: auto; padding: 5px; - border: 1px solid rgba(255,255,255,0.105); + border: 1px solid rgba(255, 255, 255, 0.105); border-radius: 8px; - background: rgba(31,31,35,0.98); - box-shadow: 0 18px 38px rgba(0,0,0,0.34); + background: rgba(31, 31, 35, 0.98); + box-shadow: 0 18px 38px rgba(0, 0, 0, 0.34); z-index: var(--mr-z-dropdown, 10020); } + .mr-footer-menu.is-open { display: grid; gap: 2px; } + .mr-footer-menu-item { min-height: 30px; padding: 0 10px; @@ -2844,6 +3199,7 @@ text-align: left; cursor: pointer; } + #model-resolver-modal .mr-footer-menu .mr-footer-menu-item { width: 100%; min-height: 30px; @@ -2862,6 +3218,7 @@ text-align: left; justify-content: flex-start; } + .mr-footer-menu-checkbox, #model-resolver-modal .mr-footer-menu .mr-footer-menu-checkbox { display: inline-flex; @@ -2869,6 +3226,7 @@ gap: 8px; cursor: pointer; } + .mr-footer-menu-checkbox-input { width: 13px; height: 13px; @@ -2876,84 +3234,97 @@ accent-color: #72d38a; flex: 0 0 auto; } + .mr-footer-menu-item:hover, .mr-footer-menu-item:focus-visible { outline: none; - background: rgba(255,255,255,0.07); + background: rgba(255, 255, 255, 0.07); } + .mr-footer-menu-item:disabled, .mr-footer-menu-item.mr-btn-is-disabled { - color: rgba(255,255,255,0.34); + color: rgba(255, 255, 255, 0.34); cursor: not-allowed; } + .mr-footer-menu-item:disabled:hover, .mr-footer-menu-item.mr-btn-is-disabled:hover, .mr-footer-menu-item:disabled:focus-visible, .mr-footer-menu-item.mr-btn-is-disabled:focus-visible { background: transparent; } + #model-resolver-modal .mr-footer-menu .mr-footer-menu-item:hover, #model-resolver-modal .mr-footer-menu .mr-footer-menu-item:focus-visible { outline: none; - background: rgba(255,255,255,0.07) !important; + background: rgba(255, 255, 255, 0.07) !important; } + #model-resolver-modal .mr-footer-menu .mr-footer-menu-item:disabled, #model-resolver-modal .mr-footer-menu .mr-footer-menu-item.mr-btn-is-disabled { - color: rgba(255,255,255,0.34); + color: rgba(255, 255, 255, 0.34); cursor: not-allowed; } + #model-resolver-modal .mr-footer-menu .mr-footer-menu-item:disabled:hover, #model-resolver-modal .mr-footer-menu .mr-footer-menu-item.mr-btn-is-disabled:hover, #model-resolver-modal .mr-footer-menu .mr-footer-menu-item:disabled:focus-visible, #model-resolver-modal .mr-footer-menu .mr-footer-menu-item.mr-btn-is-disabled:focus-visible { background: transparent !important; } + #model-resolver-modal .mr-footer-menu .mr-footer-menu-danger { color: var(--mr-color-error-light, #f55); } + #model-resolver-modal .mr-footer-menu .mr-footer-menu-danger:hover, #model-resolver-modal .mr-footer-menu .mr-footer-menu-danger:focus-visible { background: var(--mr-bg-error-10, rgba(255, 0, 0, 0.1)) !important; } + .mr-footer-menu-divider { height: 1px; margin: 4px 2px; - background: rgba(255,255,255,0.08); + background: rgba(255, 255, 255, 0.08); } + .mr-btn.mr-footer-btn, .mr-btn.mr-btn-primary.mr-footer-btn, .mr-btn.mr-btn-download.mr-footer-btn { - background: rgba(255,255,255,0.035); + background: rgba(255, 255, 255, 0.035); color: var(--mr-text); - border-color: rgba(255,255,255,0.11); + border-color: rgba(255, 255, 255, 0.11); box-shadow: none; } + .mr-btn.mr-footer-btn:hover:not(:disabled), .mr-btn.mr-btn-primary.mr-footer-btn:hover:not(:disabled), .mr-btn.mr-btn-download.mr-footer-btn:hover:not(:disabled) { - background: rgba(255,255,255,0.05); + background: rgba(255, 255, 255, 0.05); color: var(--mr-text); - border-color: rgba(255,255,255,0.16); + border-color: rgba(255, 255, 255, 0.16); box-shadow: none; transform: none; } + .mr-btn.mr-footer-btn:disabled, .mr-btn.mr-btn-primary.mr-footer-btn:disabled, .mr-btn.mr-btn-download.mr-footer-btn:disabled { opacity: 1; - color: rgba(255,255,255,0.34); - background: rgba(255,255,255,0.016); - border-color: rgba(255,255,255,0.055); + color: rgba(255, 255, 255, 0.34); + background: rgba(255, 255, 255, 0.016); + border-color: rgba(255, 255, 255, 0.055); box-shadow: none; cursor: not-allowed; } + .mr-btn.mr-footer-btn.mr-btn-is-disabled, .mr-btn.mr-btn-primary.mr-footer-btn.mr-btn-is-disabled, .mr-btn.mr-btn-download.mr-footer-btn.mr-btn-is-disabled { opacity: 1; - color: rgba(255,255,255,0.34); - background: rgba(255,255,255,0.016); - border-color: rgba(255,255,255,0.055); + color: rgba(255, 255, 255, 0.34); + background: rgba(255, 255, 255, 0.016); + border-color: rgba(255, 255, 255, 0.055); box-shadow: none; cursor: not-allowed; } @@ -2974,10 +3345,11 @@ z-index: 2; --mr-tab-active-bg: var(--mr-bg, #121212); --mr-tab-corner-size: 15px; - --mr-tab-hover-bg: rgba(255,255,255,0.075); - --mr-tab-separator: rgba(255,255,255,0.125); + --mr-tab-hover-bg: rgba(255, 255, 255, 0.075); + --mr-tab-separator: rgba(255, 255, 255, 0.125); cursor: default; } + .mr-tab { display: inline-flex; align-items: center; @@ -2993,7 +3365,7 @@ border: 0; border-radius: 0; overflow: visible; - color: rgba(255,255,255,0.68); + color: rgba(255, 255, 255, 0.68); font-size: 12px; font-weight: 600; line-height: 1; @@ -3006,6 +3378,7 @@ -webkit-appearance: none; transition: none; } + .mr-tab-label { position: relative; z-index: 2; @@ -3013,17 +3386,20 @@ transform: translateZ(0); backface-visibility: hidden; } + .mr-tab:not(.mr-tab-active):hover { padding: 0 24px 5px !important; background: transparent !important; border-radius: 0; transform: none !important; } + .mr-tab:not(.mr-tab-active):focus, .mr-tab:not(.mr-tab-active):active { padding: 0 24px 5px !important; transform: none !important; } + .mr-tab:not(.mr-tab-active)::after { content: ""; position: absolute; @@ -3034,14 +3410,17 @@ pointer-events: none; z-index: 1; } + .mr-tab:not(.mr-tab-active):hover::after { opacity: 1; } + .mr-tab:not(.mr-tab-active):hover::before, -.mr-tab:not(.mr-tab-active):hover + .mr-tab:not(.mr-tab-active)::before { +.mr-tab:not(.mr-tab-active):hover+.mr-tab:not(.mr-tab-active)::before { opacity: 0; } -.mr-tab:not(.mr-tab-active) + .mr-tab:not(.mr-tab-active)::before { + +.mr-tab:not(.mr-tab-active)+.mr-tab:not(.mr-tab-active)::before { content: ""; position: absolute; left: 0; @@ -3051,6 +3430,7 @@ background: var(--mr-tab-separator); pointer-events: none; } + .mr-tab.mr-tab-active { height: 36px; min-height: 36px; @@ -3066,6 +3446,7 @@ z-index: 4; transition: none; } + .mr-tab.mr-tab-active:hover, .mr-tab.mr-tab-active:focus, .mr-tab.mr-tab-active:active { @@ -3073,6 +3454,7 @@ background: var(--mr-tab-active-bg) !important; box-shadow: 0 1px 0 var(--mr-tab-active-bg) !important; } + .mr-tab.mr-tab-active::before, .mr-tab.mr-tab-active::after { content: ""; @@ -3083,16 +3465,19 @@ background: var(--mr-tab-active-bg); pointer-events: none; } + .mr-tab.mr-tab-active::before { left: -13px; -webkit-mask: radial-gradient(circle at 0 0, transparent 13px, #000 13px); mask: radial-gradient(circle at 0 0, transparent 13px, #000 13px); } + .mr-tab.mr-tab-active::after { right: -13px; -webkit-mask: radial-gradient(circle at 100% 0, transparent 13px, #000 13px); mask: radial-gradient(circle at 100% 0, transparent 13px, #000 13px); } + #model-resolver-modal .mr-tab, #model-resolver-modal .mr-footer-btn, #model-resolver-modal .mr-local-link-btn, @@ -3100,18 +3485,22 @@ box-shadow: none !important; outline: none; } + #model-resolver-modal .mr-tab { border-width: 0 !important; margin: 0 !important; } + #model-resolver-modal .mr-tab:not(.mr-tab-active) { background: transparent !important; border-radius: 0 !important; } + #model-resolver-modal .mr-tab:not(.mr-tab-active):hover { background: transparent !important; border-radius: 0 !important; } + #model-resolver-modal .mr-tab.mr-tab-active { margin-bottom: 0 !important; box-shadow: 0 1px 0 var(--mr-tab-active-bg) !important; @@ -3121,6 +3510,7 @@ .mr-loaded-models { padding: 0; } + .mr-loaded-models-header { display: flex; align-items: center; @@ -3129,15 +3519,18 @@ padding: 10px 12px; border-bottom: 1px solid var(--mr-border); } + .mr-loaded-title-block { min-width: 0; } + .mr-loaded-models-title { font-size: 15px; font-weight: 600; color: var(--mr-text); margin: 0; } + .mr-loaded-total { display: inline-flex; align-items: center; @@ -3151,17 +3544,20 @@ color: #dffbe5; font-size: var(--mr-font-xs); } + .mr-loaded-models-subtitle { margin: var(--mr-spacing-4) 0 0; font-size: 12px; color: var(--mr-text-muted); } + .mr-models-list { padding: 8px 12px 10px; display: flex; flex-direction: column; gap: 6px; } + .mr-model-chip { display: inline-flex; align-items: center; @@ -3172,6 +3568,7 @@ font-size: 12px; color: var(--mr-text); } + .mr-model-chip-category { padding: 2px 6px; background: #555; @@ -3181,6 +3578,7 @@ margin-left: 8px; text-transform: uppercase; } + .mr-model-chip-strength { padding: 2px 6px; background: #4CAF50; @@ -3212,6 +3610,7 @@ color: var(--mr-link-color); text-decoration: none; } + .mr-link:hover { text-decoration: underline; } @@ -3222,11 +3621,12 @@ background: var(--comfy-menu-bg, #202020); border: 1px solid var(--border-color, #555555); border-radius: 6px; - box-shadow: 0 4px 16px rgba(0,0,0,0.5); + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5); z-index: var(--mr-z-context-menu-popup, calc(var(--mr-z-context-menu) + 1)); min-width: 160px; overflow: hidden; } + .mr-context-menu-item { display: flex; align-items: center; @@ -3237,13 +3637,16 @@ cursor: pointer; transition: background 0.15s ease; } + .mr-context-menu-hidden, .mr-context-menu [hidden] { display: none !important; } + .mr-context-menu-item:hover { - background: rgba(255,255,255,0.1); + background: rgba(255, 255, 255, 0.1); } + .mr-context-menu-item-icon { width: 20px; height: 16px; @@ -3253,12 +3656,14 @@ color: currentColor; flex: 0 0 20px; } + .mr-context-menu-item-icon svg, .mr-context-menu-item-svg { width: 14px; height: 14px; display: block; } + .mr-context-menu-divider { height: 1px; background: var(--border-color, #555555); @@ -3284,6 +3689,7 @@ padding: 8px; box-sizing: border-box; } + .mr-info-dialog { background: var(--comfy-menu-bg, #202020); border: 2px solid var(--border-color, #555555); @@ -3296,9 +3702,10 @@ overflow: hidden; display: flex; flex-direction: column; - box-shadow: 0 8px 32px rgba(0,0,0,0.5); + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5); resize: both; } + .mr-info-dialog-header { display: flex; justify-content: space-between; @@ -3306,8 +3713,9 @@ gap: 16px; padding: 18px 20px 10px; border-bottom: none; - background: linear-gradient(180deg, rgba(255,255,255,0.025), rgba(0,0,0,0)); + background: linear-gradient(180deg, rgba(255, 255, 255, 0.025), rgba(0, 0, 0, 0)); } + .mr-info-dialog-header h3 { margin: 0; font-size: 16px; @@ -3315,12 +3723,14 @@ color: var(--input-text, #e0e0e0); min-width: 0; } + .mr-info-header-actions { display: flex; align-items: flex-start; gap: 10px; flex: 0 0 auto; } + .mr-info-dialog-close { background: none; border: none; @@ -3335,24 +3745,29 @@ justify-content: center; border-radius: 4px; } + .mr-info-dialog-close:hover { - background: rgba(255,255,255,0.1); + background: rgba(255, 255, 255, 0.1); } + .mr-info-dialog-content { padding: 8px 20px 16px; overflow-y: auto; flex: 1; } + .mr-info-dialog-loading { text-align: center; color: var(--mr-text-muted, #888); padding: 20px; } + .mr-info-section { margin-bottom: 16px; padding-bottom: 16px; border-bottom: 1px solid var(--border-color, #555555); } + .mr-info-section-header { font-size: 12px; font-weight: 600; @@ -3361,32 +3776,39 @@ letter-spacing: 0.5px; margin-bottom: 12px; } + .mr-info-row { display: flex; justify-content: space-between; align-items: center; padding: 6px 0; } + .mr-info-label { color: var(--mr-text-muted, #888); font-size: 13px; } + .mr-info-value { color: var(--input-text, #e0e0e0); font-size: 13px; font-weight: 500; } + .mr-info-value.mr-info-active { color: #4CAF50; } + .mr-info-value.mr-info-inactive { color: #888; } + .mr-info-section-civitai { border-bottom: none; margin-bottom: 0; padding-bottom: 0; } + .mr-info-civitai-link { display: inline-flex; align-items: center; @@ -3395,6 +3817,7 @@ gap: 8px; min-height: 30px; } + .mr-info-link { display: inline-flex; align-items: center; @@ -3402,30 +3825,34 @@ gap: 7px; min-height: 30px; padding: 5px 10px; - border: 1px solid rgba(255,255,255,0.22); - background: rgba(255,255,255,0.055); + border: 1px solid rgba(255, 255, 255, 0.22); + background: rgba(255, 255, 255, 0.055); color: var(--input-text, #e0e0e0); border-radius: 6px; text-decoration: none; font-size: 12px; font-weight: 700; white-space: nowrap; - box-shadow: 0 1px 0 rgba(255,255,255,0.08) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.08) inset; } + .mr-info-link:hover { - background: rgba(255,255,255,0.1); - border-color: rgba(255,255,255,0.32); + background: rgba(255, 255, 255, 0.1); + border-color: rgba(255, 255, 255, 0.32); color: #ffffff; } + .mr-info-external-link-icon { width: 14px; height: 14px; } + .mr-info-loading-small { color: var(--mr-text-muted, #888); font-size: 12px; font-style: italic; } + .mr-info-not-found { color: #888; font-size: 12px; @@ -3438,30 +3865,65 @@ gap: 8px; margin-bottom: 16px; } + .mr-info-tag { display: inline-flex; align-items: center; padding: 4px 10px; - background: rgba(255,255,255,0.1); + background: rgba(255, 255, 255, 0.1); border-radius: 4px; font-size: 11px; font-weight: 600; color: var(--input-text, #e0e0e0); } -.mr-info-tag.-type-lora { background: rgba(var(--mr-type-lora-rgb, 194, 255, 174), 0.16); color: var(--mr-type-lora-text, #d7ffcb); } -.mr-info-tag.-type-checkpoint { background: rgba(var(--mr-type-model-rgb, 179, 157, 219), 0.16); color: var(--mr-type-model-text, #dbcfff); } -.mr-info-tag.-type-vae { background: rgba(var(--mr-type-vae-rgb, 255, 110, 110), 0.16); color: var(--mr-type-vae-text, #ffb8b8); } -.mr-info-tag.-basemodel-sd1 { background: rgba(244,67,54,0.2); color: #EF9A9A; } -.mr-info-tag.-basemodel-sdxl { background: rgba(33,150,243,0.2); color: #64B5F6; } -.mr-info-tag.-basemodel-sdxl-turbo { background: rgba(33,150,243,0.2); color: #64B5F6; } -.mr-info-tag.-basemodel-flux\.1 { background: rgba(255,152,0,0.2); color: #FFB74D; } -.mr-info-tag.-basemodel-flux\.1-d { background: rgba(255,152,0,0.2); color: #FFB74D; } + +.mr-info-tag.-type-lora { + background: rgba(var(--mr-type-lora-rgb, 194, 255, 174), 0.16); + color: var(--mr-type-lora-text, #d7ffcb); +} + +.mr-info-tag.-type-checkpoint { + background: rgba(var(--mr-type-model-rgb, 179, 157, 219), 0.16); + color: var(--mr-type-model-text, #dbcfff); +} + +.mr-info-tag.-type-vae { + background: rgba(var(--mr-type-vae-rgb, 255, 110, 110), 0.16); + color: var(--mr-type-vae-text, #ffb8b8); +} + +.mr-info-tag.-basemodel-sd1 { + background: rgba(244, 67, 54, 0.2); + color: #EF9A9A; +} + +.mr-info-tag.-basemodel-sdxl { + background: rgba(33, 150, 243, 0.2); + color: #64B5F6; +} + +.mr-info-tag.-basemodel-sdxl-turbo { + background: rgba(33, 150, 243, 0.2); + color: #64B5F6; +} + +.mr-info-tag.-basemodel-flux\.1 { + background: rgba(255, 152, 0, 0.2); + color: #FFB74D; +} + +.mr-info-tag.-basemodel-flux\.1-d { + background: rgba(255, 152, 0, 0.2); + color: #FFB74D; +} + .mr-info-tags-row { display: flex; align-items: flex-start; gap: 10px; margin: 0 0 18px; } + .mr-info-tags-label { flex: 0 0 auto; padding-top: 5px; @@ -3471,19 +3933,21 @@ letter-spacing: 0.04em; text-transform: uppercase; } + .mr-info-tags { display: flex; flex-wrap: wrap; gap: 6px; min-width: 0; } + .mr-info-model-tag { max-width: 180px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - border: 1px solid rgba(255,255,255,0.08); - background: rgba(255,255,255,0.06); + border: 1px solid rgba(255, 255, 255, 0.08); + background: rgba(255, 255, 255, 0.06); color: var(--mr-text-muted, #c8c8c8); font-size: 10px; } @@ -3496,26 +3960,30 @@ border-collapse: separate; border-spacing: 0; margin-bottom: 18px; - border: 1px solid rgba(255,255,255,0.08); + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 8px; overflow: hidden; - background: rgba(255,255,255,0.018); + background: rgba(255, 255, 255, 0.018); } + .mr-info-table tbody { display: grid; grid-template-columns: minmax(0, 1fr) minmax(220px, 0.74fr); } + .mr-info-table tr { display: grid; grid-template-columns: var(--mr-info-label-width) minmax(0, 1fr); min-height: 38px; - border-right: 1px solid rgba(255,255,255,0.06); - border-bottom: 1px solid rgba(255,255,255,0.06); - background: rgba(255,255,255,0.018); + border-right: 1px solid rgba(255, 255, 255, 0.06); + border-bottom: 1px solid rgba(255, 255, 255, 0.06); + background: rgba(255, 255, 255, 0.018); } + .mr-info-table tr:nth-child(even) { border-right: none; } + .mr-info-table tr.mr-info-row-wide, .mr-info-table tr.mr-info-trainedwords-row, .mr-info-table tr.mr-info-clipskip-row, @@ -3523,21 +3991,25 @@ grid-column: 1 / -1; border-right: none; } + .mr-info-table tr.mr-info-trainedwords-row, .mr-info-table tr.mr-info-clipskip-row, .mr-info-table tr.mr-info-description-row { margin-top: 10px; - border-top: 1px solid rgba(255,255,255,0.08); + border-top: 1px solid rgba(255, 255, 255, 0.08); border-radius: 8px; overflow: hidden; - background: rgba(255,255,255,0.015); + background: rgba(255, 255, 255, 0.015); } + .mr-info-table tr.mr-info-description-row { grid-template-columns: 1fr; } + .mr-info-table tr:last-child { border-bottom: none; } + .mr-info-table td { box-sizing: border-box; display: flex; @@ -3546,29 +4018,34 @@ padding: 6px 10px; font-size: 13px; } + .mr-info-table td:first-child { color: var(--mr-text-muted, #888); white-space: normal; width: auto; min-width: 0; - border-right: 1px solid rgba(255,255,255,0.06); + border-right: 1px solid rgba(255, 255, 255, 0.06); font-size: 12px; font-weight: 700; } + .mr-info-description-row td:first-child { border-right: none; - border-bottom: 1px solid rgba(255,255,255,0.06); + border-bottom: 1px solid rgba(255, 255, 255, 0.06); padding-bottom: 5px; } + .mr-info-description-row td:last-child { display: block; padding-top: 8px; } + .mr-info-table td:last-child { color: var(--input-text, #e0e0e0); font-weight: 650; word-break: break-word; } + .mr-info-field-label { display: grid; grid-template-columns: 14px minmax(0, 1fr) auto; @@ -3580,20 +4057,24 @@ line-height: 1.25; white-space: nowrap; } + .mr-info-label-icon { width: 14px; height: 14px; color: var(--mr-text-muted, #888); opacity: 0.82; } + .mr-info-label-text { min-width: 0; overflow: hidden; text-overflow: clip; } + .mr-info-field-label .mr-tooltip-badge { justify-self: end; } + .mr-info-location { font-family: "Cascadia Mono", "Consolas", monospace; font-size: 12px; @@ -3602,6 +4083,7 @@ word-break: break-all; width: 100%; } + .mr-info-location-button { display: inline-flex; align-items: center; @@ -3618,22 +4100,26 @@ text-align: left; cursor: pointer; } + .mr-info-location-button span { min-width: 0; word-break: break-all; } + .mr-info-location-button:hover, .mr-info-location-button:focus-visible { - border-color: rgba(255,255,255,0.16); - background: rgba(255,255,255,0.055); + border-color: rgba(255, 255, 255, 0.16); + background: rgba(255, 255, 255, 0.055); color: #ffffff; } + .mr-info-location-icon { flex: 0 0 auto; width: 14px; height: 14px; opacity: 0.78; } + .mr-info-trained-words-label { display: flex; flex-direction: column; @@ -3642,6 +4128,7 @@ width: 100%; min-width: 0; } + .mr-info-trained-words-meta { align-self: flex-start; display: inline-flex; @@ -3650,29 +4137,35 @@ font-size: 11px; color: var(--mr-text-muted, #888); } + .mr-info-trainedwords-row td { align-items: flex-start; } + .mr-info-trainedwords-row td:first-child { align-items: flex-start; flex-direction: column; gap: 7px; } + .mr-info-trainedwords-row td:last-child { align-items: center; justify-content: flex-start; } + .mr-info-trained-words-hint { margin-bottom: 8px; font-size: 11px; color: var(--mr-text-muted, #888); } + .mr-info-trainedwords-row .mr-info-trained-words-hint { display: none; } + .mr-info-copy-trained-words { - border: 1px solid rgba(255,255,255,0.12); - background: rgba(255,255,255,0.05); + border: 1px solid rgba(255, 255, 255, 0.12); + background: rgba(255, 255, 255, 0.05); color: var(--mr-link-color, #8fc2ff); border-radius: 999px; padding: 2px 10px; @@ -3680,15 +4173,18 @@ cursor: pointer; transition: background 0.16s ease, border-color 0.16s ease, color 0.16s ease; } + .mr-info-copy-trained-words:hover:not(:disabled) { - background: rgba(78,161,255,0.14); - border-color: rgba(78,161,255,0.28); + background: rgba(78, 161, 255, 0.14); + border-color: rgba(78, 161, 255, 0.28); color: #d6eaff; } + .mr-info-copy-trained-words:disabled { opacity: 0.45; cursor: default; } + .mr-info-trained-words-list { display: flex; flex-wrap: wrap; @@ -3696,9 +4192,10 @@ align-items: center; justify-content: flex-start; } + .mr-info-trained-word { - border: 1px solid rgba(255,255,255,0.1); - background: rgba(255,255,255,0.04); + border: 1px solid rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.04); color: var(--mr-text); border-radius: 999px; padding: 6px 10px; @@ -3707,17 +4204,20 @@ cursor: pointer; transition: transform 0.14s ease, background 0.14s ease, border-color 0.14s ease, box-shadow 0.14s ease; } + .mr-info-trained-word:hover { transform: translateY(-1px); - background: rgba(255,255,255,0.07); - border-color: rgba(255,255,255,0.18); + background: rgba(255, 255, 255, 0.07); + border-color: rgba(255, 255, 255, 0.18); } + .mr-info-trained-word.is-selected { - background: rgba(78,161,255,0.18); - border-color: rgba(78,161,255,0.4); + background: rgba(78, 161, 255, 0.18); + border-color: rgba(78, 161, 255, 0.4); color: #d8ebff; - box-shadow: 0 0 0 1px rgba(78,161,255,0.15) inset; + box-shadow: 0 0 0 1px rgba(78, 161, 255, 0.15) inset; } + .mr-info-description-wrap { display: flex; flex-direction: column; @@ -3725,11 +4225,13 @@ width: 100%; min-width: 0; } + .mr-info-description-actions { display: flex; justify-content: flex-end; width: 100%; } + .mr-info-description { line-height: 1.55; color: var(--input-text, #e0e0e0); @@ -3737,6 +4239,7 @@ overflow: hidden; position: relative; } + .mr-info-description:not(.is-expanded)::after { content: ""; position: absolute; @@ -3744,13 +4247,15 @@ right: 0; bottom: 0; height: 56px; - background: linear-gradient(180deg, rgba(32,32,32,0) 0%, rgba(32,32,32,0.92) 100%); + background: linear-gradient(180deg, rgba(32, 32, 32, 0) 0%, rgba(32, 32, 32, 0.92) 100%); pointer-events: none; } + .mr-info-description.is-expanded { max-height: none; overflow: visible; } + .mr-info-description p, .mr-info-description ul, .mr-info-description ol, @@ -3758,6 +4263,7 @@ .mr-info-description pre { margin: 0 0 10px 0; } + .mr-info-description h1, .mr-info-description h2, .mr-info-description h3, @@ -3768,39 +4274,47 @@ color: var(--mr-text); line-height: 1.3; } + .mr-info-description ul, .mr-info-description ol { padding-left: 18px; } + .mr-info-description code, .mr-info-description pre { - background: rgba(255,255,255,0.05); + background: rgba(255, 255, 255, 0.05); border-radius: 6px; } + .mr-info-description code { padding: 1px 5px; font-family: 'SF Mono', 'Consolas', 'Monaco', monospace; font-size: 12px; } + .mr-info-description pre { padding: 10px 12px; overflow-x: auto; white-space: pre-wrap; } + .mr-info-description a { color: var(--mr-link-color, #8fc2ff); text-decoration: none; } + .mr-info-description a:hover { text-decoration: underline; } + .mr-info-description-actions { display: flex; justify-content: flex-end; } + .mr-info-description-toggle { - border: 1px solid rgba(255,255,255,0.12); - background: rgba(255,255,255,0.05); + border: 1px solid rgba(255, 255, 255, 0.12); + background: rgba(255, 255, 255, 0.05); color: var(--mr-link-color, #8fc2ff); border-radius: 999px; padding: 4px 12px; @@ -3808,17 +4322,20 @@ cursor: pointer; transition: background 0.16s ease, border-color 0.16s ease, color 0.16s ease; } + .mr-info-description-toggle:hover { - background: rgba(78,161,255,0.14); - border-color: rgba(78,161,255,0.28); + background: rgba(78, 161, 255, 0.14); + border-color: rgba(78, 161, 255, 0.28); color: #d6eaff; } + /* Images Section */ .mr-info-images { margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--border-color, #555555); } + .mr-info-images-header { font-size: 12px; font-weight: 600; @@ -3827,24 +4344,28 @@ letter-spacing: 0.5px; margin-bottom: 12px; } + .mr-info-images-layout { column-count: 3; column-gap: 14px; } + .mr-info-image-item { border-radius: 6px; overflow: hidden; - background: rgba(0,0,0,0.2); - border: 1px solid rgba(255,255,255,0.06); + background: rgba(0, 0, 0, 0.2); + border: 1px solid rgba(255, 255, 255, 0.06); break-inside: avoid; margin-bottom: 14px; } + .mr-info-image-item figure { margin: 0; position: relative; display: block; - background: rgba(0,0,0,0.3); + background: rgba(0, 0, 0, 0.3); } + .mr-info-image-preview-btn { position: relative; display: block; @@ -3855,6 +4376,7 @@ color: inherit; cursor: zoom-in; } + .mr-info-image-item img { width: 100%; height: auto; @@ -3862,6 +4384,7 @@ object-fit: contain; transition: transform 0.24s ease, filter 0.24s ease; } + .mr-info-image-preview-label { position: absolute; top: 8px; @@ -3881,6 +4404,7 @@ transition: opacity 0.18s ease, transform 0.18s ease; pointer-events: none; } + .mr-info-image-civitai-badge { position: absolute; top: 8px; @@ -3901,20 +4425,24 @@ transform: translateY(-4px); transition: opacity 0.18s ease, transform 0.18s ease, background 0.18s ease, border-color 0.18s ease; } + .mr-info-image-civitai-badge:hover, .mr-info-image-civitai-badge:focus-visible { background: rgba(18, 132, 247, 0.88); border-color: rgba(255, 255, 255, 0.24); color: #ffffff; } + .mr-info-image-preview-label svg { width: 13px; height: 13px; } + .mr-info-image-civitai-icon { width: 13px; height: 13px; } + .mr-info-image-item figcaption { position: absolute; inset: auto 0 0 0; @@ -3923,23 +4451,26 @@ padding: 10px; font-size: 11px; color: #e9eef5; - background: linear-gradient(180deg, rgba(7,10,14,0) 0%, rgba(7,10,14,0.82) 16%, rgba(7,10,14,0.94) 100%); + background: linear-gradient(180deg, rgba(7, 10, 14, 0) 0%, rgba(7, 10, 14, 0.82) 16%, rgba(7, 10, 14, 0.94) 100%); opacity: 0; transform: translateY(10px); transition: opacity 0.2s ease, transform 0.2s ease; pointer-events: none; } + .mr-info-image-item figcaption span { display: block; margin-bottom: 4px; line-height: 1.4; } + .mr-info-image-item figcaption span label { font-weight: 600; color: #b9c8d8; margin-right: 4px; text-transform: lowercase; } + .mr-info-image-link { color: #8fc2ff; text-decoration: none; @@ -3948,10 +4479,12 @@ pointer-events: auto; font-weight: 700; } + .mr-info-image-item:hover img { transform: scale(1.01); filter: brightness(0.82); } + .mr-info-image-item:hover .mr-info-image-preview-label, .mr-info-image-item:hover .mr-info-image-civitai-badge, .mr-info-image-civitai-badge:focus-visible, @@ -3959,39 +4492,48 @@ opacity: 1; transform: translateY(0); } + .mr-info-image-item:hover figcaption, .mr-info-image-item:focus-within figcaption { opacity: 1; transform: translateY(0); } + @media (max-width: 900px) { .mr-info-images-layout { column-count: 2; } } + @media (max-width: 640px) { .mr-info-dialog-header { flex-direction: column; align-items: stretch; } + .mr-info-header-actions { justify-content: space-between; width: 100%; } + .mr-info-table tbody { grid-template-columns: 1fr; } + .mr-info-table tr, .mr-info-table tr:nth-child(even) { border-right: none; } + .mr-info-table tr { grid-template-columns: var(--mr-info-label-width) minmax(0, 1fr); } + .mr-info-trainedwords-row td:last-child, .mr-info-trained-words-list { justify-content: flex-start; } + .mr-info-images-layout { column-count: 1; } @@ -4011,9 +4553,11 @@ justify-content: flex-end; gap: 8px; } + .mr-info-dialog-close-btn { padding: 8px 16px; } + .mr-info-error { color: #f44336; font-size: 12px; @@ -4031,6 +4575,7 @@ justify-content: center; font-family: "Segoe UI Variable", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, sans-serif; } + .mr-image-preview-shell { width: 100%; height: 100%; @@ -4039,6 +4584,7 @@ min-width: 0; min-height: 0; } + .mr-image-preview-topbar { display: grid; grid-template-columns: 44px minmax(0, 1fr) auto; @@ -4047,6 +4593,7 @@ padding: 10px 18px; border-bottom: 1px solid rgba(255, 255, 255, 0.08); } + .mr-image-preview-icon-btn, .mr-image-preview-nav { display: inline-flex; @@ -4059,28 +4606,34 @@ cursor: pointer; transition: background 0.16s ease, transform 0.16s ease; } + .mr-image-preview-icon-btn { width: 36px; height: 36px; } + .mr-image-preview-icon-btn svg { width: 18px; height: 18px; } + .mr-image-preview-icon-btn:hover, .mr-image-preview-nav:hover { background: rgba(255, 255, 255, 0.2); } + .mr-image-preview-counter { color: var(--mr-text-muted, #b1b1b1); font-size: 12px; font-weight: 700; } + .mr-image-preview-actions { display: inline-flex; align-items: center; gap: 8px; } + .mr-image-preview-action, .mr-image-preview-copy { display: inline-flex; @@ -4097,23 +4650,27 @@ font-weight: 800; cursor: pointer; } + .mr-image-preview-action svg, .mr-image-preview-copy svg { width: 13px; height: 13px; } + .mr-image-preview-action:hover, .mr-image-preview-copy:hover, .mr-image-preview-copy.is-copied { background: rgba(114, 211, 138, 0.16); border-color: rgba(114, 211, 138, 0.28); } + .mr-image-preview-main { display: grid; grid-template-columns: minmax(0, 1fr) minmax(340px, 430px); min-width: 0; min-height: 0; } + .mr-image-preview-stage { position: relative; display: flex; @@ -4124,12 +4681,14 @@ padding: 22px; background: #0b0c0e; } + .mr-image-preview-stage img { max-width: 100%; max-height: 100%; object-fit: contain; box-shadow: 0 14px 42px rgba(0, 0, 0, 0.45); } + .mr-image-preview-nav { position: absolute; top: 50%; @@ -4139,12 +4698,15 @@ font-size: 30px; line-height: 1; } + .mr-image-preview-nav.is-left { left: 18px; } + .mr-image-preview-nav.is-right { right: 18px; } + .mr-image-preview-panel { min-width: 0; overflow-y: auto; @@ -4152,6 +4714,7 @@ background: #18191d; border-left: 1px solid rgba(255, 255, 255, 0.08); } + .mr-image-preview-card { padding: 14px; margin-bottom: 12px; @@ -4159,6 +4722,7 @@ background: #24252b; border: 1px solid rgba(255, 255, 255, 0.07); } + .mr-image-preview-card-head { display: flex; align-items: center; @@ -4166,17 +4730,20 @@ gap: 10px; margin-bottom: 10px; } + .mr-image-preview-card h4 { margin: 0; color: #d8d8dc; font-size: 15px; font-weight: 800; } + .mr-image-preview-tags { display: flex; flex-wrap: wrap; gap: 6px; } + .mr-image-preview-tags span { display: inline-flex; align-items: center; @@ -4190,10 +4757,12 @@ font-weight: 800; text-transform: uppercase; } + .mr-image-preview-data { display: grid; gap: 7px; } + .mr-image-preview-data-row { display: grid; grid-template-columns: 80px minmax(0, 1fr); @@ -4201,28 +4770,34 @@ align-items: start; font-size: 12px; } + .mr-image-preview-data-row span { color: var(--mr-text-muted, #b1b1b1); } + .mr-image-preview-data-row strong { color: #ededf0; font-weight: 700; overflow-wrap: anywhere; } + .mr-image-preview-resources { display: grid; gap: 8px; } + .mr-image-preview-resource { display: grid; gap: 4px; padding: 8px 0; border-bottom: 1px solid rgba(255, 255, 255, 0.08); } + .mr-image-preview-resource:last-child { padding-bottom: 0; border-bottom: 0; } + .mr-image-preview-resource-main { display: flex; align-items: center; @@ -4230,6 +4805,7 @@ gap: 12px; min-width: 0; } + .mr-image-preview-resource-name { color: #e8e8eb; font-size: 12px; @@ -4240,15 +4816,18 @@ text-decoration-color: rgba(255, 255, 255, 0.34); text-underline-offset: 2px; } + .mr-image-preview-resource-name:not(a) { text-decoration: none; } + .mr-image-preview-resource-badges { display: inline-flex; align-items: center; gap: 5px; flex: 0 0 auto; } + .mr-image-preview-resource-badges span { display: inline-flex; align-items: center; @@ -4261,6 +4840,7 @@ font-size: 10px; font-weight: 800; } + .mr-image-preview-resource-version { color: var(--mr-text-muted, #b1b1b1); font-size: 11px; @@ -4268,10 +4848,12 @@ overflow-wrap: anywhere; text-decoration: none; } + a.mr-image-preview-resource-version:hover, a.mr-image-preview-resource-name:hover { color: var(--mr-link-color, #8fc2ff); } + .mr-image-preview-card p { margin: 0; color: #b9bbc4; @@ -4279,15 +4861,18 @@ a.mr-image-preview-resource-name:hover { line-height: 1.55; white-space: pre-wrap; } + .mr-image-preview-empty { color: var(--mr-text-dim, #7b7b7b); font-size: 12px; } + @media (max-width: 900px) { .mr-image-preview-main { grid-template-columns: 1fr; grid-template-rows: minmax(260px, 58vh) minmax(0, 1fr); } + .mr-image-preview-panel { border-left: 0; border-top: 1px solid rgba(255, 255, 255, 0.08); @@ -4303,6 +4888,7 @@ a.mr-image-preview-resource-name:hover { color: var(--mr-text, #f3f3f3); font-family: "Segoe UI Variable", "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, sans-serif; } + .mr-model-details-shell { display: grid; grid-template-rows: 60px minmax(0, 1fr); @@ -4311,6 +4897,7 @@ a.mr-image-preview-resource-name:hover { min-width: 0; min-height: 0; } + .mr-model-details-topbar { display: grid; grid-template-columns: 44px minmax(0, 1fr) auto; @@ -4318,8 +4905,9 @@ a.mr-image-preview-resource-name:hover { gap: 12px; padding: 10px 18px; background: #1b1c20; - border-bottom: 1px solid rgba(255,255,255,0.09); + border-bottom: 1px solid rgba(255, 255, 255, 0.09); } + .mr-model-details-icon-btn { display: inline-flex; align-items: center; @@ -4328,20 +4916,24 @@ a.mr-image-preview-resource-name:hover { height: 36px; border: 0; border-radius: 999px; - background: rgba(255,255,255,0.09); + background: rgba(255, 255, 255, 0.09); color: #f4f4f4; cursor: pointer; } + .mr-model-details-icon-btn:hover { - background: rgba(255,255,255,0.16); + background: rgba(255, 255, 255, 0.16); } + .mr-model-details-icon-btn svg { width: 18px; height: 18px; } + .mr-model-details-title { min-width: 0; } + .mr-model-details-title h2 { margin: 0; color: #f1f1f3; @@ -4352,68 +4944,78 @@ a.mr-image-preview-resource-name:hover { text-overflow: ellipsis; white-space: nowrap; } + .mr-model-details-title span { display: block; margin-top: 3px; - color: rgba(255,255,255,0.58); + color: rgba(255, 255, 255, 0.58); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .mr-model-details-actions { display: inline-flex; align-items: center; gap: 8px; } + .mr-model-details-action { display: inline-flex; align-items: center; gap: 7px; min-height: 34px; padding: 0 11px; - border: 1px solid rgba(255,255,255,0.12); + border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 7px; - background: rgba(255,255,255,0.07); + background: rgba(255, 255, 255, 0.07); color: #f3f3f3; font-size: 12px; font-weight: 800; text-decoration: none; } + .mr-model-details-action:hover { - background: rgba(114,211,138,0.15); - border-color: rgba(114,211,138,0.3); + background: rgba(114, 211, 138, 0.15); + border-color: rgba(114, 211, 138, 0.3); } + .mr-model-details-action svg { width: 14px; height: 14px; } + .mr-model-details-main { display: grid; grid-template-columns: minmax(0, 1fr) minmax(330px, 390px); min-width: 0; min-height: 0; } + .mr-model-details-content { min-width: 0; min-height: 0; overflow-y: auto; padding: 12px 18px 28px; } + .mr-model-details-side { min-width: 0; min-height: 0; overflow-y: auto; padding: 16px 14px 34px; background: #1d1e22; - border-left: 1px solid rgba(255,255,255,0.08); + border-left: 1px solid rgba(255, 255, 255, 0.08); } + .mr-model-details-version-tabs { display: flex; gap: 7px; overflow-x: auto; padding-bottom: 8px; } + .mr-model-details-version-tab { display: inline-grid; gap: 2px; @@ -4422,32 +5024,37 @@ a.mr-image-preview-resource-name:hover { max-width: 230px; min-height: 38px; padding: 6px 11px; - border: 1px solid rgba(255,255,255,0.11); + border: 1px solid rgba(255, 255, 255, 0.11); border-radius: 6px; - background: rgba(255,255,255,0.06); + background: rgba(255, 255, 255, 0.06); color: #e8e8eb; cursor: pointer; text-align: left; } + .mr-model-details-version-tab.is-active { background: rgba(46, 144, 230, 0.32); border-color: rgba(80, 170, 255, 0.55); } + .mr-model-details-version-tab span, .mr-model-details-version-tab small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .mr-model-details-version-tab span { font-size: 12px; font-weight: 800; } + .mr-model-details-version-tab small { - color: rgba(255,255,255,0.62); + color: rgba(255, 255, 255, 0.62); font-size: 10px; font-weight: 700; } + .mr-model-details-gallery { position: relative; min-height: 320px; @@ -4455,11 +5062,13 @@ a.mr-image-preview-resource-name:hover { margin-top: 0; overflow: hidden; } + .mr-model-details-gallery.is-single { max-width: 560px; margin-left: auto; margin-right: auto; } + .mr-model-details-gallery-strip { display: flex; align-items: flex-start; @@ -4476,13 +5085,16 @@ a.mr-image-preview-resource-name:hover { -webkit-user-select: none; padding: 0 2px; } + .mr-model-details-gallery-strip::-webkit-scrollbar { display: none; } + .mr-model-details-gallery-strip.is-dragging { cursor: grabbing; scroll-behavior: auto; } + .mr-model-details-image { position: relative; display: flex; @@ -4495,16 +5107,18 @@ a.mr-image-preview-resource-name:hover { min-height: 0; margin: 0; padding: 0; - border: 1px solid rgba(255,255,255,0.08); + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 7px; background: #101114; overflow: hidden; cursor: zoom-in; aspect-ratio: var(--mr-image-ratio, 0.72); } + .mr-model-details-gallery-strip.is-dragging .mr-model-details-image { cursor: grabbing; } + .mr-model-details-image img { display: block; width: 100%; @@ -4512,6 +5126,7 @@ a.mr-image-preview-resource-name:hover { object-fit: contain; object-position: center; } + .mr-model-details-image-meta { position: absolute; left: 8px; @@ -4523,6 +5138,7 @@ a.mr-image-preview-resource-name:hover { justify-content: flex-start; pointer-events: none; } + .mr-model-details-image-meta span { display: inline-flex; align-items: center; @@ -4534,6 +5150,7 @@ a.mr-image-preview-resource-name:hover { font-size: 10px; font-weight: 800; } + .mr-model-details-gallery-nav { position: absolute; top: 50%; @@ -4551,25 +5168,30 @@ a.mr-image-preview-resource-name:hover { line-height: 1; cursor: pointer; transform: translateY(-50%); - box-shadow: 0 8px 20px rgba(0,0,0,0.28); + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.28); } + .mr-model-details-gallery-nav:hover { background: #ffffff; } + .mr-model-details-gallery-nav.is-left { left: 12px; } + .mr-model-details-gallery-nav.is-right { right: 12px; } + .mr-model-details-description { margin-top: 10px; padding-top: 10px; - border-top: 1px solid rgba(255,255,255,0.08); + border-top: 1px solid rgba(255, 255, 255, 0.08); color: #cfd1d8; font-size: 13px; line-height: 1.55; } + .mr-model-details-description h3, .mr-model-details-panel h3 { margin: 0 0 10px; @@ -4577,23 +5199,28 @@ a.mr-image-preview-resource-name:hover { font-size: 15px; font-weight: 800; } + .mr-model-details-description p { margin: 0 0 10px; } + .mr-model-details-description a { color: #8fc2ff; } + .mr-model-details-panel { margin-bottom: 12px; padding: 13px; - border: 1px solid rgba(255,255,255,0.08); + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 8px; background: #25262b; } + .mr-model-details-kv { display: grid; gap: 8px; } + .mr-model-details-kv div { display: grid; grid-template-columns: 92px minmax(0, 1fr); @@ -4601,76 +5228,190 @@ a.mr-image-preview-resource-name:hover { align-items: start; font-size: 12px; } + .mr-model-details-kv span { - color: rgba(255,255,255,0.54); + color: rgba(255, 255, 255, 0.54); } + .mr-model-details-kv strong { color: #f0f0f2; font-weight: 700; overflow-wrap: anywhere; } + .mr-model-details-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; } + .mr-model-details-tags span { display: inline-flex; align-items: center; min-height: 22px; padding: 3px 7px; border-radius: 5px; - background: rgba(255,255,255,0.08); + background: rgba(255, 255, 255, 0.08); color: #ececf0; font-size: 11px; font-weight: 800; } + .mr-model-details-files { display: grid; gap: 9px; } + .mr-model-details-file { - display: grid; - grid-template-columns: minmax(0, 1fr) auto; - gap: 10px; - align-items: center; - padding: 10px; - border: 1px solid rgba(255,255,255,0.08); + display: block; + min-width: 0; + padding: 0; + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 7px; - background: rgba(255,255,255,0.04); -} -.mr-model-details-file > .mr-model-details-mirrors { - grid-column: 1 / -1; + background: rgba(255, 255, 255, 0.04); + overflow: hidden; } + .mr-model-details-file.is-primary { - border-color: rgba(114,211,138,0.28); - background: rgba(114,211,138,0.08); + border-color: rgba(114, 211, 138, 0.28); + background: rgba(114, 211, 138, 0.08); } + +.mr-model-details-file.is-target { + border-color: rgba(114, 211, 138, 0.42); + background: rgba(114, 211, 138, 0.095); + box-shadow: inset 3px 0 0 rgba(114, 211, 138, 0.78); +} + +.mr-model-details-file-summary { + display: grid; + grid-template-columns: 18px minmax(0, 1fr); + gap: 8px; + align-items: center; + min-width: 0; + padding: 10px; + cursor: pointer; + list-style: none; +} + +.mr-model-details-file-summary::-webkit-details-marker { + display: none; +} + +.mr-model-details-file-summary:hover { + background: rgba(255, 255, 255, 0.035); +} + +.mr-model-details-file-chevron { + position: relative; + width: 18px; + height: 18px; + color: rgba(255, 255, 255, 0.54); +} + +.mr-model-details-file-chevron::before { + content: ""; + position: absolute; + left: 6px; + top: 4px; + width: 7px; + height: 7px; + border-right: 2px solid currentColor; + border-bottom: 2px solid currentColor; + transform: rotate(-45deg); + transition: transform 120ms ease; +} + +.mr-model-details-file[open] .mr-model-details-file-chevron::before { + transform: rotate(45deg); +} + +.mr-model-details-file-heading { + display: block; + min-width: 0; +} + +.mr-model-details-file-summary-badges { + display: inline-flex; + align-items: center; + justify-content: flex-start; + gap: 5px; + grid-column: 2; + min-width: 0; + flex-wrap: wrap; +} + +.mr-model-details-file-summary-badges span { + display: inline-flex; + align-items: center; + min-height: 20px; + max-width: 92px; + padding: 2px 6px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.075); + color: rgba(255, 255, 255, 0.76); + font-size: 10px; + font-weight: 850; + line-height: 1; + white-space: nowrap; +} + +.mr-model-details-file.is-target .mr-model-details-file-summary-badges span:first-child { + background: rgba(114, 211, 138, 0.18); + color: #9cf2b2; +} + +.mr-model-details-file-body { + display: grid; + gap: 9px; + padding: 0 10px 10px; +} + .mr-model-details-file strong, .mr-model-details-file span { display: block; min-width: 0; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; + overflow-wrap: anywhere; + word-break: break-word; } + .mr-model-details-file strong { color: #f3f3f5; font-size: 12px; font-weight: 800; } + .mr-model-details-file span { margin-top: 3px; - color: rgba(255,255,255,0.58); + color: rgba(255, 255, 255, 0.58); font-size: 11px; + line-height: 1.35; } + +.mr-model-details-file .mr-model-details-file-summary-badges { + display: inline-flex; + margin-top: 0; + overflow: visible; + white-space: normal; +} + +.mr-model-details-file .mr-model-details-file-summary-badges span { + display: inline-flex; + margin-top: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + word-break: normal; +} + .mr-model-details-file-badges { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 7px; } + .mr-model-details-file-badges span { display: inline-flex; align-items: center; @@ -4678,39 +5419,44 @@ a.mr-image-preview-resource-name:hover { max-width: 100%; padding: 2px 6px; border-radius: 5px; - background: rgba(255,255,255,0.075); - color: rgba(255,255,255,0.78); + background: rgba(255, 255, 255, 0.075); + color: rgba(255, 255, 255, 0.78); font-size: 10px; font-weight: 800; line-height: 1; } + .mr-model-details-mirrors { display: grid; gap: 10px; - margin-top: 2px; + margin-top: 0; padding-top: 9px; - border-top: 1px solid rgba(255,255,255,0.08); + border-top: 1px solid rgba(255, 255, 255, 0.08); } + .mr-model-details-mirrors-title { - color: rgba(255,255,255,0.62); + color: rgba(255, 255, 255, 0.62); font-size: 10px; font-weight: 900; letter-spacing: 0; text-transform: uppercase; } + .mr-model-details-mirror-group { display: grid; gap: 7px; } + .mr-model-details-mirror-group-title { display: inline-flex; align-items: center; gap: 7px; min-width: 0; - color: rgba(255,255,255,0.56); + color: rgba(255, 255, 255, 0.56); font-size: 11px; font-weight: 800; } + .mr-model-details-mirror-platform-icon { display: inline-flex; align-items: center; @@ -4719,15 +5465,18 @@ a.mr-image-preview-resource-name:hover { height: 18px; flex: 0 0 18px; } + .mr-model-details-mirror-platform-icon svg { width: 18px; height: 18px; } + .mr-model-details-mirror-list { display: grid; gap: 6px; - padding-left: 25px; + padding-left: 0; } + .mr-model-details-mirror { display: grid; grid-template-columns: minmax(0, 1fr) auto; @@ -4737,9 +5486,9 @@ a.mr-image-preview-resource-name:hover { width: 100%; min-height: 48px; padding: 9px 10px; - border: 1px solid rgba(255,255,255,0.07); + border: 1px solid rgba(255, 255, 255, 0.07); border-radius: 6px; - background: rgba(0,0,0,0.15); + background: rgba(0, 0, 0, 0.15); color: inherit; text-align: left; cursor: pointer; @@ -4747,29 +5496,36 @@ a.mr-image-preview-resource-name:hover { -webkit-appearance: none; transition: background 120ms ease, border-color 120ms ease; } + .mr-model-details-mirror:hover { - border-color: rgba(255,255,255,0.13); - background: rgba(255,255,255,0.07); + border-color: rgba(255, 255, 255, 0.13); + background: rgba(255, 255, 255, 0.07); } + .mr-model-details-mirror.is-dead { - border-color: rgba(185,28,28,0.58); - background: rgba(127,29,29,0.36); + border-color: rgba(185, 28, 28, 0.58); + background: rgba(127, 29, 29, 0.36); } + .mr-model-details-mirror.is-dead:hover { - border-color: rgba(248,113,113,0.74); - background: rgba(153,27,27,0.54); + border-color: rgba(248, 113, 113, 0.74); + background: rgba(153, 27, 27, 0.54); } + .mr-model-details-mirror.is-gated { - border-color: rgba(202,138,4,0.62); - background: rgba(113,63,18,0.38); + border-color: rgba(202, 138, 4, 0.62); + background: rgba(113, 63, 18, 0.38); } + .mr-model-details-mirror.is-gated:hover { - border-color: rgba(250,204,21,0.7); - background: rgba(133,77,14,0.56); + border-color: rgba(250, 204, 21, 0.7); + background: rgba(133, 77, 14, 0.56); } + .mr-model-details-mirror-info { min-width: 0; } + .mr-model-details-mirror-info strong, .mr-model-details-mirror-info small { display: block; @@ -4778,102 +5534,138 @@ a.mr-image-preview-resource-name:hover { text-overflow: ellipsis; white-space: nowrap; } + .mr-model-details-mirror-info strong { color: #f0f0f2; font-size: 11px; font-weight: 800; } + .mr-model-details-mirror-info small { margin-top: 3px; - color: rgba(255,255,255,0.42); + color: rgba(255, 255, 255, 0.42); font-size: 10px; } + .mr-model-details-mirror.is-dead .mr-model-details-mirror-info small { - color: rgba(254,202,202,0.72); + color: rgba(254, 202, 202, 0.72); } + .mr-model-details-mirror.is-gated .mr-model-details-mirror-info small { - color: rgba(254,240,138,0.72); + color: rgba(254, 240, 138, 0.72); } + .mr-model-details-mirror-action { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; - color: rgba(255,255,255,0.56); + color: rgba(255, 255, 255, 0.56); } + .mr-model-details-mirror-action svg { width: 17px; height: 17px; } + .mr-model-details-mirror.is-dead .mr-model-details-mirror-action { color: #f87171; } + .mr-model-details-mirror.is-gated .mr-model-details-mirror-action { color: #facc15; } + .mr-model-details-use { min-height: 31px; padding: 0 10px; border-radius: 6px; font-size: 11px; } + .mr-model-details-mirror.mr-model-details-use { min-height: 48px; padding: 9px 10px; font-size: inherit; } + .mr-model-details-loading { display: flex; align-items: center; justify-content: center; - color: rgba(255,255,255,0.68); + color: rgba(255, 255, 255, 0.68); font-size: 13px; } + .mr-model-details-error { color: #ff9a90; } + .mr-model-details-empty { padding: 14px; - border: 1px dashed rgba(255,255,255,0.13); + border: 1px dashed rgba(255, 255, 255, 0.13); border-radius: 7px; - color: rgba(255,255,255,0.55); + color: rgba(255, 255, 255, 0.55); font-size: 12px; } + @media (max-width: 980px) { .mr-model-details-main { grid-template-columns: 1fr; grid-template-rows: minmax(0, 1fr) auto; } + .mr-model-details-side { border-left: 0; - border-top: 1px solid rgba(255,255,255,0.08); + border-top: 1px solid rgba(255, 255, 255, 0.08); } } + @media (max-width: 720px) { .mr-model-details-topbar { grid-template-columns: 38px minmax(0, 1fr); } + .mr-model-details-actions { display: none; } + .mr-model-details-title h2 { font-size: 18px; } + .mr-model-details-gallery { min-height: 300px; height: min(480px, calc(100vh - 230px)); } + .mr-model-details-image { flex-basis: min(var(--mr-image-width, 330px), 88vw); width: min(var(--mr-image-width, 330px), 88vw); } + .mr-model-details-file { - grid-template-columns: 1fr; + display: block; } + + .mr-model-details-file-summary { + grid-template-columns: 18px minmax(0, 1fr); + } + + .mr-model-details-file-summary-badges { + grid-column: 2; + justify-content: flex-start; + } + + .mr-model-details-file-body { + padding-left: 10px; + } + .mr-model-details-mirror { grid-template-columns: 1fr; } + .mr-model-details-mirror-list { padding-left: 0; } @@ -4885,16 +5677,18 @@ a.mr-image-preview-resource-name:hover { padding: 0 0 0 0; height: 100%; } + .mr-options-shell { display: grid; grid-template-columns: 240px minmax(0, 1fr); gap: 0; height: 100%; - border: 1px solid rgba(255,255,255,0.08); + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 22px; overflow: hidden; background: #171717; } + .mr-options-sidebar { display: flex; flex-direction: column; @@ -4903,20 +5697,22 @@ a.mr-image-preview-resource-name:hover { height: 100%; padding: 16px 8px 12px; background: #252525; - border-right: 1px solid rgba(255,255,255,0.08); + border-right: 1px solid rgba(255, 255, 255, 0.08); overflow: hidden; min-width: 0; } + .mr-options-sidebar-title { margin: 0; padding: 0 12px; - color: rgba(255,255,255,0.58); + color: rgba(255, 255, 255, 0.58); font-size: 11px; font-weight: 800; letter-spacing: 0.02em; line-height: 1.2; text-transform: uppercase; } + .mr-options-sidebar-group { display: grid; gap: 10px; @@ -4924,20 +5720,23 @@ a.mr-image-preview-resource-name:hover { align-content: start; flex: 0 0 auto; } + .mr-options-sidebar-label { padding: 0 12px; font-size: 10px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; - color: rgba(255,255,255,0.34); + color: rgba(255, 255, 255, 0.34); } + .mr-options-nav { display: grid; gap: 2px; align-content: start; grid-auto-rows: min-content; } + .mr-options-nav-btn, #model-resolver-modal .mr-options-nav-btn { display: flex; @@ -4950,7 +5749,7 @@ a.mr-image-preview-resource-name:hover { border: 1px solid transparent; border-radius: 6px; background: transparent; - color: rgba(255,255,255,0.86); + color: rgba(255, 255, 255, 0.86); box-shadow: none; font-size: 14px; font-weight: 700; @@ -4959,24 +5758,28 @@ a.mr-image-preview-resource-name:hover { cursor: pointer; transition: var(--mr-missing-control-transition, background 0.15s ease, border-color 0.15s ease, color 0.15s ease); } + .mr-options-nav-btn:hover, #model-resolver-modal .mr-options-nav-btn:hover { color: var(--mr-text); - background: rgba(255,255,255,0.085); + background: rgba(255, 255, 255, 0.085); border-color: transparent; } + .mr-options-nav-btn:focus-visible, #model-resolver-modal .mr-options-nav-btn:focus-visible { outline: none; - border-color: rgba(255,255,255,0.12); - box-shadow: 0 0 0 2px rgba(255,255,255,0.06); + border-color: rgba(255, 255, 255, 0.12); + box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.06); } + .mr-options-nav-btn.is-active, #model-resolver-modal .mr-options-nav-btn.is-active { color: #ffffff; background: #3d3d44; border-color: transparent; } + .mr-options-nav-main, #model-resolver-modal .mr-options-nav-main { display: inline-flex; @@ -4984,6 +5787,7 @@ a.mr-image-preview-resource-name:hover { min-width: 0; gap: 10px; } + .mr-options-nav-icon, #model-resolver-modal .mr-options-nav-icon { display: inline-flex; @@ -4994,32 +5798,37 @@ a.mr-image-preview-resource-name:hover { flex: 0 0 16px; color: currentColor; } + .mr-options-nav-icon svg, #model-resolver-modal .mr-options-nav-icon svg { display: block; width: 15px; height: 15px; } + .mr-options-provider-icon-civitai svg path:nth-of-type(1), #model-resolver-modal .mr-options-provider-icon-civitai svg path:nth-of-type(1) { fill: transparent; - stroke: rgba(255,255,255,0.2); + stroke: rgba(255, 255, 255, 0.2); stroke-width: 3; } + .mr-options-provider-icon-civitai svg path:nth-of-type(2), .mr-options-provider-icon-civitai svg path:nth-of-type(3), #model-resolver-modal .mr-options-provider-icon-civitai svg path:nth-of-type(2), #model-resolver-modal .mr-options-provider-icon-civitai svg path:nth-of-type(3) { fill: #ffffff; } + .mr-options-provider-icon-huggingface svg path, #model-resolver-modal .mr-options-provider-icon-huggingface svg path { fill: #ffffff; - stroke: rgba(0,0,0,0.42); + stroke: rgba(0, 0, 0, 0.42); stroke-width: 1.4; paint-order: stroke fill; vector-effect: non-scaling-stroke; } + .mr-options-provider-icon-huggingface svg path:nth-of-type(3), .mr-options-provider-icon-huggingface svg path:nth-of-type(4), .mr-options-provider-icon-huggingface svg path:nth-of-type(5), @@ -5027,16 +5836,19 @@ a.mr-image-preview-resource-name:hover { #model-resolver-modal .mr-options-provider-icon-huggingface svg path:nth-of-type(4), #model-resolver-modal .mr-options-provider-icon-huggingface svg path:nth-of-type(5) { fill: #202024; - stroke: rgba(255,255,255,0.22); + stroke: rgba(255, 255, 255, 0.22); } + .mr-options-nav-meta, #model-resolver-modal .mr-options-nav-meta { display: none; } + .mr-options-nav-btn.is-active .mr-options-nav-meta, #model-resolver-modal .mr-options-nav-btn.is-active .mr-options-nav-meta { display: none; } + .mr-options-main { display: grid; gap: 0; @@ -5051,23 +5863,28 @@ a.mr-image-preview-resource-name:hover { overflow-x: hidden; scrollbar-gutter: stable; scrollbar-width: auto; - scrollbar-color: rgba(255,255,255,0.34) rgba(255,255,255,0.08); + scrollbar-color: rgba(255, 255, 255, 0.34) rgba(255, 255, 255, 0.08); } + .mr-options-main::-webkit-scrollbar { width: 12px; } + .mr-options-main::-webkit-scrollbar-track { - background: rgba(255,255,255,0.06); + background: rgba(255, 255, 255, 0.06); border-radius: 999px; } + .mr-options-main::-webkit-scrollbar-thumb { - background: rgba(255,255,255,0.34); + background: rgba(255, 255, 255, 0.34); border-radius: 999px; - border: 2px solid rgba(23,23,23,0.95); + border: 2px solid rgba(23, 23, 23, 0.95); } + .mr-options-main::-webkit-scrollbar-thumb:hover { - background: rgba(255,255,255,0.48); + background: rgba(255, 255, 255, 0.48); } + .mr-options-card { background: transparent; border: none; @@ -5076,12 +5893,14 @@ a.mr-image-preview-resource-name:hover { box-shadow: none; align-self: start; } + .mr-options-title { margin: 0; font-size: 17px; font-weight: 700; color: var(--mr-text); } + .mr-options-section { display: grid; gap: 0; @@ -5090,19 +5909,23 @@ a.mr-image-preview-resource-name:hover { scroll-margin-top: 24px; min-width: 0; } + .mr-options-section.is-hidden { display: none; } + .mr-options-section-head { display: block; padding: 0 0 10px 0; } + .mr-options-section-title { margin: 0; font-size: 20px; font-weight: 700; color: var(--mr-text); } + .mr-options-grid { display: grid; grid-template-columns: 1fr; @@ -5111,12 +5934,14 @@ a.mr-image-preview-resource-name:hover { align-items: start; min-width: 0; } + .mr-options-stack { display: grid; gap: 0; align-content: start; min-width: 0; } + .mr-options-panel { display: grid; gap: 0; @@ -5126,24 +5951,28 @@ a.mr-image-preview-resource-name:hover { background: transparent; min-width: 0; } + .mr-options-panel-title { margin: 0 0 6px 0; font-size: 16px; font-weight: 700; color: var(--mr-text); } + .mr-options-comfyui-icon svg, .mr-options-comfyui-icon svg path { fill: currentColor; } + .mr-options-db-summary { display: grid; gap: 1px; - border: 1px solid rgba(255,255,255,0.08); + border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 6px; overflow: hidden; - background: rgba(255,255,255,0.03); + background: rgba(255, 255, 255, 0.03); } + .mr-options-db-row { display: flex; align-items: center; @@ -5151,22 +5980,25 @@ a.mr-image-preview-resource-name:hover { gap: 12px; min-height: 34px; padding: 7px 10px; - background: rgba(0,0,0,0.16); + background: rgba(0, 0, 0, 0.16); color: var(--mr-text-secondary); font-size: 12px; } + .mr-options-db-row strong { color: var(--mr-text); font-size: 12px; font-weight: 700; text-align: right; } + .mr-options-db-message { margin-top: 10px; color: var(--mr-text-secondary); font-size: 12px; line-height: 1.35; } + .mr-options-db-actions { display: flex; align-items: center; @@ -5174,25 +6006,30 @@ a.mr-image-preview-resource-name:hover { gap: 8px; margin-top: 12px; } + .mr-options-db-actions .mr-btn { gap: 6px; } + .mr-options-db-actions .mr-btn svg { width: 14px; height: 14px; } + #model-resolver-modal .mr-options-shell .mr-btn.mr-btn-primary, #model-resolver-modal .mr-options-shell .mr-btn.mr-btn-primary:hover:not(:disabled) { color: #101010; } + .mr-options-field { display: flex; flex-direction: column; gap: 0; align-items: stretch; padding-bottom: 14px; - border-bottom: 1px solid rgba(255,255,255,0.1); + border-bottom: 1px solid rgba(255, 255, 255, 0.1); } + .mr-options-help, #model-resolver-modal .mr-options-help { margin: 8px 0 0; @@ -5200,6 +6037,7 @@ a.mr-image-preview-resource-name:hover { font-size: var(--mr-font-sm); line-height: 1.45; } + .mr-options-help summary, #model-resolver-modal .mr-options-help summary { width: fit-content; @@ -5207,28 +6045,34 @@ a.mr-image-preview-resource-name:hover { cursor: pointer; font-weight: 700; } + .mr-options-help summary:hover, #model-resolver-modal .mr-options-help summary:hover { color: var(--mr-accent); } + .mr-options-help ol, #model-resolver-modal .mr-options-help ol { margin: 8px 0 0 18px; padding: 0; } + .mr-options-help li, #model-resolver-modal .mr-options-help li { margin: 4px 0; } + .mr-options-help p, #model-resolver-modal .mr-options-help p { margin: 8px 0 0; } + .mr-options-help code, #model-resolver-modal .mr-options-help code { color: var(--mr-text); font-size: var(--mr-font-xs); } + .mr-options-token-check, #model-resolver-modal .mr-options-token-check { display: flex; @@ -5237,24 +6081,29 @@ a.mr-image-preview-resource-name:hover { gap: 10px; margin-top: 10px; } + .mr-options-token-check-status, #model-resolver-modal .mr-options-token-check-status { color: var(--mr-text-muted); font-size: var(--mr-font-sm); font-weight: 600; } + .mr-options-token-check-status.is-pending, #model-resolver-modal .mr-options-token-check-status.is-pending { color: var(--mr-text-secondary); } + .mr-options-token-check-status.is-valid, #model-resolver-modal .mr-options-token-check-status.is-valid { color: var(--mr-color-success); } + .mr-options-token-check-status.is-invalid, #model-resolver-modal .mr-options-token-check-status.is-invalid { color: var(--mr-color-error-light); } + .mr-options-label { display: flex; align-items: center; @@ -5264,6 +6113,7 @@ a.mr-image-preview-resource-name:hover { font-weight: 600; color: #d8d8dd; } + .mr-options-inline-link { border: none; background: none; @@ -5272,12 +6122,14 @@ a.mr-image-preview-resource-name:hover { padding: 0; cursor: pointer; text-decoration: none; - color: rgba(255,255,255,0.6); + color: rgba(255, 255, 255, 0.6); } + .mr-options-inline-link:hover { color: #ffffff; text-decoration: underline; } + .mr-tooltip-badge { display: inline-flex; align-items: center; @@ -5285,24 +6137,26 @@ a.mr-image-preview-resource-name:hover { width: 18px; height: 18px; border-radius: 999px; - border: 1px solid rgba(255,255,255,0.12); - color: rgba(255,255,255,0.7); + border: 1px solid rgba(255, 255, 255, 0.12); + color: rgba(255, 255, 255, 0.7); font-size: 11px; font-weight: 700; - background: rgba(255,255,255,0.03); + background: rgba(255, 255, 255, 0.03); cursor: help; flex: 0 0 auto; margin-left: 4px; vertical-align: middle; user-select: none; } + .mr-tooltip-badge:hover, .mr-tooltip-badge:focus-visible { - background: rgba(78,161,255,0.18); + background: rgba(78, 161, 255, 0.18); color: #d9ecff; - border-color: rgba(78,161,255,0.3); + border-color: rgba(78, 161, 255, 0.3); outline: none; } + .mr-global-tooltip { position: fixed; min-width: 220px; @@ -5310,17 +6164,18 @@ a.mr-image-preview-resource-name:hover { padding: 9px 11px; border-radius: 10px; background: rgba(34, 34, 38, 0.98); - border: 1px solid rgba(255,255,255,0.08); + border: 1px solid rgba(255, 255, 255, 0.08); color: var(--mr-text); font-size: 12px; font-weight: 400; line-height: 1.5; white-space: normal; text-align: left; - box-shadow: 0 12px 28px rgba(0,0,0,0.32); + box-shadow: 0 12px 28px rgba(0, 0, 0, 0.32); pointer-events: none; z-index: var(--mr-z-tooltip); } + .mr-options-input-row { display: grid; grid-template-columns: minmax(150px, 1fr) minmax(0, 380px) 42px; @@ -5329,10 +6184,12 @@ a.mr-image-preview-resource-name:hover { padding: 14px 0 0; min-width: 0; } -.mr-options-input-row > .mr-options-label { + +.mr-options-input-row>.mr-options-label { min-width: 0; padding-right: 8px; } + .mr-options-input, #model-resolver-modal select.mr-options-input { width: 100%; @@ -5341,48 +6198,56 @@ a.mr-image-preview-resource-name:hover { padding: 11px 14px; background: #0f1013; color: var(--mr-text); - border: 1px solid rgba(255,255,255,0.16); + border: 1px solid rgba(255, 255, 255, 0.16); border-radius: 8px; font-size: 13px; outline: none; transition: border-color 0.16s ease, background 0.16s ease, box-shadow 0.16s ease; } + .mr-options-input:focus, #model-resolver-modal select.mr-options-input:focus { background: #0f1013; - border-color: rgba(78,161,255,0.45); + border-color: rgba(78, 161, 255, 0.45); box-shadow: none; } + .mr-options-textarea { min-height: 150px; resize: vertical; line-height: 1.45; } + .mr-options-template-list { display: grid; gap: 12px; } + .mr-options-subsection-head { display: flex; align-items: center; gap: 8px; margin: 18px 0 2px; padding-bottom: 10px; - border-bottom: 1px solid rgba(255,255,255,0.12); + border-bottom: 1px solid rgba(255, 255, 255, 0.12); } + .mr-options-subsection-head:first-of-type { margin-top: 8px; } + .mr-options-subsection-head-actions { justify-content: space-between; gap: 12px; } + .mr-options-subsection-title-wrap { display: inline-flex; align-items: center; gap: 8px; min-width: 0; } + .mr-options-subsection-title { margin: 0; color: var(--mr-text); @@ -5390,6 +6255,7 @@ a.mr-image-preview-resource-name:hover { font-weight: 700; line-height: 1.2; } + .mr-options-placeholder-row { display: flex; align-items: center; @@ -5400,6 +6266,7 @@ a.mr-image-preview-resource-name:hover { font-size: 12px; font-weight: 600; } + .mr-options-template-detect-status { min-height: 28px; display: flex; @@ -5412,31 +6279,37 @@ a.mr-image-preview-resource-name:hover { font-size: 12px; line-height: 1.35; } + .mr-options-template-detect-status.is-pending { color: #cfe8ff; border-color: rgba(78, 161, 255, 0.28); background: rgba(78, 161, 255, 0.08); } + .mr-options-template-detect-status.is-valid { color: #c9f6d0; border-color: rgba(114, 211, 138, 0.28); background: rgba(114, 211, 138, 0.08); } + .mr-options-template-detect-status.is-invalid { color: #ffd8a8; border-color: rgba(255, 184, 77, 0.28); background: rgba(255, 184, 77, 0.08); } + .mr-options-mapping-section { display: grid; gap: 10px; } + .mr-options-mapping-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; } + .mr-options-mapping-list { display: grid; gap: 8px; @@ -5445,17 +6318,20 @@ a.mr-image-preview-resource-name:hover { border-radius: 6px; background: rgba(15, 23, 42, 0.20); } + .mr-options-mapping-row { display: grid; grid-template-columns: minmax(150px, 1fr) minmax(150px, 1fr) 40px; align-items: center; gap: 8px; } + .mr-options-mapping-row .mr-options-input { height: 32px; min-height: 32px; padding: 0 10px; } + .mr-options-mapping-remove { width: 32px; height: 32px; @@ -5471,10 +6347,12 @@ a.mr-image-preview-resource-name:hover { font-weight: 800; line-height: 1; } + .mr-options-mapping-remove:hover { background: rgba(255, 0, 0, 0.18); color: #ff6b6b; } + .mr-options-placeholder-badge { display: inline-flex; align-items: center; @@ -5488,21 +6366,25 @@ a.mr-image-preview-resource-name:hover { font-weight: 700; line-height: 1; } + .mr-options-template-row { display: grid; gap: 8px; padding: 12px 0; - border-top: 1px solid rgba(255,255,255,0.1); + border-top: 1px solid rgba(255, 255, 255, 0.1); } + .mr-options-template-main { display: grid; grid-template-columns: minmax(120px, 180px) minmax(0, 1fr); align-items: center; gap: 12px; } + .mr-options-template-custom.is-hidden { display: none; } + .mr-options-template-preview { min-height: 32px; display: flex; @@ -5517,10 +6399,12 @@ a.mr-image-preview-resource-name:hover { line-height: 1.4; word-break: break-word; } + .mr-options-template-preview span { color: rgba(226, 232, 240, 0.62); font-weight: 600; } + .mr-options-template-preview code { color: #00a8ff; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace; @@ -5528,22 +6412,27 @@ a.mr-image-preview-resource-name:hover { white-space: normal; word-break: break-word; } + @media (max-width: 820px) { .mr-options-template-main { grid-template-columns: 1fr; } + .mr-options-subsection-head-actions { align-items: flex-start; flex-direction: column; } + .mr-options-mapping-head { align-items: flex-start; flex-direction: column; } + .mr-options-mapping-row { grid-template-columns: 1fr 1fr 36px; } } + .mr-options-visibility-btn, #model-resolver-modal .mr-options-visibility-btn { width: 42px; @@ -5554,61 +6443,69 @@ a.mr-image-preview-resource-name:hover { align-items: center; justify-content: center; padding: 0; - border: 1px solid var(--mr-missing-control-border, rgba(255,255,255,0.105)); + border: 1px solid var(--mr-missing-control-border, rgba(255, 255, 255, 0.105)); border-radius: var(--mr-missing-control-radius, 7px); - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); color: var(--mr-text); box-shadow: var(--mr-missing-control-shadow, none); cursor: pointer; transition: var(--mr-missing-control-transition, background 0.15s ease, border-color 0.15s ease, color 0.15s ease); } + .mr-options-visibility-btn:hover, #model-resolver-modal .mr-options-visibility-btn:hover { - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.06)); + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.06)); color: var(--mr-text); - border-color: var(--mr-missing-control-border-hover, rgba(255,255,255,0.17)); + border-color: var(--mr-missing-control-border-hover, rgba(255, 255, 255, 0.17)); } + .mr-options-visibility-btn[aria-pressed="true"], #model-resolver-modal .mr-options-visibility-btn[aria-pressed="true"] { color: #dffbe5; - border-color: rgba(114,211,138,0.32); - background: rgba(114,211,138,0.13); + border-color: rgba(114, 211, 138, 0.32); + background: rgba(114, 211, 138, 0.13); } + .mr-options-visibility-btn:focus-visible, #model-resolver-modal .mr-options-visibility-btn:focus-visible { outline: none; - border-color: var(--mr-missing-control-focus-border, rgba(114,211,138,0.30)); - box-shadow: 0 0 0 2px var(--mr-missing-control-focus-ring, rgba(114,211,138,0.08)); + border-color: var(--mr-missing-control-focus-border, rgba(114, 211, 138, 0.30)); + box-shadow: 0 0 0 2px var(--mr-missing-control-focus-ring, rgba(114, 211, 138, 0.08)); } + .mr-options-visibility-btn.mr-is-muted, #model-resolver-modal .mr-options-visibility-btn.mr-is-muted { color: var(--mr-text-muted); } + .mr-options-visibility-btn svg, #model-resolver-modal .mr-options-visibility-btn svg { width: var(--mr-font-base); height: var(--mr-font-base); display: block; } + .mr-options-toggle-list { display: grid; gap: 0; } + .mr-options-dependent-block, #model-resolver-modal .mr-options-dependent-block { display: grid; gap: 10px; margin: 0 0 8px 16px; padding: 12px 0 4px 14px; - border-left: 1px solid rgba(255,255,255,0.12); + border-left: 1px solid rgba(255, 255, 255, 0.12); } + .mr-options-toggle-row { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px 0; - border-bottom: 1px solid rgba(255,255,255,0.1); + border-bottom: 1px solid rgba(255, 255, 255, 0.1); border-radius: 0; border-top: none; border-left: none; @@ -5618,14 +6515,17 @@ a.mr-image-preview-resource-name:hover { transition: background 0.16s ease; min-width: 0; } + .mr-options-toggle-row:hover { background: transparent; } + .mr-options-toggle-copy { display: grid; gap: 0; min-width: 0; } + .mr-options-toggle-title { display: flex; align-items: center; @@ -5635,6 +6535,7 @@ a.mr-image-preview-resource-name:hover { font-weight: 500; color: #d8d8dd; } + .mr-options-source-icon { display: inline-flex; align-items: center; @@ -5644,11 +6545,13 @@ a.mr-image-preview-resource-name:hover { flex: 0 0 16px; color: currentColor; } + .mr-options-source-icon svg { display: block; width: 16px; height: 16px; } + .mr-options-toggle-control { display: inline-flex; align-items: center; @@ -5658,20 +6561,23 @@ a.mr-image-preview-resource-name:hover { flex: 0 0 auto; margin-left: auto; } + .mr-options-switch-input { position: absolute; opacity: 0; pointer-events: none; } + .mr-options-switch { position: relative; width: 46px; height: 26px; border-radius: 999px; background: #555560; - border: 1px solid rgba(255,255,255,0.06); + border: 1px solid rgba(255, 255, 255, 0.06); transition: background 0.16s ease, border-color 0.16s ease, box-shadow 0.16s ease; } + .mr-options-switch::after { content: ""; position: absolute; @@ -5681,38 +6587,45 @@ a.mr-image-preview-resource-name:hover { height: 20px; border-radius: 999px; background: #f2f6fb; - box-shadow: 0 3px 8px rgba(0,0,0,0.3); + box-shadow: 0 3px 8px rgba(0, 0, 0, 0.3); transition: transform 0.16s ease; } -.mr-options-switch-input:checked + .mr-options-switch { + +.mr-options-switch-input:checked+.mr-options-switch { background: #4c97ff; border-color: #4c97ff; box-shadow: none; } -.mr-options-switch-input:checked + .mr-options-switch::after { + +.mr-options-switch-input:checked+.mr-options-switch::after { transform: translateX(20px); } + .mr-options-number-row { display: grid; grid-template-columns: minmax(150px, 1fr) minmax(72px, 118px); gap: 12px; align-items: center; padding: 16px 0; - border-bottom: 1px solid rgba(255,255,255,0.1); + border-bottom: 1px solid rgba(255, 255, 255, 0.1); min-width: 0; } + .mr-options-number-copy { display: grid; gap: 0; min-width: 0; } + .mr-options-number-row .mr-options-input { width: 100%; min-width: 0; } + .mr-options-path-mode-row { grid-template-columns: minmax(150px, 1fr) minmax(220px, 280px); } + .mr-options-actions { display: flex; flex-direction: column; @@ -5720,92 +6633,113 @@ a.mr-image-preview-resource-name:hover { justify-content: flex-end; margin-top: auto; padding-top: 10px; - border-top: 1px solid rgba(255,255,255,0.08); + border-top: 1px solid rgba(255, 255, 255, 0.08); gap: 10px; flex: 0 0 auto; } + .mr-options-actions .mr-footer-btn { width: 100%; min-width: 0; } + .mr-options-actions .mr-btn.mr-btn-primary.mr-footer-btn { - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); - border-color: var(--mr-missing-control-border, rgba(255,255,255,0.105)); + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); + border-color: var(--mr-missing-control-border, rgba(255, 255, 255, 0.105)); border-radius: var(--mr-missing-control-radius, 7px); color: var(--mr-text); box-shadow: var(--mr-missing-control-shadow, none); } + .mr-options-actions .mr-btn.mr-btn-primary.mr-footer-btn:hover:not(:disabled) { - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.06)); - border-color: var(--mr-missing-control-border-hover, rgba(255,255,255,0.17)); + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.06)); + border-color: var(--mr-missing-control-border-hover, rgba(255, 255, 255, 0.17)); color: var(--mr-text); } + .mr-options-status { font-size: 12px; color: var(--mr-text-muted); text-align: left; } + .mr-options-status.is-dirty { color: #ffd48a; } + .mr-options-status.is-saved { color: #9dd8a9; } + @media (max-width: 980px) { .mr-options-shell { grid-template-columns: 1fr; border-radius: 16px; } + .mr-options-sidebar { border-right: none; - border-bottom: 1px solid rgba(255,255,255,0.08); + border-bottom: 1px solid rgba(255, 255, 255, 0.08); height: auto; } } + @media (max-width: 900px) { .mr-options-main { padding: 16px 18px 0px 18px; } + .mr-options-input-row { grid-template-columns: minmax(120px, 1fr) minmax(0, 1fr) 42px; gap: 8px; } + .mr-options-number-row { grid-template-columns: minmax(120px, 1fr) minmax(64px, 96px); gap: 8px; } + .mr-options-path-mode-row { grid-template-columns: minmax(120px, 1fr) minmax(220px, 260px); } + .mr-options-toggle-row { gap: 10px; } } + @media (max-width: 760px) { .mr-options-input-row { grid-template-columns: 1fr; } - .mr-options-input-row > .mr-options-label { + + .mr-options-input-row>.mr-options-label { padding-right: 0; } + .mr-options-visibility-btn { justify-self: start; } + .mr-options-toggle-row, .mr-options-number-row { grid-template-columns: 1fr; flex-direction: column; align-items: flex-start; } + .mr-options-toggle-control { min-width: 0; margin-left: 0; } + .mr-options-number-row { grid-template-columns: 1fr; } } + @media (max-width: 640px) { + .mr-options-section-head, .mr-options-actions, .mr-options-toggle-row, @@ -5814,26 +6748,32 @@ a.mr-image-preview-resource-name:hover { flex-direction: column; align-items: flex-start; } + .mr-options-toggle-control { min-width: 0; } + .mr-options-number-row { grid-template-columns: 1fr; } + .mr-options-input { width: 100%; } } + .mr-download-target { margin-top: 0; padding-top: 10px; - border-top: 1px solid rgba(255,255,255,0.06); + border-top: 1px solid rgba(255, 255, 255, 0.06); display: grid; gap: 8px; } + .mr-missing-browser .mr-download-target { - border-top-color: var(--mr-missing-line, rgba(255,255,255,0.075)); + border-top-color: var(--mr-missing-line, rgba(255, 255, 255, 0.075)); } + .mr-download-target-grid { display: grid; grid-template-columns: minmax(120px, 33%) minmax(0, 1fr) auto; @@ -5843,10 +6783,12 @@ a.mr-image-preview-resource-name:hover { gap: 8px 10px; align-items: start; } + .mr-download-target-row { display: grid; gap: 6px; } + @media (max-width: 720px) { .mr-download-target-grid { grid-template-columns: 1fr; @@ -5859,6 +6801,7 @@ a.mr-image-preview-resource-name:hover { "suggest-control"; } } + .mr-download-target-label { display: flex; align-items: flex-end; @@ -5869,6 +6812,7 @@ a.mr-image-preview-resource-name:hover { letter-spacing: 0.06em; line-height: 1.2; } + .mr-download-target-label .mr-download-folder-help { width: 14px; height: 14px; @@ -5877,22 +6821,28 @@ a.mr-image-preview-resource-name:hover { line-height: 1; transform: translateY(-1px); } + .mr-download-target-label-folder { grid-area: folder-label; } + .mr-download-target-label-subfolder { grid-area: subfolder-label; } + .mr-download-target-label-suggest { grid-area: suggest-label; justify-content: center; } + .mr-download-target-folder-wrap { grid-area: folder-control; } + .mr-download-target-subfolder-wrap { grid-area: subfolder-control; } + .mr-download-target-input, .mr-download-target-select { display: block; @@ -5901,7 +6851,7 @@ a.mr-image-preview-resource-name:hover { min-height: var(--mr-download-control-height, 36px); margin: 0; padding: 0 11px; - background: rgba(255,255,255,0.04); + background: rgba(255, 255, 255, 0.04); color: var(--mr-text); border: 1px solid var(--mr-border); border-radius: 9px; @@ -5910,26 +6860,31 @@ a.mr-image-preview-resource-name:hover { outline: none; box-sizing: border-box; } + .mr-missing-browser .mr-download-target-input, .mr-missing-browser .mr-download-target-select { - background: rgba(255,255,255,0.035); - border-color: var(--mr-missing-line-strong, rgba(255,255,255,0.12)); + background: rgba(255, 255, 255, 0.035); + border-color: var(--mr-missing-line-strong, rgba(255, 255, 255, 0.12)); border-radius: var(--mr-missing-control-radius, 7px); } + .mr-download-target-select { appearance: none; -webkit-appearance: none; -moz-appearance: none; cursor: pointer; } + .mr-search-source-select { cursor: pointer; } + .mr-download-target-input:focus, .mr-download-target-select:focus { - border-color: rgba(114,211,138,0.4); - box-shadow: 0 0 0 3px rgba(114,211,138,0.12); + border-color: rgba(114, 211, 138, 0.4); + box-shadow: 0 0 0 3px rgba(114, 211, 138, 0.12); } + .mr-download-target-wrap { position: relative; display: flex; @@ -5937,6 +6892,7 @@ a.mr-image-preview-resource-name:hover { min-width: 0; width: 100%; } + .mr-download-subfolder-control { display: grid; grid-template-columns: minmax(0, 1fr) auto; @@ -5944,6 +6900,7 @@ a.mr-image-preview-resource-name:hover { width: 100%; min-width: 0; } + .mr-download-suggest-btn, #model-resolver-modal .mr-download-suggest-btn { grid-area: suggest-control; @@ -5960,11 +6917,13 @@ a.mr-image-preview-resource-name:hover { align-items: center; justify-content: center; } + .mr-download-suggest-icon { width: 16px; height: 16px; flex: none; } + .mr-download-suggest-btn.mr-is-suggesting, .mr-download-suggest-btn.mr-is-suggesting:hover, .mr-download-suggest-btn.mr-is-suggesting:focus, @@ -5973,10 +6932,12 @@ a.mr-image-preview-resource-name:hover { #model-resolver-modal .mr-download-suggest-btn.mr-is-suggesting:focus { color: #ffd84d !important; } + .mr-download-suggest-btn.mr-is-suggesting:disabled, #model-resolver-modal .mr-download-suggest-btn.mr-is-suggesting:disabled { opacity: 1; } + .mr-download-suggest-btn.mr-is-suggesting .mr-download-suggest-icon, #model-resolver-modal .mr-download-suggest-btn.mr-is-suggesting .mr-download-suggest-icon { color: #ffd84d; @@ -5984,11 +6945,13 @@ a.mr-image-preview-resource-name:hover { animation: mr-suggest-lightbulb-flash 650ms ease-out; transform-origin: 50% 58%; } + @media (max-width: 720px) { .mr-download-target-label { min-height: 0; } } + .mr-download-target-list { box-sizing: border-box; position: absolute; @@ -6007,12 +6970,14 @@ a.mr-image-preview-resource-name:hover { border-radius: 12px; box-shadow: var(--mr-shadow-elevated); } + .mr-missing-browser .mr-download-target-list { background: #1b1b1b; - border-color: var(--mr-missing-line-strong, rgba(255,255,255,0.12)); + border-color: var(--mr-missing-line-strong, rgba(255, 255, 255, 0.12)); border-radius: var(--mr-missing-radius, 7px); - box-shadow: 0 16px 36px rgba(0,0,0,0.3); + box-shadow: 0 16px 36px rgba(0, 0, 0, 0.3); } + .mr-download-target-list.mr-download-target-floating { position: fixed; top: auto; @@ -6020,25 +6985,29 @@ a.mr-image-preview-resource-name:hover { right: auto; z-index: var(--mr-z-context-menu); } + .mr-download-target-option { box-sizing: border-box; max-width: 100%; padding: 8px 10px; cursor: pointer; - border-bottom: 1px solid rgba(255,255,255,0.04); + border-bottom: 1px solid rgba(255, 255, 255, 0.04); color: var(--mr-text); font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .mr-download-target-option:last-child { border-bottom: none; } + .mr-download-target-option:hover, .mr-download-target-option.is-highlighted { - background: rgba(114,211,138,0.12); + background: rgba(114, 211, 138, 0.12); } + .mr-download-target-list.mr-download-folder-browser { box-sizing: border-box; right: auto; @@ -6048,6 +7017,7 @@ a.mr-image-preview-resource-name:hover { overflow: hidden; padding: 0; } + .mr-folder-browser-preview-label, .mr-folder-browser-root-path, .mr-folder-browser-count, @@ -6056,31 +7026,37 @@ a.mr-image-preview-resource-name:hover { font-size: 10px; line-height: 1.3; } + .mr-folder-browser-preview { display: grid; gap: 3px; padding: 9px 12px; - border-bottom: 1px solid rgba(255,255,255,0.06); + border-bottom: 1px solid rgba(255, 255, 255, 0.06); } + .mr-folder-browser-preview-path { color: var(--mr-text); font-size: 11px; line-height: 1.35; word-break: break-all; } + .mr-folder-browser-scroll { box-sizing: border-box; overflow: auto; padding: 6px; } + .mr-folder-browser-root { - border: 1px solid rgba(255,255,255,0.065); + border: 1px solid rgba(255, 255, 255, 0.065); border-radius: 8px; - background: rgba(255,255,255,0.018); + background: rgba(255, 255, 255, 0.018); } -.mr-folder-browser-root + .mr-folder-browser-root { + +.mr-folder-browser-root+.mr-folder-browser-root { margin-top: 6px; } + .mr-folder-browser-root-head { width: 100%; border: 0; @@ -6089,6 +7065,7 @@ a.mr-image-preview-resource-name:hover { text-align: left; cursor: pointer; } + .mr-folder-browser-root-head { display: flex; align-items: center; @@ -6096,10 +7073,12 @@ a.mr-image-preview-resource-name:hover { min-height: 30px; padding: 6px 8px; } + .mr-folder-browser-root-head:hover, .mr-folder-browser-row:hover { - background: rgba(114,211,138,0.095); + background: rgba(114, 211, 138, 0.095); } + .mr-folder-browser-root-title { min-width: 0; flex: 1; @@ -6109,24 +7088,30 @@ a.mr-image-preview-resource-name:hover { text-overflow: ellipsis; white-space: nowrap; } + .mr-folder-browser-root-path { padding: 0 10px 7px 31px; word-break: break-all; } + .mr-folder-browser-tree, .mr-folder-browser-children { display: none; } + .mr-folder-browser-tree.is-expanded, .mr-folder-browser-children.is-expanded { display: block; } + .mr-folder-browser-tree { padding: 2px 4px 6px; } + .mr-folder-browser-children { margin-left: 18px; } + .mr-folder-browser-row { display: flex; align-items: center; @@ -6137,10 +7122,12 @@ a.mr-image-preview-resource-name:hover { cursor: pointer; color: var(--mr-text); } + .mr-folder-browser-row.is-selected { - background: rgba(114,211,138,0.15); - box-shadow: inset 0 0 0 1px rgba(114,211,138,0.32); + background: rgba(114, 211, 138, 0.15); + box-shadow: inset 0 0 0 1px rgba(114, 211, 138, 0.32); } + .mr-folder-browser-toggle { box-sizing: border-box; width: 18px; @@ -6156,6 +7143,7 @@ a.mr-image-preview-resource-name:hover { justify-content: center; cursor: pointer; } + .mr-folder-browser-row.is-expandable .mr-folder-browser-toggle { width: 29px; min-width: 29px; @@ -6163,14 +7151,17 @@ a.mr-image-preview-resource-name:hover { margin-right: -4px; padding-left: 7px; } + .mr-folder-browser-toggle:hover { - background: rgba(255,255,255,0.06); + background: rgba(255, 255, 255, 0.06); color: var(--mr-text); } + .mr-folder-browser-toggle-empty { pointer-events: none; opacity: 0; } + .mr-folder-browser-chevron { width: 0; height: 0; @@ -6179,23 +7170,27 @@ a.mr-image-preview-resource-name:hover { border-left: 5px solid currentColor; transition: transform 140ms ease; } + .mr-folder-browser-toggle.is-expanded .mr-folder-browser-chevron, .mr-folder-browser-root-head.is-expanded .mr-folder-browser-chevron { transform: rotate(90deg); } + .mr-folder-browser-folder-icon { width: 16px; height: 16px; min-width: 16px; - color: rgba(114,211,138,0.95); + color: rgba(114, 211, 138, 0.95); display: inline-flex; align-items: center; justify-content: center; } + .mr-folder-browser-svg { width: 15px; height: 15px; } + .mr-folder-browser-name { min-width: 0; flex: 1; @@ -6205,12 +7200,14 @@ a.mr-image-preview-resource-name:hover { text-overflow: ellipsis; white-space: nowrap; } + .mr-folder-browser-count, .mr-folder-browser-root-count { padding: 2px 6px; border-radius: 999px; - background: rgba(255,255,255,0.045); + background: rgba(255, 255, 255, 0.045); } + .mr-folder-browser-empty { display: grid; gap: 6px; @@ -6219,18 +7216,20 @@ a.mr-image-preview-resource-name:hover { text-align: center; font-size: 11px; } + .mr-folder-browser-empty-path { justify-self: center; max-width: 100%; padding: 5px 7px; border-radius: 6px; - background: rgba(114,211,138,0.08); + background: rgba(114, 211, 138, 0.08); color: var(--mr-text); font-family: 'SF Mono', 'Consolas', 'Monaco', monospace; font-size: 10px; overflow-wrap: anywhere; word-break: break-word; } + @media (max-width: 720px) { .mr-download-target-list.mr-download-folder-browser { width: min(100%, calc(100vw - 32px)); @@ -6241,27 +7240,33 @@ a.mr-image-preview-resource-name:hover { #model-resolver-modal .mr-missing-detail-pane { background: var(--mr-missing-bg); } + #model-resolver-modal .mr-missing-detail-pane .mr-card { padding: 18px 0; } + #model-resolver-modal .mr-missing-detail-pane .mr-card-header { margin-bottom: 12px; } + #model-resolver-modal .mr-missing-detail-pane .mr-card-title { font-size: 17px; font-weight: 750; } + #model-resolver-modal .mr-missing-detail-pane .mr-node-chip, #model-resolver-modal .mr-missing-detail-pane .mr-category-chip { min-height: var(--mr-missing-chip-height, 20px); padding: 2px 8px; font-size: 10px; } + #model-resolver-modal .mr-missing-detail-pane .mr-node-chip, #model-resolver-modal .mr-missing-detail-pane .mr-category-chip:not(.mr-type-chip) { - background: var(--mr-missing-chip-bg, rgba(255,255,255,0.045)); - border-color: var(--mr-missing-chip-border, rgba(255,255,255,0.08)); + background: var(--mr-missing-chip-bg, rgba(255, 255, 255, 0.045)); + border-color: var(--mr-missing-chip-border, rgba(255, 255, 255, 0.08)); } + #model-resolver-modal .mr-missing-detail-pane .mr-category-chip.mr-type-chip { background: linear-gradient(180deg, @@ -6270,31 +7275,35 @@ a.mr-image-preview-resource-name:hover { border-color: rgba(var(--mr-type-rgb), var(--mr-type-border-alpha)); color: var(--mr-type-text); box-shadow: - inset 0 0 0 1px rgba(255,255,255,0.026), + inset 0 0 0 1px rgba(255, 255, 255, 0.026), 0 0 12px rgba(var(--mr-type-rgb), var(--mr-type-glow-alpha)); } + #model-resolver-modal .mr-missing-detail-pane .mr-column { padding: 14px; background: transparent; border-color: transparent; border-radius: 0; } + #model-resolver-modal .mr-missing-detail-pane .mr-column-header { margin-bottom: 12px; padding-bottom: 10px; color: #c3c3c3; - border-bottom-color: rgba(255,255,255,0.075); + border-bottom-color: rgba(255, 255, 255, 0.075); font-size: 11px; letter-spacing: 0.075em; } + #model-resolver-modal .mr-missing-detail-pane .mr-match-row { min-height: 42px; margin-bottom: 8px; padding: 7px 10px; - background: rgba(255,255,255,0.032); - border-color: rgba(255,255,255,0.065); + background: rgba(255, 255, 255, 0.032); + border-color: rgba(255, 255, 255, 0.065); border-radius: 7px; } + @supports (content-visibility: auto) { #model-resolver-modal .mr-missing-detail-pane .mr-match-row { content-visibility: auto; @@ -6306,24 +7315,29 @@ a.mr-image-preview-resource-name:hover { contain-intrinsic-size: auto 220px; } } + #model-resolver-modal .mr-missing-detail-pane .mr-match-row.mr-best-match { - background: linear-gradient(90deg, rgba(114,211,138,0.135) 0%, rgba(114,211,138,0.07) 55%, rgba(114,211,138,0.035) 100%); - border-color: rgba(114,211,138,0.26); + background: linear-gradient(90deg, rgba(114, 211, 138, 0.135) 0%, rgba(114, 211, 138, 0.07) 55%, rgba(114, 211, 138, 0.035) 100%); + border-color: rgba(114, 211, 138, 0.26); } + #model-resolver-modal .mr-missing-detail-pane .mr-match-row:hover { - background: rgba(255,255,255,0.042); - border-color: rgba(255,255,255,0.10); + background: rgba(255, 255, 255, 0.042); + border-color: rgba(255, 255, 255, 0.10); } + #model-resolver-modal .mr-missing-detail-pane .mr-match-row.mr-best-match:hover { - background: linear-gradient(90deg, rgba(114,211,138,0.15) 0%, rgba(114,211,138,0.08) 55%, rgba(114,211,138,0.04) 100%); - border-color: rgba(114,211,138,0.32); + background: linear-gradient(90deg, rgba(114, 211, 138, 0.15) 0%, rgba(114, 211, 138, 0.08) 55%, rgba(114, 211, 138, 0.04) 100%); + border-color: rgba(114, 211, 138, 0.32); } + #model-resolver-modal .mr-missing-detail-pane .mr-match-filename { font-family: "Segoe UI Variable", "Segoe UI", system-ui, sans-serif; font-size: 11.5px; font-weight: 650; color: #e7e7e7; } + #model-resolver-modal .mr-missing-detail-pane .mr-badge, #model-resolver-modal .mr-missing-detail-pane .mr-match-status { min-height: 20px; @@ -6332,37 +7346,41 @@ a.mr-image-preview-resource-name:hover { font-size: 10px; font-weight: 750; } + #model-resolver-modal .mr-missing-detail-pane .mr-local-link-btn, #model-resolver-modal .mr-missing-detail-pane .mr-combo-refresh-btn, #model-resolver-modal .mr-missing-detail-pane .mr-local-matches-refresh-btn, #model-resolver-modal .mr-missing-detail-pane .mr-search-result-action-btn, -#model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-button-picker > .mr-btn { - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); - border: 1px solid var(--mr-missing-control-border, rgba(255,255,255,0.105)); +#model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-button-picker>.mr-btn { + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); + border: 1px solid var(--mr-missing-control-border, rgba(255, 255, 255, 0.105)); border-radius: var(--mr-missing-control-radius, 7px); box-shadow: var(--mr-missing-control-shadow, none); color: var(--mr-text); transition: var(--mr-missing-control-transition, background 0.15s ease, border-color 0.15s ease, color 0.15s ease); } + #model-resolver-modal .mr-missing-detail-pane .mr-local-link-btn:hover:not(:disabled), #model-resolver-modal .mr-missing-detail-pane .mr-combo-refresh-btn:hover:not(:disabled), #model-resolver-modal .mr-missing-detail-pane .mr-local-matches-refresh-btn:hover:not(:disabled), #model-resolver-modal .mr-missing-detail-pane .mr-search-result-action-btn:hover:not(:disabled), -#model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-button-picker > .mr-btn:hover:not(:disabled) { - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.06)); - border-color: var(--mr-missing-control-border-hover, rgba(255,255,255,0.17)); +#model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-button-picker>.mr-btn:hover:not(:disabled) { + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.06)); + border-color: var(--mr-missing-control-border-hover, rgba(255, 255, 255, 0.17)); color: var(--mr-text); transform: none; } + #model-resolver-modal .mr-missing-detail-pane .mr-local-link-btn:focus-visible, #model-resolver-modal .mr-missing-detail-pane .mr-combo-refresh-btn:focus-visible, #model-resolver-modal .mr-missing-detail-pane .mr-local-matches-refresh-btn:focus-visible, #model-resolver-modal .mr-missing-detail-pane .mr-search-result-action-btn:focus-visible, -#model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-button-picker > .mr-btn:focus-visible { +#model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-button-picker>.mr-btn:focus-visible { outline: none; - border-color: var(--mr-missing-control-focus-border, rgba(114,211,138,0.30)); - box-shadow: 0 0 0 2px var(--mr-missing-control-focus-ring, rgba(114,211,138,0.08)) !important; + border-color: var(--mr-missing-control-focus-border, rgba(114, 211, 138, 0.30)); + box-shadow: 0 0 0 2px var(--mr-missing-control-focus-ring, rgba(114, 211, 138, 0.08)) !important; } + #model-resolver-modal .mr-missing-detail-pane .mr-local-link-btn { width: var(--mr-missing-icon-button-size, 28px); min-width: var(--mr-missing-icon-button-size, 28px); @@ -6372,34 +7390,39 @@ a.mr-image-preview-resource-name:hover { flex: 0 0 var(--mr-missing-icon-button-size, 28px); padding: 0; } -#model-resolver-modal .mr-missing-detail-pane .mr-local-link-btn > svg { + +#model-resolver-modal .mr-missing-detail-pane .mr-local-link-btn>svg { display: block !important; width: var(--mr-missing-icon-size, 13px) !important; height: var(--mr-missing-icon-size, 13px) !important; flex: 0 0 var(--mr-missing-icon-size, 13px); pointer-events: none; } + #model-resolver-modal .mr-missing-detail-pane .mr-local-alternatives-toggle { min-height: 28px; margin: 6px 0; padding: 0 9px; - background: rgba(255,255,255,0.027); - border: 1px solid rgba(255,255,255,0.065) !important; + background: rgba(255, 255, 255, 0.027); + border: 1px solid rgba(255, 255, 255, 0.065) !important; border-radius: 7px; box-shadow: none !important; } + #model-resolver-modal .mr-missing-detail-pane .mr-local-alternatives-toggle:hover, #model-resolver-modal .mr-missing-detail-pane .mr-local-alternatives-toggle:focus, #model-resolver-modal .mr-missing-detail-pane .mr-local-alternatives-toggle:focus-visible { - background: rgba(255,255,255,0.038); - border-color: rgba(255,255,255,0.095) !important; + background: rgba(255, 255, 255, 0.038); + border-color: rgba(255, 255, 255, 0.095) !important; box-shadow: none !important; } + #model-resolver-modal .mr-missing-detail-pane .mr-combo-section { margin-top: 10px; padding-top: 10px; - border-top-color: rgba(255,255,255,0.07); + border-top-color: rgba(255, 255, 255, 0.07); } + #model-resolver-modal .mr-missing-detail-pane .mr-combo-input, #model-resolver-modal .mr-missing-detail-pane .mr-search-source-select, #model-resolver-modal .mr-missing-detail-pane .mr-search-base-select, @@ -6407,21 +7430,23 @@ a.mr-image-preview-resource-name:hover { #model-resolver-modal .mr-missing-detail-pane .mr-download-target-select { min-height: var(--mr-missing-field-height, 38px); height: var(--mr-missing-field-height, 38px); - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); - border-color: var(--mr-missing-control-border, rgba(255,255,255,0.10)); + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); + border-color: var(--mr-missing-control-border, rgba(255, 255, 255, 0.10)); border-radius: var(--mr-missing-control-radius, 7px); box-shadow: none; font-size: 13px; } + #model-resolver-modal .mr-missing-detail-pane .mr-combo-input:focus, #model-resolver-modal .mr-missing-detail-pane .mr-search-source-select:focus, #model-resolver-modal .mr-missing-detail-pane .mr-search-base-select:focus, #model-resolver-modal .mr-missing-detail-pane .mr-download-target-input:focus, #model-resolver-modal .mr-missing-detail-pane .mr-download-target-select:focus { - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.045)); - border-color: var(--mr-missing-control-focus-border, rgba(114,211,138,0.34)); - box-shadow: 0 0 0 2px var(--mr-missing-control-focus-ring, rgba(114,211,138,0.08)); + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.045)); + border-color: var(--mr-missing-control-focus-border, rgba(114, 211, 138, 0.34)); + box-shadow: 0 0 0 2px var(--mr-missing-control-focus-ring, rgba(114, 211, 138, 0.08)); } + #model-resolver-modal .mr-missing-detail-pane .mr-combo-refresh-btn { display: inline-flex; align-items: center; @@ -6437,18 +7462,21 @@ a.mr-image-preview-resource-name:hover { line-height: 1; overflow: hidden; } + #model-resolver-modal .mr-missing-detail-pane .mr-combo-refresh-icon { width: var(--mr-missing-icon-size, 13px); height: var(--mr-missing-icon-size, 13px); display: block; } + #model-resolver-modal .mr-missing-detail-pane .mr-download-section { padding: 0; background: transparent; border-color: transparent; border-radius: 0; } -#model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-button-picker > .mr-btn { + +#model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-button-picker>.mr-btn { --mr-missing-search-button-height: var(--mr-missing-field-height, 38px); width: 82px; min-width: 82px; @@ -6458,28 +7486,33 @@ a.mr-image-preview-resource-name:hover { font-size: 12px; font-weight: 700; } -#model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-button-picker > .mr-btn .mr-btn-icon { + +#model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-button-picker>.mr-btn .mr-btn-icon { width: var(--mr-missing-icon-size, 13px); height: var(--mr-missing-icon-size, 13px); font-size: var(--mr-missing-icon-size, 13px); } -#model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-button-picker > .mr-btn .mr-btn-icon svg { + +#model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-button-picker>.mr-btn .mr-btn-icon svg { width: var(--mr-missing-icon-size, 13px); height: var(--mr-missing-icon-size, 13px); display: block; } + #model-resolver-modal .mr-missing-detail-pane .mr-download-target { padding-top: 12px; - border-top-color: rgba(255,255,255,0.07); + border-top-color: rgba(255, 255, 255, 0.07); } + #model-resolver-modal .mr-missing-detail-pane .mr-download-target-grid { gap: 10px 12px; } + #model-resolver-modal .mr-missing-detail-pane .model-resolver-selected { margin: 0 0 12px; padding: 9px 11px; - background: linear-gradient(90deg, rgba(114,211,138,0.11) 0%, rgba(114,211,138,0.045) 100%); - border: 1px solid rgba(114,211,138,0.20); + background: linear-gradient(90deg, rgba(114, 211, 138, 0.11) 0%, rgba(114, 211, 138, 0.045) 100%); + border: 1px solid rgba(114, 211, 138, 0.20); border-radius: 7px; color: var(--mr-text-soft); font-size: 12px; @@ -6490,53 +7523,64 @@ a.mr-image-preview-resource-name:hover { #model-resolver-modal .mr-missing-detail-pane .mr-columns { gap: 0; } -#model-resolver-modal .mr-missing-detail-pane .mr-column + .mr-column { + +#model-resolver-modal .mr-missing-detail-pane .mr-column+.mr-column { position: relative; margin-top: 24px; padding-top: 20px; - border-top: 1px solid rgba(255,255,255,0.12); + border-top: 1px solid rgba(255, 255, 255, 0.12); } -#model-resolver-modal .mr-missing-detail-pane .mr-column + .mr-column::before { + +#model-resolver-modal .mr-missing-detail-pane .mr-column+.mr-column::before { content: ""; position: absolute; top: -2px; left: 0; right: 0; height: 1px; - background: linear-gradient(90deg, rgba(114,211,138,0.28), rgba(255,255,255,0.08) 34%, transparent 100%); + background: linear-gradient(90deg, rgba(114, 211, 138, 0.28), rgba(255, 255, 255, 0.08) 34%, transparent 100%); } + #model-resolver-modal .mr-missing-detail-pane .mr-column-header { background: transparent; } + #model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] { - background: rgba(255,255,255,0.014); - border-color: rgba(255,255,255,0.06); + background: rgba(255, 255, 255, 0.014); + border-color: rgba(255, 255, 255, 0.06); } + #model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-status-inline { margin-bottom: 10px; } + #model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-source-bar, #model-resolver-modal .mr-missing-detail-pane .mr-download-target { padding: 0; } + #model-resolver-modal .mr-missing-detail-pane .mr-download-section .mr-search-source-bar { padding-bottom: 12px; - border-bottom: 1px solid rgba(255,255,255,0.065); + border-bottom: 1px solid rgba(255, 255, 255, 0.065); } + #model-resolver-modal .mr-missing-detail-pane .mr-download-target { padding-top: 12px; border-top: 0; } + #model-resolver-modal .mr-missing-detail-pane .mr-selected-bar-inner { gap: 8px; flex-wrap: nowrap; } + #model-resolver-modal .mr-missing-detail-pane .mr-selected-label { color: #72d38a; font-size: 11px; font-weight: 750; white-space: nowrap; } + #model-resolver-modal .mr-missing-detail-pane .mr-selected-code { min-width: 0; color: #d9d9d9; @@ -6544,108 +7588,128 @@ a.mr-image-preview-resource-name:hover { font-size: 11px; white-space: nowrap; } + #model-resolver-modal .mr-missing-detail-pane .mr-selected-actions { gap: 8px; margin-left: auto; } + #model-resolver-modal .mr-missing-detail-pane .model-resolver-selected .mr-btn { min-height: var(--mr-missing-search-button-height, 34px); height: var(--mr-missing-search-button-height, 34px); padding: 0 12px; margin-left: 0; - background: var(--mr-missing-control-bg, rgba(255,255,255,0.035)); - border-color: var(--mr-missing-control-border, rgba(255,255,255,0.105)); + background: var(--mr-missing-control-bg, rgba(255, 255, 255, 0.035)); + border-color: var(--mr-missing-control-border, rgba(255, 255, 255, 0.105)); border-radius: var(--mr-missing-control-radius, 7px); color: var(--mr-text); box-shadow: var(--mr-missing-control-shadow, none) !important; font-size: 12px; font-weight: 700; } + #model-resolver-modal .mr-missing-detail-pane .model-resolver-selected .mr-btn:hover:not(:disabled) { - background: var(--mr-missing-control-bg-hover, rgba(255,255,255,0.06)); - border-color: var(--mr-missing-control-border-hover, rgba(255,255,255,0.17)); + background: var(--mr-missing-control-bg-hover, rgba(255, 255, 255, 0.06)); + border-color: var(--mr-missing-control-border-hover, rgba(255, 255, 255, 0.17)); color: var(--mr-text); } + #model-resolver-modal .mr-missing-detail-pane .model-resolver-selected .mr-btn-primary { background: rgba(47, 128, 237, 0.18); border-color: rgba(47, 128, 237, 0.34); color: #dbeafe; } + #model-resolver-modal .mr-missing-detail-pane .model-resolver-selected .mr-btn-primary:hover:not(:disabled) { background: rgba(47, 128, 237, 0.26); border-color: rgba(47, 128, 237, 0.48); color: #ffffff; } + #model-resolver-modal .mr-missing-detail-pane .model-resolver-selected .mr-btn-danger { background: rgba(239, 68, 68, 0.16); border-color: rgba(239, 68, 68, 0.34); color: #fee2e2; } + #model-resolver-modal .mr-missing-detail-pane .model-resolver-selected .mr-btn-danger:hover:not(:disabled) { background: rgba(239, 68, 68, 0.24); border-color: rgba(239, 68, 68, 0.48); color: #ffffff; } + #model-resolver-modal .mr-missing-detail-pane .mr-search-progress-list-compact { gap: 7px; margin: 10px 0 8px; padding-bottom: 1px; } + #model-resolver-modal .mr-missing-detail-pane .mr-search-progress-list-compact .mr-search-progress-item { min-height: 24px; padding: 3px 9px; - background: rgba(255,255,255,0.028); - border-color: rgba(255,255,255,0.07); + background: rgba(255, 255, 255, 0.028); + border-color: rgba(255, 255, 255, 0.07); border-radius: 999px; } + #model-resolver-modal .mr-missing-detail-pane .mr-search-progress-list-compact .mr-search-progress-source { font-size: 10px; font-weight: 750; } + #model-resolver-modal .mr-missing-detail-pane .mr-search-progress-list-compact .mr-search-progress-status { font-size: 10px; } + #model-resolver-modal .mr-missing-detail-pane .mr-search-results-table-wrap { margin-top: 8px; - background: rgba(255,255,255,0.018); - border-color: rgba(255,255,255,0.065); + background: rgba(255, 255, 255, 0.018); + border-color: rgba(255, 255, 255, 0.065); border-radius: 7px; box-shadow: none; } + #model-resolver-modal .mr-missing-detail-pane .mr-search-results-table { font-size: 11px; } + #model-resolver-modal .mr-missing-detail-pane .mr-search-results-table th { padding: 9px 10px; - background: rgba(255,255,255,0.04); + background: rgba(255, 255, 255, 0.04); color: #bdbdbd; font-size: 10px; letter-spacing: 0.02em; } + #model-resolver-modal .mr-missing-detail-pane .mr-search-results-table td { padding: 9px 10px; - border-bottom-color: rgba(255,255,255,0.055); + border-bottom-color: rgba(255, 255, 255, 0.055); } + #model-resolver-modal .mr-missing-detail-pane .mr-search-results-table tr:hover td { - background: rgba(255,255,255,0.016); + background: rgba(255, 255, 255, 0.016); } + #model-resolver-modal .mr-missing-detail-pane .mr-search-source-pill { min-height: 21px; padding: 2px 8px; - background: rgba(255,255,255,0.055); - border-color: rgba(255,255,255,0.08); + background: rgba(255, 255, 255, 0.055); + border-color: rgba(255, 255, 255, 0.08); border-radius: 999px; font-size: 10px; } + #model-resolver-modal .mr-missing-detail-pane .mr-search-result-model span { font-size: 12px; font-weight: 700; } + #model-resolver-modal .mr-missing-detail-pane .mr-search-result-model small, #model-resolver-modal .mr-missing-detail-pane .mr-search-size { font-size: 10px; color: #a9a9a9; } + #model-resolver-modal .mr-missing-detail-pane .mr-search-result-action-btn { width: var(--mr-missing-icon-button-size, 28px); height: var(--mr-missing-icon-button-size, 28px); @@ -6653,6 +7717,7 @@ a.mr-image-preview-resource-name:hover { min-height: var(--mr-missing-icon-button-size, 28px); max-width: var(--mr-missing-icon-button-size, 28px); } + #model-resolver-modal #queue-toggle-icon { right: 0; min-width: 12px; @@ -6665,16 +7730,19 @@ a.mr-image-preview-resource-name:hover { border-radius: 0; box-shadow: none; } + #model-resolver-modal #queue-toggle-icon:hover { background: transparent; } + #model-resolver-modal #model-resolver-content, #model-resolver-modal .mr-missing-detail-pane, #model-resolver-modal .mr-missing-list, #model-resolver-modal .mr-search-results-table-wrap { scrollbar-width: thin; - scrollbar-color: rgba(255,255,255,0.20) transparent; + scrollbar-color: rgba(255, 255, 255, 0.20) transparent; } + #model-resolver-modal #model-resolver-content::-webkit-scrollbar, #model-resolver-modal .mr-missing-detail-pane::-webkit-scrollbar, #model-resolver-modal .mr-missing-list::-webkit-scrollbar, @@ -6682,80 +7750,92 @@ a.mr-image-preview-resource-name:hover { width: 8px; height: 8px; } + #model-resolver-modal #model-resolver-content::-webkit-scrollbar-track, #model-resolver-modal .mr-missing-detail-pane::-webkit-scrollbar-track, #model-resolver-modal .mr-missing-list::-webkit-scrollbar-track, #model-resolver-modal .mr-search-results-table-wrap::-webkit-scrollbar-track { background: transparent; } + #model-resolver-modal #model-resolver-content::-webkit-scrollbar-thumb, #model-resolver-modal .mr-missing-detail-pane::-webkit-scrollbar-thumb, #model-resolver-modal .mr-missing-list::-webkit-scrollbar-thumb, #model-resolver-modal .mr-search-results-table-wrap::-webkit-scrollbar-thumb { - background: rgba(255,255,255,0.18); + background: rgba(255, 255, 255, 0.18); border: 2px solid transparent; border-radius: 999px; background-clip: content-box; } + #model-resolver-modal #model-resolver-content::-webkit-scrollbar-thumb:hover, #model-resolver-modal .mr-missing-detail-pane::-webkit-scrollbar-thumb:hover, #model-resolver-modal .mr-missing-list::-webkit-scrollbar-thumb:hover, #model-resolver-modal .mr-search-results-table-wrap::-webkit-scrollbar-thumb:hover { - background: rgba(255,255,255,0.28); + background: rgba(255, 255, 255, 0.28); background-clip: content-box; } /* Local matches as one compact table-like list */ #model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] { overflow: hidden; - background: rgba(255,255,255,0.018); - border: 1px solid rgba(255,255,255,0.075); + background: rgba(255, 255, 255, 0.018); + border: 1px solid rgba(255, 255, 255, 0.075); border-radius: 7px; } + #model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] .mr-match-row { min-height: 42px; margin: 0; padding: 8px 10px; - background: rgba(255,255,255,0.018); + background: rgba(255, 255, 255, 0.018); border: 0; - border-bottom: 1px solid rgba(255,255,255,0.058); + border-bottom: 1px solid rgba(255, 255, 255, 0.058); border-radius: 0; } + #model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] .mr-match-row:hover { - background: rgba(255,255,255,0.034); - border-bottom-color: rgba(255,255,255,0.07); + background: rgba(255, 255, 255, 0.034); + border-bottom-color: rgba(255, 255, 255, 0.07); } + #model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] .mr-match-row.mr-best-match { - background: linear-gradient(90deg, rgba(114,211,138,0.13) 0%, rgba(114,211,138,0.065) 58%, rgba(114,211,138,0.025) 100%); - border-bottom-color: rgba(114,211,138,0.20); + background: linear-gradient(90deg, rgba(114, 211, 138, 0.13) 0%, rgba(114, 211, 138, 0.065) 58%, rgba(114, 211, 138, 0.025) 100%); + border-bottom-color: rgba(114, 211, 138, 0.20); } + #model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] .mr-match-row.mr-best-match:hover { - background: linear-gradient(90deg, rgba(114,211,138,0.15) 0%, rgba(114,211,138,0.075) 58%, rgba(114,211,138,0.03) 100%); + background: linear-gradient(90deg, rgba(114, 211, 138, 0.15) 0%, rgba(114, 211, 138, 0.075) 58%, rgba(114, 211, 138, 0.03) 100%); } -#model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] > .mr-match-row:last-child, -#model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] > .mr-stack-sm:last-child .mr-match-row:last-child { + +#model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"]>.mr-match-row:last-child, +#model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"]>.mr-stack-sm:last-child .mr-match-row:last-child { border-bottom: 0; } -#model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] > .mr-stack-sm { + +#model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"]>.mr-stack-sm { display: grid; gap: 0; margin: 0; } + #model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] .mr-local-alternatives-toggle { min-height: 32px; margin: 0; padding: 0 10px; - background: rgba(255,255,255,0.026); + background: rgba(255, 255, 255, 0.026); border: 0 !important; - border-bottom: 1px solid rgba(255,255,255,0.058) !important; + border-bottom: 1px solid rgba(255, 255, 255, 0.058) !important; border-radius: 0; } + #model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] .mr-local-alternatives-toggle:hover, #model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] .mr-local-alternatives-toggle:focus, #model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] .mr-local-alternatives-toggle:focus-visible { - background: rgba(255,255,255,0.034); - border-bottom-color: rgba(255,255,255,0.07) !important; + background: rgba(255, 255, 255, 0.034); + border-bottom-color: rgba(255, 255, 255, 0.07) !important; } + #model-resolver-modal .mr-missing-detail-pane [id^="local-matches-body-"] .mr-local-alternatives-label { color: #bdbdbd; -} +} \ No newline at end of file diff --git a/web/resolver/views/model_info_methods.js b/web/resolver/views/model_info_methods.js index 2050026..f32ae58 100644 --- a/web/resolver/views/model_info_methods.js +++ b/web/resolver/views/model_info_methods.js @@ -1513,6 +1513,9 @@ export const modelInfoMethods = { const source = data.source || contextModel.details_source || contextModel.source || ''; const creator = data.creator || {}; const creatorName = creator.username || creator.name || ''; + const pageUrl = data.version_url || data.url || ''; + const civitaiUrl = this.getSourceModelCivitaiUrl(data, selectedVersion, contextModel); + const showCivitaiAction = civitaiUrl && civitaiUrl !== pageUrl; const statItems = [ ['Downloads', stats.downloadCount || stats.downloads || versionStats.downloadCount || versionStats.downloads], @@ -1530,7 +1533,8 @@ export const modelInfoMethods = { ${this.escapeHtml([source, data.type, creatorName].filter(Boolean).join(' / '))}
- ${data.version_url || data.url ? `${getSvgIcon('externalLink')} Open page` : ''} + ${showCivitaiAction ? `${getSvgIcon('civitai')} View on CivitAI` : ''} + ${pageUrl ? `${getSvgIcon('externalLink')} Open page` : ''}
@@ -1589,15 +1593,64 @@ export const modelInfoMethods = { `; }, + getSourceModelCivitaiUrl(data = {}, selectedVersion = {}, contextModel = {}) { + const modelId = selectedVersion.civitai_model_id + || selectedVersion.civitaiModelId + || data.civitai_model_id + || data.civitaiModelId + || contextModel.civitai_model_id + || contextModel.civitaiModelId; + const versionId = selectedVersion.civitai_model_version_id + || selectedVersion.civitaiModelVersionId + || data.civitai_model_version_id + || data.civitaiModelVersionId + || contextModel.civitai_model_version_id + || contextModel.civitaiModelVersionId; + + if (modelId) { + return `https://civitai.com/models/${encodeURIComponent(modelId)}${versionId ? `?modelVersionId=${encodeURIComponent(versionId)}` : ''}`; + } + + const explicitUrl = selectedVersion.platform_url + || selectedVersion.platformUrl + || data.platform_url + || data.platformUrl + || contextModel.platform_url + || contextModel.platformUrl; + const value = String(explicitUrl || '').trim(); + if (!/^https?:\/\//i.test(value)) return ''; + + try { + const url = new URL(value); + const host = url.hostname.toLowerCase().replace(/^www\./, ''); + if (host !== 'civitai.com' && host !== 'civitai.red') return ''; + url.hostname = 'civitai.com'; + return url.toString(); + } catch (error) { + return /civitai\.(?:com|red)\//i.test(value) + ? value.replace('civitai.red', 'civitai.com') + : ''; + } + }, + renderSourceModelDetailsFiles(version = {}, data = {}, contextModel = {}) { const files = Array.isArray(version.files) ? version.files.filter(file => file?.download_url) : []; if (!files.length) { return '
No downloadable files available for this version.
'; } - return files.map((file, index) => { + const targetIndex = files.findIndex(file => this.isSourceModelDetailsTargetFile(file, contextModel)); + const orderedFiles = targetIndex > 0 + ? [files[targetIndex], ...files.filter((_, index) => index !== targetIndex)] + : files; + + return orderedFiles.map((file, index) => { + const isTarget = this.isSourceModelDetailsTargetFile(file, contextModel); const fileMeta = this.getSourceModelFileMeta(file); const mirrors = this.getSourceModelMirrors(file); + const preferredMirror = this.getSourceModelPreferredMirror(file, contextModel, mirrors); + const preferredDownloadUrl = preferredMirror?.url || file.download_url; + const preferredFilename = preferredMirror?.filename || file.name || contextModel.filename || data.name || 'model'; const payload = { source: data.source || contextModel.details_source || contextModel.source, model_id: data.model_id || contextModel.model_id, @@ -1605,8 +1658,8 @@ export const modelInfoMethods = { name: data.name || contextModel.name, version_name: version.name || '', type: data.type || contextModel.type, - filename: file.name || contextModel.filename || data.name || 'model', - download_url: file.download_url, + filename: preferredFilename, + download_url: preferredDownloadUrl, url: version.url || data.version_url || data.url, size: file.size, base_model: version.base_model || contextModel.base_model, @@ -1617,22 +1670,111 @@ export const modelInfoMethods = { const mirrorList = mirrors.length > 1 ? this.renderSourceModelMirrors(mirrors, payload) : ''; + const summaryBadges = [ + isTarget ? 'Matched' : '', + file.primary ? 'Primary' : '', + mirrors.length ? `${mirrors.length} mirrors` : '' + ].filter(Boolean); + const openAttr = index === 0 ? ' open' : ''; return ` -
-
- ${this.escapeHtml(file.name || `File ${index + 1}`)} - ${this.escapeHtml(fileMeta.summary)} +
+ + + + ${this.escapeHtml(file.name || `File ${index + 1}`)} + ${this.escapeHtml(fileMeta.summary)} + + ${summaryBadges.length ? `${summaryBadges.map(badge => `${this.escapeHtml(badge)}`).join('')}` : ''} + +
${fileMeta.badges.length ? `
${fileMeta.badges.map(badge => `${this.escapeHtml(badge)}`).join('')}
` : ''} + + ${mirrorList}
- - ${mirrorList} -
+ `; }).join(''); }, + isSourceModelDetailsTargetFile(file = {}, contextModel = {}) { + const targetFilename = this.getSourceModelComparableFilename(contextModel.filename || contextModel.original_path || ''); + const targetUrl = String(contextModel.download_url || contextModel.url || '').trim(); + const targetHash = String(contextModel.sha256 || contextModel.hash || '').trim().toLowerCase(); + const fileHash = this.getSourceModelFileHash(file); + if (targetHash && fileHash && targetHash === fileHash) return true; + + const urls = this.getSourceModelFileUrls(file); + if (targetUrl && urls.some(url => url === targetUrl)) return true; + + if (!targetFilename) return false; + return this.getSourceModelFileNames(file).some(name => ( + this.getSourceModelComparableFilename(name) === targetFilename + )); + }, + + getSourceModelPreferredMirror(file = {}, contextModel = {}, mirrors = null) { + const candidates = Array.isArray(mirrors) ? mirrors : this.getSourceModelMirrors(file); + const targetUrl = String(contextModel.download_url || contextModel.url || '').trim(); + if (targetUrl) { + const byUrl = candidates.find(mirror => String(mirror.url || '') === targetUrl); + if (byUrl) return byUrl; + } + + const targetFilename = this.getSourceModelComparableFilename(contextModel.filename || contextModel.original_path || ''); + if (targetFilename) { + const byName = candidates.find(mirror => ( + this.getSourceModelComparableFilename(mirror.filename || mirror.name || '') === targetFilename + )); + if (byName) return byName; + } + + return null; + }, + + getSourceModelComparableFilename(value = '') { + return String(value || '') + .split(/[\\/]+/) + .pop() + .trim() + .toLowerCase(); + }, + + getSourceModelFileHash(file = {}) { + const hashes = file.hashes && typeof file.hashes === 'object' ? file.hashes : {}; + return String(file.sha256 || file.hash || hashes.SHA256 || hashes.sha256 || '').trim().toLowerCase(); + }, + + getSourceModelFileNames(file = {}) { + const names = new Set(); + [file.name, file.filename].forEach(name => { + if (name) names.add(String(name)); + }); + const mirrors = Array.isArray(file.mirrors) ? file.mirrors : []; + mirrors.forEach(mirror => { + if (mirror?.filename) names.add(String(mirror.filename)); + if (mirror?.name) names.add(String(mirror.name)); + }); + return Array.from(names); + }, + + getSourceModelFileUrls(file = {}) { + const urls = new Set(); + [file.download_url, file.downloadUrl, file.url].forEach(url => { + if (url) urls.add(String(url)); + }); + const downloadUrls = Array.isArray(file.download_urls) ? file.download_urls : []; + downloadUrls.forEach(url => { + if (url) urls.add(String(url)); + }); + const mirrors = Array.isArray(file.mirrors) ? file.mirrors : []; + mirrors.forEach(mirror => { + if (mirror?.url) urls.add(String(mirror.url)); + }); + return Array.from(urls); + }, + getSourceModelMirrors(file = {}) { const mirrors = Array.isArray(file.mirrors) ? file.mirrors.filter(mirror => mirror?.url) @@ -1766,13 +1908,14 @@ export const modelInfoMethods = { getSourceModelMirrorMeta(mirror = {}, isDefault = false) { const host = this.getSourceModelMirrorHost(mirror.url || ''); + const mirrorHash = this.getSourceModelDisplayHash(mirror); const meta = [ isDefault ? 'Default' : '', this.isSourceModelMirrorDead(mirror) ? 'Likely dead' : '', host, this.isSourceModelMirrorGated(mirror) ? 'Gated' : '', mirror.is_paid ? 'Paid' : '', - mirror.sha256 ? `SHA256 ${String(mirror.sha256).slice(0, 10)}` : '' + mirrorHash ? `SHA256 ${mirrorHash}` : '' ].filter(Boolean); return meta.join(' / '); }, @@ -1791,14 +1934,20 @@ export const modelInfoMethods = { mirrorCount ? `${mirrorCount} mirrors` : '', file.id ? `ID ${file.id}` : '' ].filter(Boolean); + const fileHash = this.getSourceModelDisplayHash(file); const summary = [ this.formatSearchResultSize(file), - file.sha256 ? `SHA256 ${String(file.sha256).slice(0, 10)}` : '' + fileHash ? `SHA256 ${fileHash}` : '' ].filter(Boolean).join(' / ') || 'Downloadable file'; return { badges, summary }; }, + getSourceModelDisplayHash(value = {}) { + const hashes = value.hashes && typeof value.hashes === 'object' ? value.hashes : {}; + return String(value.sha256 || value.hash || hashes.SHA256 || hashes.sha256 || '').trim(); + }, + renderSourceModelImageMeta(image = {}) { const stats = image.stats || {}; const metaItems = [