diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml new file mode 100644 index 0000000..f29af2c --- /dev/null +++ b/.gitea/workflows/ci.yaml @@ -0,0 +1,45 @@ +name: CI - Build & Test +run-name: π CI ${{ gitea.ref_name }} by @${{ gitea.actor }} + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + lint: + name: Lint & Build + runs-on: linux + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: HTML Validate + run: | + echo "Checking HTML structure..." + if grep -q "" index.html; then + echo "β HTML5 doctype present" + else + echo "β Missing HTML5 doctype" + exit 1 + fi + + - name: CSS Check + run: | + echo "Checking CSS..." + if grep -q "@media" css/style.css; then + echo "β Responsive styles present" + else + echo "β οΈ No responsive styles found" + fi + + - name: Nginx Config Test + run: | + echo "Checking nginx conf..." + docker run --rm -v $PWD/nginx.conf:/tmp/nginx.conf:ro nginx:1.27-alpine nginx -t -c /tmp/nginx.conf 2>&1 || true + + - name: Build Docker Image + run: | + docker build -t noveria-landing:ci . + echo "β Build successful" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3ea88ae --- /dev/null +++ b/Dockerfile @@ -0,0 +1,5 @@ +FROM nginx:1.27-alpine +COPY nginx.conf /etc/nginx/conf.d/default.conf +COPY index.html /usr/share/nginx/html/ +COPY css/ /usr/share/nginx/html/css/ +EXPOSE 80 diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..0b511a9 --- /dev/null +++ b/css/style.css @@ -0,0 +1,188 @@ +/* βββββββββββββββββββββββββββββββββββββββββββββββ + Noveria Landing β Galaxy Theme + βββββββββββββββββββββββββββββββββββββββββββββββ */ + +:root { + --bg: #080a0f; + --tx: #e8eaf0; + --tx-2: #a5adba; + --tx-3: #687181; + --accent: #8b7cf6; + --accent-glow: rgba(139, 124, 246, .35); + --grad: linear-gradient(135deg, #7c6cff, #b557f6); +} + +* { box-sizing: border-box; margin: 0; padding: 0; } + +html, body { + height: 100%; + overflow: hidden; + font-family: Inter, ui-sans-serif, system-ui, -apple-system, sans-serif; + color: var(--tx); + background: var(--bg); +} + +/* βββ Galaxy Background βββ */ +.galaxy { + position: fixed; + inset: 0; + z-index: 0; + background: + radial-gradient(80% 60% at 50% 40%, rgba(139, 124, 246, .08), transparent 60%), + radial-gradient(60% 50% at 80% 80%, rgba(181, 87, 246, .06), transparent 55%), + radial-gradient(50% 40% at 20% 20%, rgba(124, 108, 255, .05), transparent 50%), + var(--bg); +} + +.stars, .stars2, .stars3 { + position: absolute; + inset: 0; + background: transparent; +} + +.stars { + background-image: + radial-gradient(1px 1px at 10% 15%, rgba(255,255,255,.8), transparent), + radial-gradient(1px 1px at 25% 45%, rgba(255,255,255,.6), transparent), + radial-gradient(1.5px 1.5px at 40% 10%, rgba(200,190,255,.9), transparent), + radial-gradient(1px 1px at 55% 70%, rgba(255,255,255,.7), transparent), + radial-gradient(1px 1px at 70% 30%, rgba(255,255,255,.5), transparent), + radial-gradient(1.5px 1.5px at 85% 55%, rgba(180,170,255,.8), transparent), + radial-gradient(1px 1px at 15% 80%, rgba(255,255,255,.6), transparent), + radial-gradient(1px 1px at 60% 85%, rgba(255,255,255,.4), transparent), + radial-gradient(1px 1px at 90% 20%, rgba(255,255,255,.7), transparent); +} + +.stars2 { + background-image: + radial-gradient(1px 1px at 5% 25%, rgba(255,255,255,.9), transparent), + radial-gradient(1.5px 1.5px at 20% 60%, rgba(220,210,255,.8), transparent), + radial-gradient(1px 1px at 35% 35%, rgba(255,255,255,.5), transparent), + radial-gradient(1px 1px at 50% 15%, rgba(255,255,255,.6), transparent), + radial-gradient(1px 1px at 65% 55%, rgba(255,255,255,.7), transparent), + radial-gradient(1.5px 1.5px at 80% 75%, rgba(200,190,255,.8), transparent), + radial-gradient(1px 1px at 95% 40%, rgba(255,255,255,.5), transparent), + radial-gradient(1px 1px at 45% 90%, rgba(255,255,255,.4), transparent); + animation: twinkle 4s ease-in-out infinite alternate; +} + +.stars3 { + background-image: + radial-gradient(1px 1px at 8% 65%, rgba(255,255,255,.6), transparent), + radial-gradient(1px 1px at 18% 15%, rgba(255,255,255,.5), transparent), + radial-gradient(1.5px 1.5px at 30% 80%, rgba(210,200,255,.7), transparent), + radial-gradient(1px 1px at 48% 45%, rgba(255,255,255,.8), transparent), + radial-gradient(1px 1px at 62% 25%, rgba(255,255,255,.4), transparent), + radial-gradient(1px 1px at 75% 65%, rgba(255,255,255,.6), transparent), + radial-gradient(1px 1px at 88% 8%, rgba(255,255,255,.7), transparent), + radial-gradient(1.5px 1.5px at 12% 48%, rgba(190,180,255,.8), transparent); + animation: twinkle 6s ease-in-out infinite alternate-reverse; +} + +@keyframes twinkle { + 0% { opacity: .5; } + 100% { opacity: 1; } +} + +/* βββ Content βββ */ +.hero { + position: relative; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + height: 100%; + padding: 2rem; +} + +.hero-content { + text-align: center; + animation: fade-up .8s ease-out; +} + +@keyframes fade-up { + from { opacity: 0; transform: translateY(12px); } + to { opacity: 1; transform: translateY(0); } +} + +.hero-title { + font-family: 'Space Grotesk', Inter, sans-serif; + font-size: clamp(2.5rem, 8vw, 5rem); + font-weight: 700; + letter-spacing: .06em; + background: var(--grad); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + filter: drop-shadow(0 0 28px var(--accent-glow)); + margin-bottom: .5rem; +} + +.hero-subtitle { + font-size: clamp(1rem, 2.5vw, 1.35rem); + color: var(--tx-2); + letter-spacing: .04em; + margin-bottom: 2rem; +} + +.status-badge { + display: inline-block; + padding: .6rem 1.8rem; + border-radius: 99px; + border: 1px solid rgba(139, 124, 246, .25); + background: rgba(139, 124, 246, .08); + color: var(--accent); + font-size: .85rem; + font-weight: 600; + letter-spacing: .08em; + text-transform: uppercase; + box-shadow: 0 0 32px rgba(139, 124, 246, .12); + margin-bottom: 2rem; + animation: pulse-badge 3s ease-in-out infinite; +} + +@keyframes pulse-badge { + 0%, 100% { box-shadow: 0 0 24px rgba(139, 124, 246, .08); } + 50% { box-shadow: 0 0 40px rgba(139, 124, 246, .20); } +} + +.links { + display: flex; + align-items: center; + justify-content: center; + gap: 1rem; +} + +.link { + color: var(--tx-3); + text-decoration: none; + font-size: .9rem; + transition: color .2s; +} + +.link:hover { color: var(--tx); } + +.sep { + color: var(--tx-3); + font-size: .9rem; +} + +/* βββ Footer βββ */ +.footer { + position: fixed; + bottom: 0; + left: 0; + right: 0; + z-index: 1; + text-align: center; + padding: 1rem; + font-size: .75rem; + color: var(--tx-3); +} + +/* βββ Responsive βββ */ +@media (max-width: 768px) { + .hero { padding: 1rem; } + .hero-title { font-size: clamp(1.8rem, 12vw, 3.5rem); } + .hero-subtitle { font-size: 1rem; } +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..823a3e7 --- /dev/null +++ b/index.html @@ -0,0 +1,36 @@ + + +
+ + +