diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml new file mode 100644 index 0000000..a6f2c59 --- /dev/null +++ b/.github/workflows/preview.yml @@ -0,0 +1,32 @@ +name: Deploy PR preview + +on: + pull_request: + types: + - opened + - reopened + - synchronize + - closed + +concurrency: + group: preview-${{ github.event.pull_request.number }} + cancel-in-progress: true + +permissions: + contents: write + issues: write + pull-requests: write + +jobs: + deploy-preview: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Deploy preview + uses: rossjrw/pr-preview-action@v1 + with: + source-dir: ./ + preview-branch: gh-pages + wait-for-pages-deployment: true diff --git a/README.md b/README.md index 6371eac..32574cd 100644 --- a/README.md +++ b/README.md @@ -1 +1,6 @@ -# nextcloud.librecode.coop \ No newline at end of file +# nextcloud.librecode.coop + +Preview de PRs: +- GitHub Pages precisa estar configurado para `Deploy from branch`. +- A branch de preview usada pelo workflow é `gh-pages`. +- O workflow está em [`.github/workflows/preview.yml`](/home/mohr/git/librecode/nextcloud.librecode.coop/.github/workflows/preview.yml). diff --git a/index.html b/index.html index 81e7df8..ecac557 100644 --- a/index.html +++ b/index.html @@ -47,6 +47,104 @@ .trust { display: flex; flex-wrap: wrap; justify-content: center; gap: 20px; font-size: 0.95rem; opacity: 0.9; } .trust span { display: flex; align-items: center; gap: 6px; } + /* Preview */ + .preview { padding: 80px 0; background: linear-gradient(180deg, #ffffff 0%, #eef6fc 100%); } + .preview-wrap { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); gap: 32px; align-items: center; margin-top: 40px; } + .preview-copy h2 { text-align: left; margin-bottom: 14px; } + .preview-copy .section-subtitle { text-align: left; margin-left: 0; margin-right: 0; margin-bottom: 24px; } + .preview-points { list-style: none; display: grid; gap: 14px; } + .preview-points li { + background: var(--nc-white); + border-radius: 14px; + padding: 14px 16px; + box-shadow: var(--shadow); + border-left: 4px solid var(--nc-blue); + } + .browser-frame { + background: #0f172a; + border-radius: 22px; + padding: 14px; + box-shadow: 0 24px 60px rgba(15, 23, 42, 0.18); + transform: perspective(1400px) rotateY(-10deg) rotateX(4deg); + } + .browser-chrome { + display: flex; + align-items: center; + gap: 8px; + padding: 10px 12px 14px; + color: rgba(255,255,255,0.72); + font-size: 0.82rem; + } + .browser-dots { display: flex; gap: 6px; margin-right: 8px; } + .browser-dots span { width: 10px; height: 10px; border-radius: 50%; } + .browser-dots span:nth-child(1) { background: #ff5f57; } + .browser-dots span:nth-child(2) { background: #febc2e; } + .browser-dots span:nth-child(3) { background: #28c840; } + .browser-bar { + flex: 1; + background: rgba(255,255,255,0.08); + border-radius: 999px; + padding: 8px 14px; + text-align: left; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + .browser-content { + background: linear-gradient(180deg, #0b1220 0%, #111827 100%); + border-radius: 16px; + padding: 24px; + color: #e5eef8; + } + .preview-header { display: flex; justify-content: space-between; align-items: center; gap: 18px; margin-bottom: 20px; } + .preview-brand { font-weight: 800; letter-spacing: 0.02em; } + .preview-pill { + background: rgba(0, 130, 201, 0.18); + color: #9bd8ff; + padding: 8px 12px; + border-radius: 999px; + font-size: 0.82rem; + font-weight: 700; + } + .preview-hero { + display: grid; + grid-template-columns: minmax(0, 1.4fr) minmax(220px, 0.9fr); + gap: 18px; + align-items: stretch; + } + .preview-panel { + background: rgba(255,255,255,0.04); + border: 1px solid rgba(255,255,255,0.08); + border-radius: 18px; + padding: 20px; + min-height: 100%; + } + .preview-panel h3 { font-size: 1.35rem; margin-bottom: 10px; } + .preview-panel p { color: rgba(229,238,248,0.82); margin-bottom: 0; } + .preview-stats { display: grid; gap: 14px; } + .preview-stat { + background: rgba(255,255,255,0.04); + border: 1px solid rgba(255,255,255,0.08); + border-radius: 16px; + padding: 14px 16px; + } + .preview-stat strong { display: block; font-size: 1.15rem; margin-bottom: 4px; color: #fff; } + .preview-cards { + margin-top: 18px; + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 14px; + } + .preview-card { + background: rgba(255,255,255,0.05); + border-radius: 14px; + padding: 14px; + min-height: 96px; + border: 1px solid rgba(255,255,255,0.08); + } + .preview-card .label { display: block; font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.08em; color: rgba(255,255,255,0.55); margin-bottom: 6px; } + .preview-card .value { font-size: 1rem; font-weight: 700; color: #fff; } + /* Solutions */ .apps { padding: 80px 0; background: var(--nc-white); } .section-title { text-align: center; font-size: 2.2rem; margin-bottom: 12px; font-weight: 700; } @@ -141,6 +239,12 @@ .hero h2 { font-size: 1.1rem; } .nav-links { display: none; } .hero-ctas { flex-direction: column; align-items: center; } + .preview-wrap { grid-template-columns: 1fr; } + .preview-copy h2 { text-align: center; } + .preview-copy .section-subtitle { text-align: center; margin-left: auto; margin-right: auto; } + .browser-frame { transform: none; } + .preview-hero { grid-template-columns: 1fr; } + .preview-cards { grid-template-columns: 1fr; } .consulting-grid { grid-template-columns: 1fr; } .contact-grid { grid-template-columns: 1fr; } .field-row { grid-template-columns: 1fr; } @@ -197,6 +301,68 @@
Uma prévia visual da proposta: comercial, direta e com foco em conversão para consultoria sob medida.
+Estratégia Nextcloud desenhada para sua operação, com escopo, implantação e suporte claros.
+