diff --git a/.github/actions/setup-env/action.yml b/.github/actions/setup-env/action.yml index 86d4cc6f9..4f515fe66 100644 --- a/.github/actions/setup-env/action.yml +++ b/.github/actions/setup-env/action.yml @@ -65,6 +65,14 @@ runs: exit 1 fi + - name: Restore package binary permissions + if: inputs.install-dependencies != 'true' + shell: bash + run: | + if [ -d node_modules/.bin ]; then + find node_modules/.bin -mindepth 1 -exec chmod +x {} + + fi + - name: Apply patches (artifact restore) if: inputs.install-dependencies != 'true' shell: bash diff --git a/.github/workflows/pull-request-checks.yml b/.github/workflows/pull-request-checks.yml index 50e8ea1a4..8e0eba07e 100644 --- a/.github/workflows/pull-request-checks.yml +++ b/.github/workflows/pull-request-checks.yml @@ -326,6 +326,7 @@ jobs: path: | dist/ node_modules/ + include-hidden-files: true retention-days: 1 compression-level: 6 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 047c3acd0..e8b069611 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -79,6 +79,7 @@ jobs: path: | dist/ node_modules/ + include-hidden-files: true retention-days: 1 compression-level: 6 diff --git a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/cloud/cloud.component.html b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/cloud/cloud.component.html index 8fd640b0d..c559815bc 100644 --- a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/cloud/cloud.component.html +++ b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/cloud/cloud.component.html @@ -99,12 +99,29 @@

+
+
+ +
+ Agenstra Cloud management interface +
+
+
diff --git a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/cloud/cloud.component.scss b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/cloud/cloud.component.scss index bd34ec9b0..60c612c5c 100644 --- a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/cloud/cloud.component.scss +++ b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/cloud/cloud.component.scss @@ -237,7 +237,3 @@ overflow-x: hidden; } } - -.cloud-why-visual-img { - margin-top: -8rem; -} diff --git a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/desktop/desktop.component.html b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/desktop/desktop.component.html index da99028e4..b80d1eb92 100644 --- a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/desktop/desktop.component.html +++ b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/desktop/desktop.component.html @@ -39,13 +39,28 @@

- Agenstra Desktop application +
+
+ +
+ Agenstra Desktop application +
+

diff --git a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/desktop/desktop.component.scss b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/desktop/desktop.component.scss index 409c225ee..b20205cd0 100644 --- a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/desktop/desktop.component.scss +++ b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/desktop/desktop.component.scss @@ -17,9 +17,68 @@ min-height: 12rem; } -.desktop-screenshot { - max-width: 100%; - height: auto; +// Native Windows/Linux-style app window (no browser chrome) so Desktop reads as an installed app; it is slightly +// wider than its column and turned towards the copy, bleeding off the hero edge on narrower large screens +.app-window { + position: relative; + z-index: 1; + width: 115%; + overflow: hidden; + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: var(--bs-border-radius-lg); + background-color: var(--bs-dark); + box-shadow: + 0 2rem 4rem rgba(0, 0, 0, 0.45), + 0 0 6rem rgba(139, 92, 246, 0.18); + transform: perspective(2000px) rotateY(-8deg); + transform-origin: left center; +} + +.app-window__titlebar { + display: flex; + align-items: center; + justify-content: space-between; + height: 2.25rem; + padding-left: 0.75rem; + color: rgba(255, 255, 255, 0.7); + font-size: 0.8125rem; +} + +.app-window__title { + display: flex; + align-items: center; + gap: 0.5rem; +} + +.app-window__icon { + width: 1rem; + height: 1rem; +} + +.app-window__controls { + display: flex; + align-self: stretch; + + > .bi { + display: flex; + align-items: center; + justify-content: center; + width: 2.75rem; + font-size: 0.75rem; + } +} + +.app-window__viewport { + aspect-ratio: 16 / 9; + overflow: hidden; +} + +.app-window__screenshot { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + object-position: left top; } .desktop-workflow-node--focus { diff --git a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/home/home.component.html b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/home/home.component.html index 7851fdce8..614d44cd5 100644 --- a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/home/home.component.html +++ b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/home/home.component.html @@ -76,35 +76,50 @@

-
- Agenstra workspaces - Agenstra tickets board - Agenstra web IDE - Agenstra audit and usage statistics +
+
+ +
+ Agenstra workspaces + Agenstra tickets board + Agenstra web IDE + Agenstra audit and usage statistics +
+
+
+
+ +
+ Agenstra web IDE and dashboard +
+
+
diff --git a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/home/home.component.scss b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/home/home.component.scss index 77feb7e66..9c8b7eeac 100644 --- a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/home/home.component.scss +++ b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/home/home.component.scss @@ -48,11 +48,6 @@ box-shadow: 0 8px 24px rgba(139, 92, 246, 0.25); } -.home-engineering-screenshot { - display: block; - margin-top: -8rem; -} - .home-engineering-closing { background: linear-gradient(135deg, rgba(139, 92, 246, 0.08) 0%, #fff 55%); } @@ -143,14 +138,10 @@ } .intent-cards { - margin-top: -5rem; position: relative; @media (max-width: 768px) { - padding-top: 2.5rem; - margin-top: 0; - - > .intent-card { + .intent-cards-browser { display: none; } @@ -159,29 +150,28 @@ } } - @media (max-width: 992px) and (min-width: 768px) { - margin-top: -2rem; - } + // Chrome comes from `.browser-frame` in page.component.scss; the hero shows a wider crop of the screenshot + .intent-cards-browser { + z-index: 3; - @media (max-width: 1200px) and (min-width: 992px) { - margin-top: -3rem; - } + .browser-frame__viewport { + aspect-ratio: 16 / 7; + } - > .intent-card { - position: relative; - z-index: 3; - display: block; + .browser-frame__screenshot { + object-position: center; + } } .intent-card-indicators { - position: absolute; - left: 50%; - bottom: 0.75rem; - z-index: 4; display: flex; align-items: center; justify-content: center; gap: 0.125rem; + bottom: 0.75rem; + position: absolute; + z-index: 10; + left: 50%; transform: translateX(-50%); } diff --git a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/page.component.scss b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/page.component.scss index 51d925c63..983ef4245 100644 --- a/libs/domains/agenstra/frontend/feature-landingpage/src/lib/page.component.scss +++ b/libs/domains/agenstra/frontend/feature-landingpage/src/lib/page.component.scss @@ -201,3 +201,102 @@ section { position: relative; z-index: 1; } + +// Safari-style window chrome; screenshots are expected as plain 16:9 captures without their own frame +.browser-frame { + position: relative; + padding: 0 0.5rem 0.5rem; + border: 1px solid var(--bs-border-color); + border-top-left-radius: var(--bs-border-radius-lg); + border-top-right-radius: var(--bs-border-radius-lg); + background-color: var(--bs-dark); + box-shadow: 0 1.5rem 3rem rgba(0, 0, 0, 0.25); +} + +.browser-frame__toolbar { + display: grid; + grid-template-columns: 1fr minmax(0, 2fr) 1fr; + align-items: center; + height: 2.75rem; + padding: 0 0.5rem; +} + +.browser-frame__lights { + display: flex; + gap: 0.5rem; +} + +.browser-frame__light { + width: 0.75rem; + height: 0.75rem; + border-radius: 50%; + + &--close { + background-color: #ff5f57; + } + + &--minimize { + background-color: #febc2e; + } + + &--zoom { + background-color: #28c840; + } +} + +.browser-frame__address { + display: flex; + align-items: center; + justify-content: center; + gap: 0.375rem; + height: 1.75rem; + overflow: hidden; + border-radius: 0.5rem; + background-color: rgba(255, 255, 255, 0.08); + color: rgba(255, 255, 255, 0.7); + font-size: 0.8125rem; + white-space: nowrap; + + > .bi { + font-size: 0.6875rem; + } +} + +.browser-frame__viewport { + aspect-ratio: 16 / 9; + overflow: hidden; + border-radius: 0.375rem; +} + +.browser-frame__screenshot { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + object-position: left top; +} + +// Bento cards: the window enters from the lower left and bleeds off the right and bottom card edges, +// keeping the navigation and top-left content of the screenshot in view +.browser-peek { + aspect-ratio: 16 / 9; + margin-top: auto; + padding: 1rem 0 0 clamp(1rem, 6%, 3rem); + overflow: hidden; + + .browser-frame { + width: 125%; + padding-right: 0; + padding-bottom: 0; + border-right: 0; + border-bottom: 0; + border-top-right-radius: 0; + box-shadow: 0 1rem 2.5rem rgba(0, 0, 0, 0.18); + } + + .browser-frame__viewport { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } +} diff --git a/libs/domains/decabill/frontend/feature-landingpage/src/lib/home/home.component.html b/libs/domains/decabill/frontend/feature-landingpage/src/lib/home/home.component.html index 01f09f842..b877e0d97 100644 --- a/libs/domains/decabill/frontend/feature-landingpage/src/lib/home/home.component.html +++ b/libs/domains/decabill/frontend/feature-landingpage/src/lib/home/home.component.html @@ -64,35 +64,50 @@

-
- Decabill overview dashboard with cloud instances - Decabill plans and subscriptions - Decabill customer billing and invoices - Decabill admin billing and revenue statistics +
+
+ +
+ Decabill overview dashboard with cloud instances + Decabill plans and subscriptions + Decabill customer billing and invoices + Decabill admin billing and revenue statistics +
+
+
+
+ +
+ Decabill service plan configuration +
+
+
diff --git a/libs/domains/decabill/frontend/feature-landingpage/src/lib/home/home.component.scss b/libs/domains/decabill/frontend/feature-landingpage/src/lib/home/home.component.scss index faa6f0a87..8d698d71d 100644 --- a/libs/domains/decabill/frontend/feature-landingpage/src/lib/home/home.component.scss +++ b/libs/domains/decabill/frontend/feature-landingpage/src/lib/home/home.component.scss @@ -159,11 +159,6 @@ background-color: #fff; } -.home-sell-screenshot { - display: block; - margin-top: -8rem; -} - .home-compliance { --bs-border-color: rgba(255, 255, 255, 0.12); } @@ -187,14 +182,10 @@ } .intent-cards { - margin-top: -5rem; position: relative; @media (max-width: 768px) { - padding-top: 2.5rem; - margin-top: 0; - - > .intent-card { + .intent-cards-browser { display: none; } @@ -203,29 +194,28 @@ } } - @media (max-width: 992px) and (min-width: 768px) { - margin-top: -2rem; - } + // Chrome comes from `.browser-frame` in page.component.scss; the hero shows a wider crop of the screenshot + .intent-cards-browser { + z-index: 3; - @media (max-width: 1200px) and (min-width: 992px) { - margin-top: -3rem; - } + .browser-frame__viewport { + aspect-ratio: 16 / 7; + } - > .intent-card { - position: relative; - z-index: 3; - display: block; + .browser-frame__screenshot { + object-position: center; + } } .intent-card-indicators { - position: absolute; - left: 50%; - bottom: 0.75rem; - z-index: 4; display: flex; align-items: center; justify-content: center; gap: 0.125rem; + bottom: 0.75rem; + position: absolute; + z-index: 10; + left: 50%; transform: translateX(-50%); } diff --git a/libs/domains/decabill/frontend/feature-landingpage/src/lib/page.component.scss b/libs/domains/decabill/frontend/feature-landingpage/src/lib/page.component.scss index c98b157c5..28a8b5ae9 100644 --- a/libs/domains/decabill/frontend/feature-landingpage/src/lib/page.component.scss +++ b/libs/domains/decabill/frontend/feature-landingpage/src/lib/page.component.scss @@ -198,3 +198,102 @@ section { position: relative; z-index: 1; } + +// Safari-style window chrome; screenshots are expected as plain 16:9 captures without their own frame +.browser-frame { + position: relative; + padding: 0 0.5rem 0.5rem; + border: 1px solid var(--bs-border-color); + border-top-left-radius: var(--bs-border-radius-lg); + border-top-right-radius: var(--bs-border-radius-lg); + background-color: var(--bs-dark); + box-shadow: 0 1.5rem 3rem rgba(0, 0, 0, 0.25); +} + +.browser-frame__toolbar { + display: grid; + grid-template-columns: 1fr minmax(0, 2fr) 1fr; + align-items: center; + height: 2.75rem; + padding: 0 0.5rem; +} + +.browser-frame__lights { + display: flex; + gap: 0.5rem; +} + +.browser-frame__light { + width: 0.75rem; + height: 0.75rem; + border-radius: 50%; + + &--close { + background-color: #ff5f57; + } + + &--minimize { + background-color: #febc2e; + } + + &--zoom { + background-color: #28c840; + } +} + +.browser-frame__address { + display: flex; + align-items: center; + justify-content: center; + gap: 0.375rem; + height: 1.75rem; + overflow: hidden; + border-radius: 0.5rem; + background-color: rgba(255, 255, 255, 0.08); + color: rgba(255, 255, 255, 0.7); + font-size: 0.8125rem; + white-space: nowrap; + + > .bi { + font-size: 0.6875rem; + } +} + +.browser-frame__viewport { + aspect-ratio: 16 / 9; + overflow: hidden; + border-radius: 0.375rem; +} + +.browser-frame__screenshot { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + object-position: left top; +} + +// Bento cards: the window enters from the lower left and bleeds off the right and bottom card edges, +// keeping the navigation and top-left content of the screenshot in view +.browser-peek { + aspect-ratio: 16 / 9; + margin-top: auto; + padding: 1rem 0 0 clamp(1rem, 6%, 3rem); + overflow: hidden; + + .browser-frame { + width: 125%; + padding-right: 0; + padding-bottom: 0; + border-right: 0; + border-bottom: 0; + border-top-right-radius: 0; + box-shadow: 0 1rem 2.5rem rgba(0, 0, 0, 0.18); + } + + .browser-frame__viewport { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } +}