diff --git a/assets/relic-client-capture.json b/assets/relic-client-capture.json new file mode 100644 index 0000000..7c4ec7f --- /dev/null +++ b/assets/relic-client-capture.json @@ -0,0 +1,273 @@ +{ + "source": { + "kind": "client table capture", + "client_version": "4.6.54", + "game_assembly_sha256": "4aa08a0706f27d2cf9951b61920c179140ece9ea94f7e34422c18e46922939b6", + "captured_at": "2026-11-02", + "tables": [ + "RelicConfigExcelTable", + "RelicMainAffixConfigExcelTable", + "RelicSubAffixConfigExcelTable" + ], + "scope": "Four relic IDs and main affix groups 55/56 and sub-affix group 5." + }, + "relics": [ + { + "Rarity": 5, + "Mode": 1, + "ID": 63295, + "MainAffixGroup": 55, + "MaxLevel": 15, + "SubAffixGroup": 5, + "SetID": 329, + "ExpProvide": 1500, + "ExpType": 4, + "Type": 5, + "CoinCost": 2250 + }, + { + "Rarity": 5, + "Mode": 1, + "ID": 63296, + "MainAffixGroup": 56, + "MaxLevel": 15, + "SubAffixGroup": 5, + "SetID": 329, + "ExpProvide": 1500, + "ExpType": 4, + "Type": 6, + "CoinCost": 2250 + }, + { + "Rarity": 5, + "Mode": 1, + "ID": 63305, + "MainAffixGroup": 55, + "MaxLevel": 15, + "SubAffixGroup": 5, + "SetID": 330, + "ExpProvide": 1500, + "ExpType": 4, + "Type": 5, + "CoinCost": 2250 + }, + { + "Rarity": 5, + "Mode": 1, + "ID": 63306, + "MainAffixGroup": 56, + "MaxLevel": 15, + "SubAffixGroup": 5, + "SetID": 330, + "ExpProvide": 1500, + "ExpType": 4, + "Type": 6, + "CoinCost": 2250 + } + ], + "main_affixes": [ + { + "GroupID": 55, + "AffixID": 1, + "Property": 32, + "LevelAdd": "0.0241920005", + "BaseValue": "0.0691199996" + }, + { + "GroupID": 55, + "AffixID": 2, + "Property": 33, + "LevelAdd": "0.0241920005", + "BaseValue": "0.0691199996" + }, + { + "GroupID": 55, + "AffixID": 3, + "Property": 34, + "LevelAdd": "0.0302400004", + "BaseValue": "0.0863999999" + }, + { + "GroupID": 55, + "AffixID": 4, + "Property": 12, + "LevelAdd": "0.0217730009", + "BaseValue": "0.0622080001" + }, + { + "GroupID": 55, + "AffixID": 5, + "Property": 14, + "LevelAdd": "0.0217730009", + "BaseValue": "0.0622080001" + }, + { + "GroupID": 55, + "AffixID": 6, + "Property": 16, + "LevelAdd": "0.0217730009", + "BaseValue": "0.0622080001" + }, + { + "GroupID": 55, + "AffixID": 7, + "Property": 18, + "LevelAdd": "0.0217730009", + "BaseValue": "0.0622080001" + }, + { + "GroupID": 55, + "AffixID": 8, + "Property": 20, + "LevelAdd": "0.0217730009", + "BaseValue": "0.0622080001" + }, + { + "GroupID": 55, + "AffixID": 9, + "Property": 22, + "LevelAdd": "0.0217730009", + "BaseValue": "0.0622080001" + }, + { + "GroupID": 55, + "AffixID": 10, + "Property": 24, + "LevelAdd": "0.0217730009", + "BaseValue": "0.0622080001" + }, + { + "GroupID": 56, + "AffixID": 1, + "Property": 59, + "LevelAdd": "0.0362880004", + "BaseValue": "0.1036800008" + }, + { + "GroupID": 56, + "AffixID": 2, + "Property": 54, + "LevelAdd": "0.0108860011", + "BaseValue": "0.0311040000" + }, + { + "GroupID": 56, + "AffixID": 3, + "Property": 32, + "LevelAdd": "0.0241920005", + "BaseValue": "0.0691199996" + }, + { + "GroupID": 56, + "AffixID": 4, + "Property": 33, + "LevelAdd": "0.0241920005", + "BaseValue": "0.0691199996" + }, + { + "GroupID": 56, + "AffixID": 5, + "Property": 34, + "LevelAdd": "0.0302400004", + "BaseValue": "0.0863999999" + } + ], + "sub_affixes": [ + { + "StepNum": 2, + "GroupID": 5, + "BaseValue": "33.870039001", + "StepValue": "4.2337550008", + "Property": 27, + "AffixID": 1 + }, + { + "StepNum": 2, + "GroupID": 5, + "BaseValue": "16.935019000", + "StepValue": "2.1168770007", + "Property": 29, + "AffixID": 2 + }, + { + "StepNum": 2, + "GroupID": 5, + "BaseValue": "16.935019000", + "StepValue": "2.1168770007", + "Property": 31, + "AffixID": 3 + }, + { + "StepNum": 2, + "GroupID": 5, + "BaseValue": "0.0345600005", + "StepValue": "0.0043200000", + "Property": 32, + "AffixID": 4 + }, + { + "StepNum": 2, + "GroupID": 5, + "BaseValue": "0.0345600005", + "StepValue": "0.0043200000", + "Property": 33, + "AffixID": 5 + }, + { + "StepNum": 2, + "GroupID": 5, + "BaseValue": "0.0431999999", + "StepValue": "0.0053999999", + "Property": 34, + "AffixID": 6 + }, + { + "StepNum": 2, + "GroupID": 5, + "BaseValue": "2", + "StepValue": "0.3000000002", + "Property": 51, + "AffixID": 7 + }, + { + "StepNum": 2, + "GroupID": 5, + "BaseValue": "0.0259200003", + "StepValue": "0.0032400002", + "Property": 52, + "AffixID": 8 + }, + { + "StepNum": 2, + "GroupID": 5, + "BaseValue": "0.0518400007", + "StepValue": "0.0064800004", + "Property": 53, + "AffixID": 9 + }, + { + "StepNum": 2, + "GroupID": 5, + "BaseValue": "0.0345600005", + "StepValue": "0.0043200000", + "Property": 56, + "AffixID": 10 + }, + { + "StepNum": 2, + "GroupID": 5, + "BaseValue": "0.0345600005", + "StepValue": "0.0043200000", + "Property": 57, + "AffixID": 11 + }, + { + "StepNum": 2, + "GroupID": 5, + "BaseValue": "0.0518400007", + "StepValue": "0.0064800004", + "Property": 59, + "AffixID": 12 + } + ] +} diff --git a/css/styles.css b/css/styles.css index 7709082..b1cd9a2 100644 --- a/css/styles.css +++ b/css/styles.css @@ -1553,6 +1553,340 @@ input:checked + .slider:before { transform: translateY(-1px); } +/* ========================================================================== + Equip Target Chip + Avatar Assignment Picker + ========================================================================== */ +.equip-target { + width: 100%; + display: flex; + align-items: center; + gap: 0.65rem; + text-align: left; + padding: 0.5rem 0.65rem; + min-height: 52px; + background: rgba(10, 13, 20, 0.7); + border: 1px solid var(--border-color); + border-radius: var(--radius-sm); + color: var(--text-main); + cursor: pointer; + font: inherit; + transition: var(--transition); +} + +.equip-target:hover { + border-color: var(--accent-cyan); + background: rgba(56, 189, 248, 0.07); +} + +.equip-target:focus-visible { + outline: none; + border-color: var(--accent-cyan); + box-shadow: 0 0 10px rgba(56, 189, 248, 0.3); +} + +.equip-target.is-empty { + border-style: dashed; +} + +.equip-target-avatar { + width: 38px; + height: 38px; + border-radius: 50%; + overflow: hidden; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + background: var(--bg-secondary); + border: 2px solid var(--border-color); + font-size: 1.05rem; + line-height: 1; +} + +.equip-target.is-empty .equip-target-avatar { + border-style: dashed; + border-color: rgba(56, 189, 248, 0.45); +} + +.equip-target-avatar img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + +.equip-target-body { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + gap: 0.1rem; +} + +.equip-target-name { + font-size: 0.875rem; + font-weight: 700; + color: var(--text-highlight); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + line-height: 1.25; +} + +.equip-target-sub { + font-size: 0.7rem; + color: var(--text-muted); + display: flex; + align-items: center; + gap: 0.3rem; + min-width: 0; +} + +.equip-target-cta { + flex-shrink: 0; + font-size: 0.7rem; + font-weight: 800; + color: var(--accent-cyan); + border: 1px solid rgba(56, 189, 248, 0.4); + border-radius: 999px; + padding: 0.2rem 0.6rem; + background: rgba(56, 189, 248, 0.08); + white-space: nowrap; +} + +.assign-picker-modal { + width: min(980px, 96vw) !important; + max-width: 980px !important; + max-height: 88vh; + display: flex; + flex-direction: column; + gap: 0.75rem; +} + +.assign-picker-header { + align-items: flex-start; + margin-bottom: 0; +} + +.assign-picker-heading { + min-width: 0; +} + +.assign-picker-subtitle { + font-size: 0.75rem; + color: var(--text-muted); + margin-top: 0.2rem; + overflow-wrap: anywhere; +} + +.assign-picker-subtitle strong { + color: var(--accent-gold); + font-weight: 700; +} + +.assign-picker-search { + flex-shrink: 0; +} + +.assign-picker-grid { + flex: 1; + min-height: 200px; + max-height: 52vh; + overflow-y: auto; + overscroll-behavior: contain; + padding-right: 0.45rem; + scrollbar-width: thin; +} + +.assign-inventory-card { + grid-column: 1 / -1; + display: flex !important; + align-items: center !important; + gap: 0.75rem !important; + padding: 0.7rem 0.9rem !important; + min-height: 56px !important; + background: rgba(52, 211, 153, 0.06); + border: 1px dashed rgba(52, 211, 153, 0.4); + border-radius: var(--radius-md); + cursor: pointer; + transition: all 0.2s ease; + box-sizing: border-box; + position: relative; +} + +.assign-inventory-card:hover { + background: rgba(52, 211, 153, 0.12); + border-color: var(--accent-green); + transform: translateY(-1px); +} + +.assign-inventory-card.is-selected { + border-style: solid; + border-color: var(--accent-cyan); + background: linear-gradient(135deg, rgba(56, 189, 248, 0.16), rgba(18, 24, 38, 0.95)); + box-shadow: 0 0 0 2px rgba(56, 189, 248, 0.35), 0 8px 22px rgba(56, 189, 248, 0.18); +} + +.assign-inventory-icon { + width: 38px; + height: 38px; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + background: rgba(52, 211, 153, 0.12); + border: 1px solid rgba(52, 211, 153, 0.35); + font-size: 1.05rem; +} + +.assign-inventory-text { + flex: 1; + min-width: 0; + display: flex; + flex-direction: column; + gap: 0.1rem; +} + +.assign-inventory-text strong { + font-size: 0.9rem; + color: var(--text-highlight); +} + +.assign-inventory-text small { + font-size: 0.7rem; + color: var(--text-muted); +} + +.assign-check { + flex-shrink: 0; + width: 22px; + height: 22px; + border-radius: 50%; + border: 1.5px solid var(--border-color); + color: transparent; + font-size: 0.75rem; + font-weight: 900; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s ease; +} + +.is-selected > .assign-check, +.assign-avatar-card.is-selected::after { + color: #04121d; +} + +.is-selected > .assign-check { + background: var(--accent-cyan); + border-color: var(--accent-cyan); +} + +.assign-avatar-card.is-selected { + border-color: var(--accent-cyan) !important; + background: linear-gradient(135deg, rgba(56, 189, 248, 0.16), rgba(18, 24, 38, 0.95)) !important; + box-shadow: 0 0 0 2px rgba(56, 189, 248, 0.35), 0 8px 22px rgba(56, 189, 248, 0.18) !important; +} + +.assign-avatar-card.is-selected::after { + content: '✓'; + position: absolute; + top: 0.35rem; + right: 0.45rem; + width: 20px; + height: 20px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + background: var(--accent-cyan); + font-size: 0.7rem; + font-weight: 900; +} + +.assign-equipped-badge { + display: inline-flex; + align-items: center; + gap: 0.25rem; + margin-top: 0.3rem; + font-size: 0.68rem; + font-weight: 700; + color: var(--accent-gold); + line-height: 1.3; + overflow-wrap: anywhere; +} + +.assign-picker-footer { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.75rem; + flex-wrap: wrap; + border-top: 1px solid var(--border-color); + padding-top: 0.7rem; + flex-shrink: 0; +} + +.assign-picker-current { + display: flex; + align-items: center; + gap: 0.35rem; + min-width: 0; + font-size: 0.8rem; +} + +.assign-current-label { + color: var(--text-muted); +} + +.assign-current-value { + font-weight: 800; + color: var(--accent-cyan); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 42vw; +} + +.assign-picker-actions { + display: flex; + gap: 0.5rem; + margin-left: auto; +} + +@media (max-width: 640px) { + .assign-picker-modal { + padding: 1.1rem; + gap: 0.6rem; + } + + .assign-picker-grid { + max-height: 48vh; + } + + .assign-picker-footer { + align-items: stretch; + } + + .assign-picker-actions { + width: 100%; + } + + .assign-picker-actions .btn { + flex: 1; + } + + .assign-current-value { + max-width: 55vw; + } + + .equip-target-cta { + display: none; + } +} + + /* ========================================================================== Modal Avatar Detail Widescreen Expansion ========================================================================== */ @@ -3847,3 +4181,27 @@ input:checked + .slider:before { #add-lc-preview-thumb { width: 80px !important; height: 112px !important; } .lc-picker-thumb, .add-lc-card-thumb { width: 76px; height: 106px; } } + +/* Relic creation: searchable artwork cards and a compact settings panel. */ +.add-relic-modal { width: min(1050px, 96vw); max-width: 1050px; max-height: 92vh; overflow-y: auto; } +.add-relic-search { margin: .35rem 0 .65rem; } +.add-relic-set-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(132px, 1fr)); gap: .55rem; max-height: 300px; overflow-y: auto; padding: .35rem; background: rgba(4, 10, 23, .45); border: 1px solid var(--border-color); border-radius: 12px; } +.add-relic-set-card { min-width: 0; min-height: 132px; border: 1px solid var(--border-color); border-radius: 10px; background: #111a2b; color: var(--text-color); padding: .55rem; display: flex; flex-direction: column; align-items: center; gap: .3rem; text-align: center; cursor: pointer; } +.add-relic-set-card:hover, .add-relic-set-card:focus-visible { border-color: var(--accent-cyan); background: #17263b; } +.add-relic-set-card.selected { border-color: var(--accent-cyan); box-shadow: inset 0 0 0 1px var(--accent-cyan); background: #142a3d; } +.add-relic-set-card:disabled { opacity: .45; cursor: not-allowed; } +.add-relic-set-card img { width: 62px; height: 62px; object-fit: contain; } +.add-relic-set-card span { font-size: .77rem; line-height: 1.2; font-weight: 700; overflow-wrap: anywhere; } +.add-relic-set-card small { color: var(--text-muted); font-size: .65rem; margin-top: auto; } +.sr-only-select { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; } +.substat-menu { position: relative; min-width: 0; flex: 1; } +.substat-choice { display: flex; align-items: center; gap: .3rem; min-width: 0; min-height: 36px; padding: .35rem .5rem; border: 1px solid var(--border-color); border-radius: 6px; background: #0a0e17; color: #fff; font-size: .8rem; font-weight: 600; cursor: pointer; list-style: none; } +.substat-choice::-webkit-details-marker { display: none; } +.substat-choice::after { content: '▾'; margin-left: auto; color: var(--text-muted); } +.substat-choice span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.substat-menu[open] { z-index: 5; } +.substat-options { position: absolute; left: 0; bottom: calc(100% + 4px); width: max(100%, 215px); max-height: 250px; overflow-y: auto; padding: 4px; background: #101a2c; border: 1px solid #39506e; border-radius: 8px; box-shadow: 0 12px 28px #000a; } +.substat-option { width: 100%; display: flex; align-items: center; gap: .4rem; text-align: left; padding: .5rem; border: 0; border-radius: 5px; background: transparent; color: #eef4ff; cursor: pointer; font-size: .8rem; } +.substat-option:hover:not(:disabled), .substat-option:focus-visible { background: #263d59; } +.substat-option:disabled { opacity: .4; cursor: not-allowed; } +@media (max-width: 600px) { .add-relic-set-grid { grid-template-columns: repeat(auto-fill, minmax(105px, 1fr)); max-height: 230px; } } diff --git a/index.html b/index.html index 1dd39e3..d11c9a5 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ GaCy-Srtool - + @@ -1552,10 +1552,12 @@
- + +
@@ -1570,7 +1572,7 @@