diff --git a/Overlord-Server/public/assets/build.js b/Overlord-Server/public/assets/build.js index 44e045a..8958075 100644 --- a/Overlord-Server/public/assets/build.js +++ b/Overlord-Server/public/assets/build.js @@ -152,6 +152,35 @@ function initAccordions() { }); } +function initBuilderTabs() { + const tabs = document.querySelectorAll(".builder-tab[data-builder-tab]"); + const panels = document.querySelectorAll("[data-builder-panel]"); + + function switchTab(tabName) { + tabs.forEach((t) => { + t.setAttribute("aria-selected", t.dataset.builderTab === tabName ? "true" : "false"); + }); + panels.forEach((p) => { + if (p.dataset.builderPanel === tabName) { + p.removeAttribute("hidden"); + } else { + p.setAttribute("hidden", ""); + } + }); + } + + tabs.forEach((tab) => { + tab.addEventListener("click", () => { + switchTab(tab.dataset.builderTab); + }); + }); + + const defaultTab = document.querySelector('.builder-tab[aria-selected="true"]'); + if (defaultTab) { + switchTab(defaultTab.dataset.builderTab); + } +} + function updateWindowsSectionVisibility() { const windowsSection = document.getElementById("windows-settings-section"); if (!windowsSection) return; @@ -849,6 +878,7 @@ function applyLinuxShellcodeMode(enabled) { restoreFormSettings(); initAccordions(); +initBuilderTabs(); loadBuildPlugins(); updateWindowsSectionVisibility(); updateShellcodeCheckboxVisibility(); diff --git a/Overlord-Server/public/build.html b/Overlord-Server/public/build.html index 401e390..8791844 100644 --- a/Overlord-Server/public/build.html +++ b/Overlord-Server/public/build.html @@ -37,6 +37,112 @@ .accordion-chevron.rotated { transform: rotate(-180deg); } + .builder-workspace { + grid-template-columns: minmax(0, 1.55fr) minmax(360px, 1fr); + align-items: start; + } + .builder-card { + background: + linear-gradient(145deg, rgba(30, 41, 59, 0.3), transparent 42%), + rgba(15, 23, 42, 0.72); + box-shadow: 0 18px 45px rgba(2, 6, 23, 0.16); + } + .builder-tabs { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 0.4rem; + padding: 0.35rem; + border: 1px solid rgba(51, 65, 85, 0.85); + border-radius: 0.75rem; + background: rgba(15, 23, 42, 0.72); + } + .builder-tab { + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + min-width: 0; + padding: 0.65rem 0.55rem; + border-radius: 0.55rem; + color: rgb(148, 163, 184); + font-size: 0.78rem; + font-weight: 600; + transition: color 160ms ease, background 160ms ease, box-shadow 160ms ease; + } + .builder-tab:hover { + color: rgb(226, 232, 240); + background: rgba(51, 65, 85, 0.45); + } + .builder-tab[aria-selected="true"] { + color: white; + background: linear-gradient(135deg, rgba(37, 99, 235, 0.95), rgba(79, 70, 229, 0.9)); + box-shadow: 0 8px 22px rgba(37, 99, 235, 0.22); + } + [data-builder-panel][hidden] { display: none !important; } + .builder-profile-bar { + display: grid; + grid-template-columns: minmax(150px, 1fr) minmax(140px, 0.8fr) auto auto auto; + align-items: center; + } + .builder-profile-overflow { position: relative; } + .builder-profile-overflow > summary { list-style: none; } + .builder-profile-overflow > summary::-webkit-details-marker { display: none; } + .builder-profile-menu, + .builder-action-menu { + position: absolute; + z-index: 30; + right: 0; + top: calc(100% + 0.45rem); + min-width: 190px; + padding: 0.4rem; + border: 1px solid rgb(51, 65, 85); + border-radius: 0.65rem; + background: rgb(15, 23, 42); + box-shadow: 0 18px 38px rgba(2, 6, 23, 0.5); + } + .builder-profile-menu button, + .builder-action-menu button { + width: 100%; + justify-content: flex-start; + padding: 0.6rem 0.7rem; + border-radius: 0.45rem; + font-size: 0.8rem; + } + .builder-profile-menu button:hover, + .builder-action-menu button:hover { background: rgba(51, 65, 85, 0.7); } + .builder-platform-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } + .builder-platform-grid label { padding: 0.65rem 0.7rem; font-size: 0.8rem; } + .builder-output-rail { position: sticky; top: 5.25rem; } + .builder-summary-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0.55rem; + } + .builder-summary-card { + min-width: 0; + padding: 0.75rem; + border: 1px solid rgba(51, 65, 85, 0.8); + border-radius: 0.65rem; + background: rgba(30, 41, 59, 0.48); + } + .builder-summary-label { color: rgb(100, 116, 139); font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.06em; } + .builder-summary-value { margin-top: 0.25rem; color: rgb(226, 232, 240); font-size: 0.8rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } + .builder-summary-tags { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.65rem; } + .builder-summary-tag { padding: 0.28rem 0.5rem; border-radius: 999px; background: rgba(30, 64, 175, 0.28); color: rgb(147, 197, 253); font-size: 0.68rem; } + .builder-action-bar { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 0.55rem; position: sticky; bottom: 0.75rem; z-index: 20; padding: 0.55rem; border: 1px solid rgba(51, 65, 85, 0.9); border-radius: 0.75rem; background: rgba(15, 23, 42, 0.94); backdrop-filter: blur(14px); box-shadow: 0 14px 35px rgba(2, 6, 23, 0.4); } + .builder-more-actions { position: relative; } + .builder-more-actions > summary { list-style: none; cursor: pointer; } + .builder-more-actions > summary::-webkit-details-marker { display: none; } + @media (max-width: 1023px) { + .builder-workspace { grid-template-columns: minmax(0, 1fr); } + .builder-output-rail { position: static; } + } + @media (max-width: 680px) { + .builder-tabs { grid-template-columns: repeat(2, minmax(0, 1fr)); } + .builder-profile-bar { grid-template-columns: minmax(0, 1fr) auto auto; } + .builder-profile-name { grid-column: 1 / -1; grid-row: 2; } + .builder-platform-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } + } .sgn-txt-lockbox { position: relative; isolation: isolate; @@ -205,7 +311,7 @@