inital commit
6
.dockerignore
Normal file
@@ -0,0 +1,6 @@
|
||||
.git
|
||||
.venv
|
||||
__pycache__
|
||||
*.pyc
|
||||
db.sqlite3
|
||||
media
|
||||
20
Dockerfile
Normal file
@@ -0,0 +1,20 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONUNBUFFERED=1 \
|
||||
UV_LINK_MODE=copy \
|
||||
PATH="/app/.venv/bin:$PATH"
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN pip install --no-cache-dir uv
|
||||
|
||||
COPY pyproject.toml README.md /app/
|
||||
RUN uv sync --no-dev
|
||||
|
||||
COPY . /app
|
||||
RUN chmod +x /app/docker/entrypoint.sh
|
||||
|
||||
EXPOSE 8000
|
||||
|
||||
CMD ["bash", "/app/docker/entrypoint.sh"]
|
||||
51
README.md
@@ -1,2 +1,51 @@
|
||||
# demo_sites
|
||||
# Demo Sites Builder
|
||||
|
||||
Django app that creates client websites in two flavors:
|
||||
|
||||
- Static HTML/CSS package.
|
||||
- Django demo project with ecommerce scaffolding and contact/email flow.
|
||||
|
||||
Includes local Ollama integration for AI-generated copy and section content.
|
||||
|
||||
## Local setup with uv
|
||||
|
||||
1. Create virtual environment:
|
||||
- `uv venv .venv`
|
||||
2. Activate it:
|
||||
- `source .venv/bin/activate`
|
||||
3. Install dependencies:
|
||||
- `uv sync`
|
||||
4. Run migrations and seed template catalog:
|
||||
- `uv run python manage.py migrate`
|
||||
- `uv run python manage.py seed_templates`
|
||||
5. Start dev server:
|
||||
- `uv run python manage.py runserver`
|
||||
|
||||
## Docker
|
||||
|
||||
- Build and run:
|
||||
- `docker compose up --build`
|
||||
|
||||
The app is available at `http://localhost:8000`.
|
||||
|
||||
By default, container points Ollama requests to `http://host.docker.internal:11434`.
|
||||
|
||||
## Client templates
|
||||
|
||||
Place purchased themes under:
|
||||
|
||||
- `templates/template_1/` — NeuralSync (static HTML in `Main File/NeuralSync/`)
|
||||
- `templates/template_2/` — Eventio (Next.js in `eventio/eventio-HTML/`)
|
||||
- `templates/template_3/` — Waves (static HTML in `site/`)
|
||||
- `templates/template_4/` — Multipurpose business (static HTML in `site/`)
|
||||
|
||||
Run `uv run python manage.py seed_templates` after adding or changing template folders.
|
||||
|
||||
## Default flow
|
||||
|
||||
1. Sign up or log in.
|
||||
2. Open dashboard.
|
||||
3. Enter business details and pick one of the four templates.
|
||||
4. Generate site package (copies template files + business/AI personalization).
|
||||
5. Download static site zip (and optional Django ecommerce demo zip).
|
||||
|
||||
|
||||
1
builder/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
17
builder/admin.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from django.contrib import admin
|
||||
|
||||
from .models import ClientSite, TemplateOption
|
||||
|
||||
|
||||
@admin.register(TemplateOption)
|
||||
class TemplateOptionAdmin(admin.ModelAdmin):
|
||||
list_display = ("name", "slug", "supports_basic", "supports_django", "is_active")
|
||||
list_filter = ("supports_basic", "supports_django", "is_active")
|
||||
search_fields = ("name", "slug")
|
||||
|
||||
|
||||
@admin.register(ClientSite)
|
||||
class ClientSiteAdmin(admin.ModelAdmin):
|
||||
list_display = ("business_name", "owner", "status", "template_option", "created_at")
|
||||
list_filter = ("status", "template_option")
|
||||
search_fields = ("business_name", "owner__username", "business_phone")
|
||||
6
builder/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class BuilderConfig(AppConfig):
|
||||
default_auto_field = "django.db.models.BigAutoField"
|
||||
name = "builder"
|
||||
29
builder/forms.py
Normal file
@@ -0,0 +1,29 @@
|
||||
from django import forms
|
||||
from django.contrib.auth.forms import UserCreationForm
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
from .models import ClientSite
|
||||
|
||||
|
||||
class SignUpForm(UserCreationForm):
|
||||
email = forms.EmailField(required=True)
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ("username", "email", "password1", "password2")
|
||||
|
||||
|
||||
class ClientSiteForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = ClientSite
|
||||
fields = [
|
||||
"business_name",
|
||||
"business_address",
|
||||
"business_phone",
|
||||
"business_description",
|
||||
"old_website",
|
||||
"template_option",
|
||||
]
|
||||
widgets = {
|
||||
"business_description": forms.Textarea(attrs={"rows": 4}),
|
||||
}
|
||||
1
builder/management/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
builder/management/commands/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
49
builder/management/commands/seed_templates.py
Normal file
@@ -0,0 +1,49 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from builder.models import TemplateOption
|
||||
from builder.template_registry import discover_client_templates
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "Seed template options from templates/template_* folders and site_catalog/templates.json"
|
||||
|
||||
def handle(self, *args, **options):
|
||||
root = Path(__file__).resolve().parents[4]
|
||||
catalog_path = root / "site_catalog" / "templates.json"
|
||||
|
||||
discovered = {item["slug"]: item for item in discover_client_templates()}
|
||||
catalog_items: dict[str, dict] = {}
|
||||
|
||||
if catalog_path.exists():
|
||||
for item in json.loads(catalog_path.read_text(encoding="utf-8")):
|
||||
catalog_items[item["slug"]] = item
|
||||
|
||||
merged_slugs = set(discovered) | set(catalog_items)
|
||||
count = 0
|
||||
|
||||
for slug in sorted(merged_slugs):
|
||||
discovered_item = discovered.get(slug, {})
|
||||
catalog_item = catalog_items.get(slug, {})
|
||||
merged = {**discovered_item, **catalog_item}
|
||||
if not merged.get("source_folder"):
|
||||
self.stdout.write(self.style.WARNING(f"Skipping {slug}: no source_folder."))
|
||||
continue
|
||||
|
||||
TemplateOption.objects.update_or_create(
|
||||
slug=slug,
|
||||
defaults={
|
||||
"name": merged.get("name", slug),
|
||||
"description": merged.get("description", ""),
|
||||
"supports_basic": merged.get("supports_basic", True),
|
||||
"supports_django": merged.get("supports_django", True),
|
||||
"source_folder": merged["source_folder"],
|
||||
"is_active": merged.get("is_active", True),
|
||||
},
|
||||
)
|
||||
count += 1
|
||||
|
||||
TemplateOption.objects.exclude(slug__in=merged_slugs).update(is_active=False)
|
||||
self.stdout.write(self.style.SUCCESS(f"Seeded {count} template option(s)."))
|
||||
77
builder/migrations/0001_initial.py
Normal file
@@ -0,0 +1,77 @@
|
||||
import django.db.models.deletion
|
||||
import uuid
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="TemplateOption",
|
||||
fields=[
|
||||
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
||||
("name", models.CharField(max_length=120)),
|
||||
("slug", models.SlugField(unique=True)),
|
||||
("description", models.TextField(blank=True)),
|
||||
("supports_basic", models.BooleanField(default=True)),
|
||||
("supports_django", models.BooleanField(default=True)),
|
||||
("source_folder", models.CharField(blank=True, max_length=255)),
|
||||
("is_active", models.BooleanField(default=True)),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
],
|
||||
options={"ordering": ["name"]},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="ClientSite",
|
||||
fields=[
|
||||
("id", models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
||||
("business_name", models.CharField(max_length=160)),
|
||||
("business_address", models.CharField(max_length=255)),
|
||||
("business_phone", models.CharField(max_length=40)),
|
||||
("business_description", models.TextField()),
|
||||
("old_website", models.URLField(blank=True)),
|
||||
(
|
||||
"status",
|
||||
models.CharField(
|
||||
choices=[
|
||||
("draft", "Draft"),
|
||||
("generating", "Generating"),
|
||||
("ready", "Ready"),
|
||||
("failed", "Failed"),
|
||||
],
|
||||
default="draft",
|
||||
max_length=20,
|
||||
),
|
||||
),
|
||||
("ai_payload", models.JSONField(blank=True, default=dict)),
|
||||
("basic_zip_path", models.CharField(blank=True, max_length=255)),
|
||||
("django_zip_path", models.CharField(blank=True, max_length=255)),
|
||||
("last_error", models.TextField(blank=True)),
|
||||
("created_at", models.DateTimeField(auto_now_add=True)),
|
||||
("updated_at", models.DateTimeField(auto_now=True)),
|
||||
(
|
||||
"owner",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="client_sites",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
(
|
||||
"template_option",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.PROTECT,
|
||||
related_name="client_sites",
|
||||
to="builder.templateoption",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"ordering": ["-created_at"]},
|
||||
),
|
||||
]
|
||||
1
builder/migrations/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
51
builder/models.py
Normal file
@@ -0,0 +1,51 @@
|
||||
import uuid
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
|
||||
|
||||
class TemplateOption(models.Model):
|
||||
name = models.CharField(max_length=120)
|
||||
slug = models.SlugField(unique=True)
|
||||
description = models.TextField(blank=True)
|
||||
supports_basic = models.BooleanField(default=True)
|
||||
supports_django = models.BooleanField(default=True)
|
||||
source_folder = models.CharField(max_length=255, blank=True)
|
||||
is_active = models.BooleanField(default=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ["name"]
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.name
|
||||
|
||||
|
||||
class ClientSite(models.Model):
|
||||
class Status(models.TextChoices):
|
||||
DRAFT = "draft", "Draft"
|
||||
GENERATING = "generating", "Generating"
|
||||
READY = "ready", "Ready"
|
||||
FAILED = "failed", "Failed"
|
||||
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="client_sites")
|
||||
template_option = models.ForeignKey(TemplateOption, on_delete=models.PROTECT, related_name="client_sites")
|
||||
business_name = models.CharField(max_length=160)
|
||||
business_address = models.CharField(max_length=255)
|
||||
business_phone = models.CharField(max_length=40)
|
||||
business_description = models.TextField()
|
||||
old_website = models.URLField(blank=True)
|
||||
status = models.CharField(max_length=20, choices=Status.choices, default=Status.DRAFT)
|
||||
ai_payload = models.JSONField(default=dict, blank=True)
|
||||
basic_zip_path = models.CharField(max_length=255, blank=True)
|
||||
django_zip_path = models.CharField(max_length=255, blank=True)
|
||||
last_error = models.TextField(blank=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
ordering = ["-created_at"]
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"{self.business_name} ({self.owner})"
|
||||
709
builder/services.py
Normal file
@@ -0,0 +1,709 @@
|
||||
import html
|
||||
import json
|
||||
import shutil
|
||||
import zipfile
|
||||
from pathlib import Path
|
||||
|
||||
import requests
|
||||
from django.conf import settings
|
||||
from django.utils.text import slugify
|
||||
|
||||
from .models import ClientSite
|
||||
from .template_registry import (
|
||||
COPY_EXCLUDE_DIR_NAMES,
|
||||
get_template_config,
|
||||
resolve_source_path,
|
||||
)
|
||||
|
||||
PERSONALIZE_EXTENSIONS = {".html", ".htm", ".css", ".js", ".jsx", ".md", ".txt", ".php"}
|
||||
|
||||
|
||||
class SiteGenerator:
|
||||
def __init__(self) -> None:
|
||||
self.ollama_url = settings.OLLAMA_URL.rstrip("/")
|
||||
self.ollama_model = settings.OLLAMA_MODEL
|
||||
|
||||
def build_all(self, site: ClientSite) -> ClientSite:
|
||||
site_root = Path(settings.MEDIA_ROOT) / "generated" / str(site.id)
|
||||
if site_root.exists():
|
||||
shutil.rmtree(site_root)
|
||||
site_root.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
ai_payload = self._generate_ai_payload(site)
|
||||
basic_zip = self._build_basic_site(site, ai_payload, site_root)
|
||||
django_zip = self._build_django_demo(site, ai_payload, site_root)
|
||||
|
||||
site.ai_payload = ai_payload
|
||||
site.basic_zip_path = str(basic_zip.relative_to(settings.MEDIA_ROOT))
|
||||
site.django_zip_path = str(django_zip.relative_to(settings.MEDIA_ROOT))
|
||||
site.status = ClientSite.Status.READY
|
||||
site.last_error = ""
|
||||
site.save(
|
||||
update_fields=[
|
||||
"ai_payload",
|
||||
"basic_zip_path",
|
||||
"django_zip_path",
|
||||
"status",
|
||||
"last_error",
|
||||
"updated_at",
|
||||
]
|
||||
)
|
||||
return site
|
||||
|
||||
def _generate_ai_payload(self, site: ClientSite) -> dict:
|
||||
fallback = {
|
||||
"tagline": f"{site.business_name} helps local customers with trusted service.",
|
||||
"hero_headline": f"Welcome to {site.business_name}",
|
||||
"hero_subheadline": site.business_description,
|
||||
"services": [
|
||||
"Professional support tailored to your business goals",
|
||||
"Friendly service with clear communication",
|
||||
"Fast turnaround with quality-focused delivery",
|
||||
],
|
||||
"testimonials": [
|
||||
{"name": "Jordan T.", "quote": f"{site.business_name} made process simple and stress-free."},
|
||||
{"name": "Casey M.", "quote": "Great communication, clear pricing, excellent final result."},
|
||||
{"name": "Alex R.", "quote": "Reliable team. We will keep using them for future needs."},
|
||||
],
|
||||
"contact_prompt": "Tell us what you need and we will respond quickly.",
|
||||
}
|
||||
|
||||
prompt = (
|
||||
"You are website copy assistant. Respond in valid JSON only. "
|
||||
"Use keys: tagline, hero_headline, hero_subheadline, services, testimonials, contact_prompt. "
|
||||
"services must be 3 short strings. testimonials must be array of 3 objects with name and quote."
|
||||
f"\nBusiness name: {site.business_name}"
|
||||
f"\nBusiness description: {site.business_description}"
|
||||
f"\nAddress: {site.business_address}"
|
||||
f"\nPhone: {site.business_phone}"
|
||||
f"\nOld website: {site.old_website or 'n/a'}"
|
||||
)
|
||||
|
||||
try:
|
||||
response = requests.post(
|
||||
f"{self.ollama_url}/api/generate",
|
||||
json={"model": self.ollama_model, "prompt": prompt, "stream": False},
|
||||
timeout=20,
|
||||
)
|
||||
response.raise_for_status()
|
||||
model_text = response.json().get("response", "").strip()
|
||||
parsed = json.loads(model_text)
|
||||
if not isinstance(parsed, dict):
|
||||
return fallback
|
||||
return {
|
||||
"tagline": parsed.get("tagline") or fallback["tagline"],
|
||||
"hero_headline": parsed.get("hero_headline") or fallback["hero_headline"],
|
||||
"hero_subheadline": parsed.get("hero_subheadline") or fallback["hero_subheadline"],
|
||||
"services": parsed.get("services") or fallback["services"],
|
||||
"testimonials": parsed.get("testimonials") or fallback["testimonials"],
|
||||
"contact_prompt": parsed.get("contact_prompt") or fallback["contact_prompt"],
|
||||
}
|
||||
except Exception:
|
||||
return fallback
|
||||
|
||||
def _build_basic_site(self, site: ClientSite, ai_payload: dict, root: Path) -> Path:
|
||||
basic_dir = root / "basic_site"
|
||||
if basic_dir.exists():
|
||||
shutil.rmtree(basic_dir)
|
||||
|
||||
source_path = resolve_source_path(site.template_option.source_folder)
|
||||
if source_path.exists() and source_path.is_dir():
|
||||
self._copy_client_template(source_path, basic_dir)
|
||||
config = get_template_config(site.template_option.slug) or {}
|
||||
self._personalize_template_tree(basic_dir, site, ai_payload, config)
|
||||
self._write_client_readme(basic_dir, site, ai_payload, config)
|
||||
basic_zip = root / "basic_site.zip"
|
||||
self._zip_dir(basic_dir, basic_zip)
|
||||
return basic_zip
|
||||
|
||||
basic_dir.mkdir(parents=True, exist_ok=True)
|
||||
safe_name = html.escape(site.business_name)
|
||||
safe_phone = html.escape(site.business_phone)
|
||||
safe_address = html.escape(site.business_address)
|
||||
safe_description = html.escape(site.business_description)
|
||||
safe_tagline = html.escape(ai_payload["tagline"])
|
||||
hero_title = html.escape(ai_payload["hero_headline"])
|
||||
hero_sub = html.escape(ai_payload["hero_subheadline"])
|
||||
services = ai_payload.get("services", [])
|
||||
testimonials = ai_payload.get("testimonials", [])
|
||||
|
||||
nav = """
|
||||
<nav>
|
||||
<a href="index.html">Home</a>
|
||||
<a href="about.html">About</a>
|
||||
<a href="testimonials.html">Testimonials</a>
|
||||
<a href="contact.html">Contact</a>
|
||||
</nav>
|
||||
"""
|
||||
index_html = f"""<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{safe_name} | Home</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
{nav}
|
||||
<header class="hero">
|
||||
<h1>{hero_title}</h1>
|
||||
<p>{hero_sub}</p>
|
||||
<span class="tagline">{safe_tagline}</span>
|
||||
</header>
|
||||
<section>
|
||||
<h2>What We Offer</h2>
|
||||
<ul>
|
||||
<li>{html.escape(services[0] if len(services) > 0 else "Quality-focused support")}</li>
|
||||
<li>{html.escape(services[1] if len(services) > 1 else "Local-first service model")}</li>
|
||||
<li>{html.escape(services[2] if len(services) > 2 else "Clear process from start to finish")}</li>
|
||||
</ul>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
about_html = f"""<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{safe_name} | About</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
{nav}
|
||||
<main>
|
||||
<h1>About {safe_name}</h1>
|
||||
<p>{safe_description}</p>
|
||||
<p>Address: {safe_address}</p>
|
||||
<p>Phone: {safe_phone}</p>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
t1 = testimonials[0] if len(testimonials) > 0 and isinstance(testimonials[0], dict) else {"name": "Client", "quote": "Great result."}
|
||||
t2 = testimonials[1] if len(testimonials) > 1 and isinstance(testimonials[1], dict) else {"name": "Client", "quote": "Excellent service."}
|
||||
t3 = testimonials[2] if len(testimonials) > 2 and isinstance(testimonials[2], dict) else {"name": "Client", "quote": "Would recommend."}
|
||||
testimonials_html = f"""<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{safe_name} | Testimonials</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
{nav}
|
||||
<main>
|
||||
<h1>Testimonials</h1>
|
||||
<blockquote>"{html.escape(str(t1.get("quote", "Great result.")))}" <cite>- {html.escape(str(t1.get("name", "Client")))}</cite></blockquote>
|
||||
<blockquote>"{html.escape(str(t2.get("quote", "Excellent service.")))}" <cite>- {html.escape(str(t2.get("name", "Client")))}</cite></blockquote>
|
||||
<blockquote>"{html.escape(str(t3.get("quote", "Would recommend.")))}" <cite>- {html.escape(str(t3.get("name", "Client")))}</cite></blockquote>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
contact_html = f"""<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{safe_name} | Contact</title>
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
</head>
|
||||
<body>
|
||||
{nav}
|
||||
<main>
|
||||
<h1>Contact Us</h1>
|
||||
<p>{html.escape(ai_payload["contact_prompt"])}</p>
|
||||
<p>Phone: {safe_phone}</p>
|
||||
<p>Address: {safe_address}</p>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
styles = """
|
||||
body{font-family:Arial,sans-serif;margin:0;background:#f6f7fb;color:#1f2937;}
|
||||
nav{display:flex;gap:1rem;padding:1rem 2rem;background:#111827;}
|
||||
nav a{color:#fff;text-decoration:none;font-weight:600;}
|
||||
.hero{padding:4rem 2rem;background:#2563eb;color:white;}
|
||||
main,section{max-width:900px;margin:2rem auto;padding:0 1rem;}
|
||||
blockquote{background:#fff;padding:1rem;border-left:4px solid #2563eb;border-radius:6px;}
|
||||
.tagline{display:inline-block;margin-top:1rem;background:#1d4ed8;padding:.25rem .75rem;border-radius:999px;}
|
||||
"""
|
||||
|
||||
(basic_dir / "index.html").write_text(index_html, encoding="utf-8")
|
||||
(basic_dir / "about.html").write_text(about_html, encoding="utf-8")
|
||||
(basic_dir / "testimonials.html").write_text(testimonials_html, encoding="utf-8")
|
||||
(basic_dir / "contact.html").write_text(contact_html, encoding="utf-8")
|
||||
(basic_dir / "styles.css").write_text(styles, encoding="utf-8")
|
||||
|
||||
basic_zip = root / "basic_site.zip"
|
||||
self._zip_dir(basic_dir, basic_zip)
|
||||
return basic_zip
|
||||
|
||||
def _copy_client_template(self, source_path: Path, destination: Path) -> None:
|
||||
def ignore(_directory: str, names: list[str]) -> list[str]:
|
||||
ignored: list[str] = []
|
||||
for name in names:
|
||||
if name in COPY_EXCLUDE_DIR_NAMES:
|
||||
ignored.append(name)
|
||||
elif name.endswith(".zip"):
|
||||
ignored.append(name)
|
||||
return ignored
|
||||
|
||||
shutil.copytree(source_path, destination, ignore=ignore)
|
||||
|
||||
def _personalize_template_tree(
|
||||
self,
|
||||
target_dir: Path,
|
||||
site: ClientSite,
|
||||
ai_payload: dict,
|
||||
config: dict,
|
||||
) -> None:
|
||||
replacements = self._build_replacements(site, ai_payload, config)
|
||||
for file_path in target_dir.rglob("*"):
|
||||
if not file_path.is_file():
|
||||
continue
|
||||
if file_path.suffix.lower() not in PERSONALIZE_EXTENSIONS:
|
||||
continue
|
||||
if "bootstrap-icons" in file_path.parts and file_path.suffix == ".json":
|
||||
continue
|
||||
try:
|
||||
content = file_path.read_text(encoding="utf-8")
|
||||
except UnicodeDecodeError:
|
||||
continue
|
||||
updated = content
|
||||
for old, new in replacements.items():
|
||||
if old and new and old in updated:
|
||||
updated = updated.replace(old, new)
|
||||
if updated != content:
|
||||
file_path.write_text(updated, encoding="utf-8")
|
||||
|
||||
info_path = target_dir / "client-site-info.json"
|
||||
info_path.write_text(
|
||||
json.dumps(
|
||||
{
|
||||
"business_name": site.business_name,
|
||||
"business_address": site.business_address,
|
||||
"business_phone": site.business_phone,
|
||||
"business_description": site.business_description,
|
||||
"old_website": site.old_website,
|
||||
"ai_payload": ai_payload,
|
||||
},
|
||||
indent=2,
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
def _build_replacements(self, site: ClientSite, ai_payload: dict, config: dict) -> dict[str, str]:
|
||||
replacements: dict[str, str] = {}
|
||||
business_name = site.business_name
|
||||
hero_headline = ai_payload.get("hero_headline", business_name)
|
||||
hero_subheadline = ai_payload.get("hero_subheadline", site.business_description)
|
||||
|
||||
for token in config.get("brand_tokens", []):
|
||||
replacements[token] = business_name
|
||||
|
||||
hero_strings = config.get("hero_strings", [])
|
||||
if hero_strings:
|
||||
replacements[hero_strings[0]] = hero_headline
|
||||
for hero_string in hero_strings[1:]:
|
||||
replacements[hero_string] = hero_subheadline
|
||||
|
||||
replacements.update(
|
||||
{
|
||||
"555-0100": site.business_phone,
|
||||
"555-0101": site.business_phone,
|
||||
"(555) 010-0100": site.business_phone,
|
||||
"123 Main Street": site.business_address,
|
||||
"San Francisco, California": site.business_address,
|
||||
}
|
||||
)
|
||||
|
||||
if site.old_website:
|
||||
replacements["https://example.com"] = site.old_website
|
||||
replacements["http://example.com"] = site.old_website
|
||||
|
||||
return replacements
|
||||
|
||||
def _write_client_readme(
|
||||
self,
|
||||
target_dir: Path,
|
||||
site: ClientSite,
|
||||
ai_payload: dict,
|
||||
config: dict,
|
||||
) -> None:
|
||||
kind = config.get("kind", "static_html")
|
||||
run_hint = "Open index.html in a browser."
|
||||
if kind == "nextjs":
|
||||
run_hint = "Run: npm install && npm run dev"
|
||||
elif kind == "static_html":
|
||||
run_hint = "Open index.html (or another index-*.html page) in a browser."
|
||||
|
||||
readme = f"""# {site.business_name} — generated site package
|
||||
|
||||
Template: {site.template_option.name}
|
||||
Type: {kind}
|
||||
|
||||
## Business details
|
||||
|
||||
- Name: {site.business_name}
|
||||
- Phone: {site.business_phone}
|
||||
- Address: {site.business_address}
|
||||
- Description: {site.business_description}
|
||||
"""
|
||||
if site.old_website:
|
||||
readme += f"- Previous website: {site.old_website}\n"
|
||||
|
||||
readme += f"""
|
||||
## AI-generated copy
|
||||
|
||||
- Tagline: {ai_payload.get("tagline", "")}
|
||||
- Headline: {ai_payload.get("hero_headline", "")}
|
||||
- Subheadline: {ai_payload.get("hero_subheadline", "")}
|
||||
|
||||
## How to preview
|
||||
|
||||
{run_hint}
|
||||
|
||||
See client-site-info.json for full generation payload.
|
||||
"""
|
||||
(target_dir / "README-CLIENT.md").write_text(readme, encoding="utf-8")
|
||||
|
||||
def _build_django_demo(self, site: ClientSite, ai_payload: dict, root: Path) -> Path:
|
||||
project_slug = slugify(site.business_name)[:30] or "client-site"
|
||||
django_dir = root / "django_demo"
|
||||
django_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
files = {
|
||||
"manage.py": self._django_manage_py(),
|
||||
"client_demo/__init__.py": "",
|
||||
"client_demo/settings.py": self._django_settings_py(site),
|
||||
"client_demo/urls.py": self._django_urls_py(),
|
||||
"client_demo/wsgi.py": self._django_wsgi_py(),
|
||||
"shop/__init__.py": "",
|
||||
"shop/apps.py": self._shop_apps_py(),
|
||||
"shop/models.py": self._shop_models_py(),
|
||||
"shop/forms.py": self._shop_forms_py(),
|
||||
"shop/urls.py": self._shop_urls_py(),
|
||||
"shop/views.py": self._shop_views_py(ai_payload),
|
||||
"shop/admin.py": self._shop_admin_py(),
|
||||
"shop/migrations/__init__.py": "",
|
||||
"templates/base.html": self._shop_base_template(site),
|
||||
"templates/shop/home.html": self._shop_home_template(),
|
||||
"templates/shop/products.html": self._shop_products_template(),
|
||||
"templates/shop/cart.html": self._shop_cart_template(),
|
||||
"templates/shop/contact.html": self._shop_contact_template(),
|
||||
"README.md": self._django_readme(project_slug),
|
||||
}
|
||||
|
||||
for relative_path, content in files.items():
|
||||
destination = django_dir / relative_path
|
||||
destination.parent.mkdir(parents=True, exist_ok=True)
|
||||
destination.write_text(content, encoding="utf-8")
|
||||
|
||||
django_zip = root / "django_demo.zip"
|
||||
self._zip_dir(django_dir, django_zip)
|
||||
return django_zip
|
||||
|
||||
def _zip_dir(self, directory: Path, output_zip: Path) -> None:
|
||||
with zipfile.ZipFile(output_zip, "w", zipfile.ZIP_DEFLATED) as zipf:
|
||||
for file_path in directory.rglob("*"):
|
||||
if file_path.is_file():
|
||||
zipf.write(file_path, file_path.relative_to(directory))
|
||||
|
||||
def _django_manage_py(self) -> str:
|
||||
return """#!/usr/bin/env python
|
||||
import os
|
||||
import sys
|
||||
|
||||
if __name__ == "__main__":
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "client_demo.settings")
|
||||
from django.core.management import execute_from_command_line
|
||||
execute_from_command_line(sys.argv)
|
||||
"""
|
||||
|
||||
def _django_settings_py(self, site: ClientSite) -> str:
|
||||
return f"""from pathlib import Path
|
||||
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||
SECRET_KEY = "replace-me"
|
||||
DEBUG = True
|
||||
ALLOWED_HOSTS = ["*"]
|
||||
|
||||
INSTALLED_APPS = [
|
||||
"django.contrib.admin",
|
||||
"django.contrib.auth",
|
||||
"django.contrib.contenttypes",
|
||||
"django.contrib.sessions",
|
||||
"django.contrib.messages",
|
||||
"django.contrib.staticfiles",
|
||||
"shop",
|
||||
]
|
||||
MIDDLEWARE = [
|
||||
"django.middleware.security.SecurityMiddleware",
|
||||
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||
"django.middleware.common.CommonMiddleware",
|
||||
"django.middleware.csrf.CsrfViewMiddleware",
|
||||
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
||||
"django.contrib.messages.middleware.MessageMiddleware",
|
||||
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
||||
]
|
||||
ROOT_URLCONF = "client_demo.urls"
|
||||
TEMPLATES = [{{
|
||||
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
||||
"DIRS": [BASE_DIR / "templates"],
|
||||
"APP_DIRS": True,
|
||||
"OPTIONS": {{"context_processors": [
|
||||
"django.template.context_processors.request",
|
||||
"django.contrib.auth.context_processors.auth",
|
||||
"django.contrib.messages.context_processors.messages",
|
||||
]}},
|
||||
}}]
|
||||
WSGI_APPLICATION = "client_demo.wsgi.application"
|
||||
DATABASES = {{"default": {{"ENGINE": "django.db.backends.sqlite3", "NAME": BASE_DIR / "db.sqlite3"}}}}
|
||||
LANGUAGE_CODE = "en-us"
|
||||
TIME_ZONE = "UTC"
|
||||
USE_I18N = True
|
||||
USE_TZ = True
|
||||
STATIC_URL = "static/"
|
||||
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
|
||||
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
|
||||
DEFAULT_FROM_EMAIL = "no-reply@example.com"
|
||||
BUSINESS_NAME = {site.business_name!r}
|
||||
BUSINESS_PHONE = {site.business_phone!r}
|
||||
BUSINESS_ADDRESS = {site.business_address!r}
|
||||
"""
|
||||
|
||||
def _django_urls_py(self) -> str:
|
||||
return """from django.contrib import admin
|
||||
from django.urls import include, path
|
||||
|
||||
urlpatterns = [
|
||||
path("admin/", admin.site.urls),
|
||||
path("", include("shop.urls")),
|
||||
]
|
||||
"""
|
||||
|
||||
def _django_wsgi_py(self) -> str:
|
||||
return """import os
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "client_demo.settings")
|
||||
application = get_wsgi_application()
|
||||
"""
|
||||
|
||||
def _shop_apps_py(self) -> str:
|
||||
return """from django.apps import AppConfig
|
||||
|
||||
class ShopConfig(AppConfig):
|
||||
default_auto_field = "django.db.models.BigAutoField"
|
||||
name = "shop"
|
||||
"""
|
||||
|
||||
def _shop_models_py(self) -> str:
|
||||
return """from django.db import models
|
||||
|
||||
class Product(models.Model):
|
||||
name = models.CharField(max_length=120)
|
||||
description = models.TextField(blank=True)
|
||||
price = models.DecimalField(max_digits=10, decimal_places=2)
|
||||
is_active = models.BooleanField(default=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
"""
|
||||
|
||||
def _shop_forms_py(self) -> str:
|
||||
return """from django import forms
|
||||
|
||||
class ContactForm(forms.Form):
|
||||
name = forms.CharField(max_length=100)
|
||||
email = forms.EmailField()
|
||||
message = forms.CharField(widget=forms.Textarea(attrs={"rows": 5}))
|
||||
"""
|
||||
|
||||
def _shop_urls_py(self) -> str:
|
||||
return """from django.urls import path
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path("", views.home, name="home"),
|
||||
path("products/", views.products, name="products"),
|
||||
path("cart/add/<int:product_id>/", views.add_to_cart, name="add_to_cart"),
|
||||
path("cart/", views.cart, name="cart"),
|
||||
path("contact/", views.contact, name="contact"),
|
||||
]
|
||||
"""
|
||||
|
||||
def _shop_views_py(self, ai_payload: dict) -> str:
|
||||
headline = ai_payload.get("hero_headline", "Welcome")
|
||||
subheadline = ai_payload.get("hero_subheadline", "")
|
||||
return f"""from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.core.mail import send_mail
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
|
||||
from .forms import ContactForm
|
||||
from .models import Product
|
||||
|
||||
def home(request):
|
||||
return render(request, "shop/home.html", {{
|
||||
"headline": {headline!r},
|
||||
"subheadline": {subheadline!r},
|
||||
}})
|
||||
|
||||
def products(request):
|
||||
return render(request, "shop/products.html", {{"products": Product.objects.filter(is_active=True)}})
|
||||
|
||||
def add_to_cart(request, product_id):
|
||||
product = get_object_or_404(Product, id=product_id, is_active=True)
|
||||
cart_data = request.session.get("cart", {{}})
|
||||
key = str(product.id)
|
||||
cart_data[key] = cart_data.get(key, 0) + 1
|
||||
request.session["cart"] = cart_data
|
||||
messages.success(request, f"Added {{product.name}} to cart.")
|
||||
return redirect("products")
|
||||
|
||||
def cart(request):
|
||||
cart_data = request.session.get("cart", {{}})
|
||||
items = []
|
||||
total = 0
|
||||
for product_id, qty in cart_data.items():
|
||||
product = Product.objects.filter(id=product_id).first()
|
||||
if not product:
|
||||
continue
|
||||
line_total = product.price * qty
|
||||
items.append({{"product": product, "qty": qty, "line_total": line_total}})
|
||||
total += line_total
|
||||
return render(request, "shop/cart.html", {{"items": items, "total": total}})
|
||||
|
||||
def contact(request):
|
||||
if request.method == "POST":
|
||||
form = ContactForm(request.POST)
|
||||
if form.is_valid():
|
||||
subject = f"Contact request for {{settings.BUSINESS_NAME}}"
|
||||
body = (
|
||||
f"Name: {{form.cleaned_data['name']}}\\n"
|
||||
f"Email: {{form.cleaned_data['email']}}\\n\\n"
|
||||
f"Message:\\n{{form.cleaned_data['message']}}"
|
||||
)
|
||||
send_mail(subject, body, settings.DEFAULT_FROM_EMAIL, [settings.DEFAULT_FROM_EMAIL])
|
||||
messages.success(request, "Message sent.")
|
||||
return redirect("contact")
|
||||
else:
|
||||
form = ContactForm()
|
||||
return render(request, "shop/contact.html", {{"form": form}})
|
||||
"""
|
||||
|
||||
def _shop_admin_py(self) -> str:
|
||||
return """from django.contrib import admin
|
||||
from .models import Product
|
||||
|
||||
admin.site.register(Product)
|
||||
"""
|
||||
|
||||
def _shop_base_template(self, site: ClientSite) -> str:
|
||||
return f"""<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{html.escape(site.business_name)} Demo</title>
|
||||
<style>
|
||||
body{{font-family:Arial,sans-serif;margin:0;background:#f5f6fb;color:#1f2937}}
|
||||
nav{{background:#111827;padding:1rem;display:flex;gap:1rem}}
|
||||
nav a{{color:white;text-decoration:none}}
|
||||
.wrap{{max-width:960px;margin:0 auto;padding:2rem 1rem}}
|
||||
.card{{background:white;padding:1rem;border-radius:8px;margin-bottom:1rem}}
|
||||
.btn{{display:inline-block;background:#2563eb;color:white;padding:.5rem .75rem;border-radius:6px;text-decoration:none;border:none}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<a href="/">Home</a>
|
||||
<a href="/products/">Products</a>
|
||||
<a href="/cart/">Cart</a>
|
||||
<a href="/contact/">Contact</a>
|
||||
</nav>
|
||||
<div class="wrap">
|
||||
{{% if messages %}}
|
||||
{{% for message in messages %}}<p class="card">{{{{ message }}}}</p>{{% endfor %}}
|
||||
{{% endif %}}
|
||||
{{% block content %}}{{% endblock %}}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
"""
|
||||
|
||||
def _shop_home_template(self) -> str:
|
||||
return """{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<section class="card">
|
||||
<h1>{{ headline }}</h1>
|
||||
<p>{{ subheadline }}</p>
|
||||
<a class="btn" href="/products/">Shop now</a>
|
||||
</section>
|
||||
{% endblock %}
|
||||
"""
|
||||
|
||||
def _shop_products_template(self) -> str:
|
||||
return """{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<h1>Products</h1>
|
||||
{% for product in products %}
|
||||
<article class="card">
|
||||
<h3>{{ product.name }}</h3>
|
||||
<p>{{ product.description }}</p>
|
||||
<p><strong>${{ product.price }}</strong></p>
|
||||
<a class="btn" href="/cart/add/{{ product.id }}/">Add to cart</a>
|
||||
</article>
|
||||
{% empty %}
|
||||
<p class="card">No products yet. Add from admin panel.</p>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
"""
|
||||
|
||||
def _shop_cart_template(self) -> str:
|
||||
return """{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<h1>Your Cart</h1>
|
||||
{% for item in items %}
|
||||
<div class="card">
|
||||
<strong>{{ item.product.name }}</strong> x {{ item.qty }} = ${{ item.line_total }}
|
||||
</div>
|
||||
{% empty %}
|
||||
<p class="card">Cart empty.</p>
|
||||
{% endfor %}
|
||||
<p><strong>Total: ${{ total }}</strong></p>
|
||||
{% endblock %}
|
||||
"""
|
||||
|
||||
def _shop_contact_template(self) -> str:
|
||||
return """{% extends "base.html" %}
|
||||
{% block content %}
|
||||
<h1>Contact</h1>
|
||||
<form method="post" class="card">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<button class="btn" type="submit">Send message</button>
|
||||
</form>
|
||||
{% endblock %}
|
||||
"""
|
||||
|
||||
def _django_readme(self, project_slug: str) -> str:
|
||||
return f"""# {project_slug}
|
||||
|
||||
Generated Django demo storefront.
|
||||
|
||||
## Run
|
||||
|
||||
1. pip install django
|
||||
2. python manage.py migrate
|
||||
3. python manage.py createsuperuser
|
||||
4. python manage.py runserver
|
||||
|
||||
## Basic static site
|
||||
|
||||
Download the basic HTML package from the builder dashboard for the matching template design.
|
||||
"""
|
||||
139
builder/template_registry.py
Normal file
@@ -0,0 +1,139 @@
|
||||
"""Client site template folders under project templates/template_*."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
CLIENT_TEMPLATES_ROOT = Path(settings.BASE_DIR) / "templates"
|
||||
|
||||
COPY_EXCLUDE_DIR_NAMES = frozenset(
|
||||
{
|
||||
"__MACOSX",
|
||||
"Documentation",
|
||||
"documentation",
|
||||
"node_modules",
|
||||
".git",
|
||||
".next",
|
||||
".gitignore",
|
||||
}
|
||||
)
|
||||
|
||||
# Per-folder config: site path relative to templates/template_N/
|
||||
TEMPLATE_FOLDER_CONFIG: dict[str, dict] = {
|
||||
"template_1": {
|
||||
"name": "NeuralSync",
|
||||
"description": "AI SaaS marketing template with multi-page layout.",
|
||||
"site_path": "Main File/NeuralSync",
|
||||
"kind": "static_html",
|
||||
"supports_basic": True,
|
||||
"supports_django": True,
|
||||
"brand_tokens": ["NeuralSync"],
|
||||
"hero_strings": ["Transform Your Business with AI Powered Solutions"],
|
||||
},
|
||||
"template_2": {
|
||||
"name": "Eventio Conference",
|
||||
"description": "Next.js event and conference site (requires npm to run).",
|
||||
"site_path": "eventio/eventio-HTML",
|
||||
"kind": "nextjs",
|
||||
"supports_basic": True,
|
||||
"supports_django": True,
|
||||
"brand_tokens": ["Eventio", "EVENTIO"],
|
||||
"hero_strings": [
|
||||
"Global Business Conference",
|
||||
"San Francisco, California",
|
||||
],
|
||||
},
|
||||
"template_3": {
|
||||
"name": "Waves Business",
|
||||
"description": "Multi-layout business one-page template pack.",
|
||||
"site_path": "site",
|
||||
"kind": "static_html",
|
||||
"supports_basic": True,
|
||||
"supports_django": True,
|
||||
"brand_tokens": ["Waves", "Welcome to Waves"],
|
||||
"hero_strings": ["Welcome to Waves", "A perfect template for both corporate and creative projects."],
|
||||
},
|
||||
"template_4": {
|
||||
"name": "Multipurpose Business",
|
||||
"description": "Bootstrap business landing template with services and pricing.",
|
||||
"site_path": "site",
|
||||
"kind": "static_html",
|
||||
"supports_basic": True,
|
||||
"supports_django": True,
|
||||
"brand_tokens": ["Business template", "multipurpose business template"],
|
||||
"hero_strings": ["Business template"],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def _auto_detect_site_path(folder: Path) -> str | None:
|
||||
site_dir = folder / "site"
|
||||
if (site_dir / "index.html").exists():
|
||||
return "site"
|
||||
|
||||
candidates: list[tuple[int, str]] = []
|
||||
for index_file in folder.rglob("index.html"):
|
||||
parts_lower = {part.lower() for part in index_file.parts}
|
||||
if "documentation" in parts_lower:
|
||||
continue
|
||||
rel_parent = index_file.parent.relative_to(folder)
|
||||
depth = len(rel_parent.parts)
|
||||
candidates.append((depth, str(rel_parent)))
|
||||
|
||||
if not candidates:
|
||||
return None
|
||||
|
||||
candidates.sort(key=lambda item: (item[0], len(item[1])))
|
||||
return candidates[0][1]
|
||||
|
||||
|
||||
def discover_client_templates() -> list[dict]:
|
||||
definitions: list[dict] = []
|
||||
|
||||
for folder in sorted(CLIENT_TEMPLATES_ROOT.glob("template_*")):
|
||||
if not folder.is_dir():
|
||||
continue
|
||||
|
||||
folder_key = folder.name
|
||||
config = TEMPLATE_FOLDER_CONFIG.get(folder_key, {})
|
||||
site_path = config.get("site_path") or _auto_detect_site_path(folder)
|
||||
if not site_path:
|
||||
continue
|
||||
|
||||
source = CLIENT_TEMPLATES_ROOT / folder_key / site_path
|
||||
if not source.exists():
|
||||
continue
|
||||
|
||||
slug = folder_key.replace("_", "-")
|
||||
definitions.append(
|
||||
{
|
||||
"slug": slug,
|
||||
"name": config.get("name", folder_key.replace("_", " ").title()),
|
||||
"description": config.get(
|
||||
"description",
|
||||
f"Client template from templates/{folder_key}/",
|
||||
),
|
||||
"source_folder": str(Path("templates") / folder_key / site_path),
|
||||
"kind": config.get("kind", "static_html"),
|
||||
"supports_basic": config.get("supports_basic", True),
|
||||
"supports_django": config.get("supports_django", True),
|
||||
"brand_tokens": config.get("brand_tokens", []),
|
||||
"hero_strings": config.get("hero_strings", []),
|
||||
"is_active": True,
|
||||
}
|
||||
)
|
||||
|
||||
return definitions
|
||||
|
||||
|
||||
def get_template_config(slug: str) -> dict | None:
|
||||
for item in discover_client_templates():
|
||||
if item["slug"] == slug:
|
||||
return item
|
||||
return None
|
||||
|
||||
|
||||
def resolve_source_path(source_folder: str) -> Path:
|
||||
return Path(settings.BASE_DIR) / source_folder
|
||||
11
builder/urls.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from django.urls import path
|
||||
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path("", views.dashboard_view, name="dashboard"),
|
||||
path("create/", views.create_site_view, name="create_site"),
|
||||
path("sites/<uuid:site_id>/", views.site_detail_view, name="site_detail"),
|
||||
path("sites/<uuid:site_id>/download/basic/", views.download_basic_site, name="download_basic_site"),
|
||||
path("sites/<uuid:site_id>/download/django/", views.download_django_site, name="download_django_site"),
|
||||
]
|
||||
95
builder/views.py
Normal file
@@ -0,0 +1,95 @@
|
||||
from pathlib import Path
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth import login
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.http import FileResponse, Http404, HttpRequest, HttpResponse
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from .forms import ClientSiteForm, SignUpForm
|
||||
from .models import ClientSite, TemplateOption
|
||||
from .services import SiteGenerator
|
||||
|
||||
|
||||
class HomeView(TemplateView):
|
||||
template_name = "home.html"
|
||||
|
||||
|
||||
def signup_view(request: HttpRequest) -> HttpResponse:
|
||||
if request.user.is_authenticated:
|
||||
return redirect("dashboard")
|
||||
if request.method == "POST":
|
||||
form = SignUpForm(request.POST)
|
||||
if form.is_valid():
|
||||
user = form.save()
|
||||
login(request, user)
|
||||
return redirect("dashboard")
|
||||
else:
|
||||
form = SignUpForm()
|
||||
return render(request, "registration/signup.html", {"form": form})
|
||||
|
||||
|
||||
@login_required
|
||||
def dashboard_view(request: HttpRequest) -> HttpResponse:
|
||||
sites = ClientSite.objects.filter(owner=request.user).select_related("template_option")
|
||||
form = ClientSiteForm()
|
||||
form.fields["template_option"].queryset = TemplateOption.objects.filter(is_active=True)
|
||||
return render(request, "builder/dashboard.html", {"sites": sites, "form": form})
|
||||
|
||||
|
||||
@login_required
|
||||
def create_site_view(request: HttpRequest) -> HttpResponse:
|
||||
if request.method != "POST":
|
||||
return redirect("dashboard")
|
||||
|
||||
form = ClientSiteForm(request.POST)
|
||||
form.fields["template_option"].queryset = TemplateOption.objects.filter(is_active=True)
|
||||
if not form.is_valid():
|
||||
sites = ClientSite.objects.filter(owner=request.user).select_related("template_option")
|
||||
return render(request, "builder/dashboard.html", {"sites": sites, "form": form})
|
||||
|
||||
site = form.save(commit=False)
|
||||
site.owner = request.user
|
||||
site.status = ClientSite.Status.GENERATING
|
||||
site.save()
|
||||
|
||||
generator = SiteGenerator()
|
||||
try:
|
||||
generator.build_all(site)
|
||||
messages.success(request, "Site generated successfully.")
|
||||
except Exception as exc:
|
||||
site.status = ClientSite.Status.FAILED
|
||||
site.last_error = str(exc)
|
||||
site.save(update_fields=["status", "last_error", "updated_at"])
|
||||
messages.error(request, "Generation failed. Check site detail for error info.")
|
||||
|
||||
return redirect("site_detail", site_id=site.id)
|
||||
|
||||
|
||||
@login_required
|
||||
def site_detail_view(request: HttpRequest, site_id) -> HttpResponse:
|
||||
site = get_object_or_404(ClientSite, id=site_id, owner=request.user)
|
||||
return render(request, "builder/site_detail.html", {"site": site})
|
||||
|
||||
|
||||
def _download_site_file(site: ClientSite, relative_path: str) -> FileResponse:
|
||||
if not relative_path:
|
||||
raise Http404("File not generated yet.")
|
||||
full_path = Path(settings.MEDIA_ROOT) / relative_path
|
||||
if not full_path.exists():
|
||||
raise Http404("File missing from storage.")
|
||||
return FileResponse(full_path.open("rb"), as_attachment=True, filename=full_path.name)
|
||||
|
||||
|
||||
@login_required
|
||||
def download_basic_site(request: HttpRequest, site_id) -> FileResponse:
|
||||
site = get_object_or_404(ClientSite, id=site_id, owner=request.user)
|
||||
return _download_site_file(site, site.basic_zip_path)
|
||||
|
||||
|
||||
@login_required
|
||||
def download_django_site(request: HttpRequest, site_id) -> FileResponse:
|
||||
site = get_object_or_404(ClientSite, id=site_id, owner=request.user)
|
||||
return _download_site_file(site, site.django_zip_path)
|
||||
17
docker-compose.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
container_name: demo-sites-builder
|
||||
command: ["bash", "/app/docker/entrypoint.sh"]
|
||||
ports:
|
||||
- "8014:8014"
|
||||
volumes:
|
||||
- .:/app
|
||||
environment:
|
||||
PORT: "8014"
|
||||
DJANGO_DEBUG: "1"
|
||||
DJANGO_SECRET_KEY: "dev-only-secret-key-change-me"
|
||||
OLLAMA_URL: "http://host.docker.internal:11434"
|
||||
OLLAMA_MODEL: "llama3.1"
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
8
docker/entrypoint.sh
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
uv sync --no-dev
|
||||
uv run python manage.py migrate --noinput
|
||||
uv run python manage.py seed_templates
|
||||
PORT="${PORT:-8000}"
|
||||
uv run python manage.py runserver "0.0.0.0:${PORT}"
|
||||
16
manage.py
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env python
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def main() -> None:
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_builder.settings")
|
||||
try:
|
||||
from django.core.management import execute_from_command_line
|
||||
except ImportError as exc:
|
||||
raise ImportError("Django not installed or unavailable.") from exc
|
||||
execute_from_command_line(sys.argv)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
10
pyproject.toml
Normal file
@@ -0,0 +1,10 @@
|
||||
[project]
|
||||
name = "demo-sites-builder"
|
||||
version = "0.1.0"
|
||||
description = "Django dashboard that generates client websites."
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.11"
|
||||
dependencies = [
|
||||
"Django>=5.1,<6.0",
|
||||
"requests>=2.32.0",
|
||||
]
|
||||
1
scripts/create_super_user.sh
Normal file
@@ -0,0 +1 @@
|
||||
sudo docker exec -it demo-sites-builder uv run manage.py createsuperuser
|
||||
1
scripts/run.sh
Normal file
@@ -0,0 +1 @@
|
||||
sudo docker compose up --build
|
||||
1
site_builder/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
7
site_builder/asgi.py
Normal file
@@ -0,0 +1,7 @@
|
||||
import os
|
||||
|
||||
from django.core.asgi import get_asgi_application
|
||||
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_builder.settings")
|
||||
|
||||
application = get_asgi_application()
|
||||
89
site_builder/settings.py
Normal file
@@ -0,0 +1,89 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||
|
||||
SECRET_KEY = os.getenv("DJANGO_SECRET_KEY", "replace-this-in-production")
|
||||
DEBUG = os.getenv("DJANGO_DEBUG", "1") == "1"
|
||||
|
||||
allowed_hosts_raw = os.getenv("DJANGO_ALLOWED_HOSTS", "127.0.0.1,localhost")
|
||||
ALLOWED_HOSTS = [host.strip() for host in allowed_hosts_raw.split(",") if host.strip()]
|
||||
|
||||
INSTALLED_APPS = [
|
||||
"django.contrib.admin",
|
||||
"django.contrib.auth",
|
||||
"django.contrib.contenttypes",
|
||||
"django.contrib.sessions",
|
||||
"django.contrib.messages",
|
||||
"django.contrib.staticfiles",
|
||||
"builder",
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
"django.middleware.security.SecurityMiddleware",
|
||||
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||
"django.middleware.common.CommonMiddleware",
|
||||
"django.middleware.csrf.CsrfViewMiddleware",
|
||||
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
||||
"django.contrib.messages.middleware.MessageMiddleware",
|
||||
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
||||
]
|
||||
|
||||
ROOT_URLCONF = "site_builder.urls"
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
||||
"DIRS": [BASE_DIR / "templates"],
|
||||
"APP_DIRS": True,
|
||||
"OPTIONS": {
|
||||
"context_processors": [
|
||||
"django.template.context_processors.request",
|
||||
"django.contrib.auth.context_processors.auth",
|
||||
"django.contrib.messages.context_processors.messages",
|
||||
],
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
WSGI_APPLICATION = "site_builder.wsgi.application"
|
||||
|
||||
DATABASES = {
|
||||
"default": {
|
||||
"ENGINE": "django.db.backends.sqlite3",
|
||||
"NAME": BASE_DIR / "db.sqlite3",
|
||||
}
|
||||
}
|
||||
|
||||
AUTH_PASSWORD_VALIDATORS = [
|
||||
{"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"},
|
||||
{"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"},
|
||||
{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
|
||||
{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
|
||||
]
|
||||
|
||||
LANGUAGE_CODE = "en-us"
|
||||
TIME_ZONE = "UTC"
|
||||
USE_I18N = True
|
||||
USE_TZ = True
|
||||
|
||||
STATIC_URL = "/static/"
|
||||
STATIC_ROOT = BASE_DIR / "staticfiles"
|
||||
STATICFILES_DIRS = [BASE_DIR / "static"]
|
||||
|
||||
MEDIA_URL = "/media/"
|
||||
MEDIA_ROOT = BASE_DIR / "media"
|
||||
|
||||
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
|
||||
|
||||
LOGIN_REDIRECT_URL = "dashboard"
|
||||
LOGOUT_REDIRECT_URL = "home"
|
||||
|
||||
EMAIL_BACKEND = os.getenv(
|
||||
"DJANGO_EMAIL_BACKEND",
|
||||
"django.core.mail.backends.console.EmailBackend",
|
||||
)
|
||||
DEFAULT_FROM_EMAIL = os.getenv("DJANGO_DEFAULT_FROM_EMAIL", "no-reply@example.com")
|
||||
|
||||
OLLAMA_URL = os.getenv("OLLAMA_URL", "http://127.0.0.1:11434")
|
||||
OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "llama3.1")
|
||||
19
site_builder/urls.py
Normal file
@@ -0,0 +1,19 @@
|
||||
from django.conf import settings
|
||||
from django.conf.urls.static import static
|
||||
from django.contrib import admin
|
||||
from django.contrib.auth import views as auth_views
|
||||
from django.urls import include, path
|
||||
|
||||
from builder import views as builder_views
|
||||
|
||||
urlpatterns = [
|
||||
path("admin/", admin.site.urls),
|
||||
path("", builder_views.HomeView.as_view(), name="home"),
|
||||
path("signup/", builder_views.signup_view, name="signup"),
|
||||
path("login/", auth_views.LoginView.as_view(template_name="registration/login.html"), name="login"),
|
||||
path("logout/", auth_views.LogoutView.as_view(), name="logout"),
|
||||
path("dashboard/", include("builder.urls")),
|
||||
]
|
||||
|
||||
if settings.DEBUG:
|
||||
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||
7
site_builder/wsgi.py
Normal file
@@ -0,0 +1,7 @@
|
||||
import os
|
||||
|
||||
from django.core.wsgi import get_wsgi_application
|
||||
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_builder.settings")
|
||||
|
||||
application = get_wsgi_application()
|
||||
38
site_catalog/templates.json
Normal file
@@ -0,0 +1,38 @@
|
||||
[
|
||||
{
|
||||
"slug": "template-1",
|
||||
"name": "NeuralSync",
|
||||
"description": "AI SaaS marketing template with multi-page layout.",
|
||||
"source_folder": "templates/template_1/Main File/NeuralSync",
|
||||
"supports_basic": true,
|
||||
"supports_django": true,
|
||||
"is_active": true
|
||||
},
|
||||
{
|
||||
"slug": "template-2",
|
||||
"name": "Eventio Conference",
|
||||
"description": "Next.js event and conference site (requires npm to run).",
|
||||
"source_folder": "templates/template_2/eventio/eventio-HTML",
|
||||
"supports_basic": true,
|
||||
"supports_django": true,
|
||||
"is_active": true
|
||||
},
|
||||
{
|
||||
"slug": "template-3",
|
||||
"name": "Waves Business",
|
||||
"description": "Multi-layout business one-page template pack.",
|
||||
"source_folder": "templates/template_3/site",
|
||||
"supports_basic": true,
|
||||
"supports_django": true,
|
||||
"is_active": true
|
||||
},
|
||||
{
|
||||
"slug": "template-4",
|
||||
"name": "Multipurpose Business",
|
||||
"description": "Bootstrap business landing template with services and pricing.",
|
||||
"source_folder": "templates/template_4/site",
|
||||
"supports_basic": true,
|
||||
"supports_django": true,
|
||||
"is_active": true
|
||||
}
|
||||
]
|
||||
4
site_catalog/templates/clean-business/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# Clean Business
|
||||
|
||||
Template metadata and static assets live here.
|
||||
Use this folder to store future custom HTML blocks, screenshots, and style tokens.
|
||||
4
site_catalog/templates/modern-agency/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# Modern Agency
|
||||
|
||||
Template metadata and static assets live here.
|
||||
Use this folder to store future custom HTML blocks, screenshots, and style tokens.
|
||||
65
static/styles/main.css
Normal file
@@ -0,0 +1,65 @@
|
||||
* { box-sizing: border-box; }
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Inter, Arial, sans-serif;
|
||||
background: #f3f4f8;
|
||||
color: #111827;
|
||||
}
|
||||
a { color: inherit; }
|
||||
.container { max-width: 1100px; margin: 0 auto; padding: 1rem; }
|
||||
.topbar { background: #0f172a; color: #fff; }
|
||||
.brand { font-weight: 700; text-decoration: none; color: #fff; }
|
||||
.row { display: flex; align-items: center; }
|
||||
.between { justify-content: space-between; }
|
||||
.gap { gap: .75rem; }
|
||||
.button {
|
||||
display: inline-block;
|
||||
background: #2563eb;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
border: none;
|
||||
border-radius: .5rem;
|
||||
padding: .6rem .9rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
.button.muted { background: #334155; }
|
||||
.button.small { padding: .4rem .7rem; font-size: .85rem; }
|
||||
.card {
|
||||
background: #fff;
|
||||
border-radius: .75rem;
|
||||
padding: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, .08);
|
||||
}
|
||||
.danger { border-left: 4px solid #b91c1c; }
|
||||
.hero { padding: 2rem; }
|
||||
.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 1rem; margin-top: 1rem; }
|
||||
.split { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
|
||||
.flash {
|
||||
background: #dbeafe;
|
||||
border: 1px solid #93c5fd;
|
||||
color: #1e3a8a;
|
||||
padding: .75rem;
|
||||
border-radius: .5rem;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
.list { list-style: none; margin: 0; padding: 0; }
|
||||
.list-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: .75rem 0;
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
}
|
||||
.form-card form p { margin-bottom: .8rem; }
|
||||
.hint { color: #64748b; font-size: .9rem; }
|
||||
.hint code { background: #e2e8f0; padding: .1rem .35rem; border-radius: .25rem; }
|
||||
input, select, textarea {
|
||||
width: 100%;
|
||||
padding: .55rem;
|
||||
border: 1px solid #cbd5e1;
|
||||
border-radius: .4rem;
|
||||
}
|
||||
@media (max-width: 900px) {
|
||||
.split { grid-template-columns: 1fr; }
|
||||
}
|
||||
33
templates/base.html
Normal file
@@ -0,0 +1,33 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{% block title %}Demo Sites Builder{% endblock %}</title>
|
||||
<link rel="stylesheet" href="/static/styles/main.css">
|
||||
</head>
|
||||
<body>
|
||||
<header class="topbar">
|
||||
<div class="container row between">
|
||||
<a href="/" class="brand">DemoSites AI</a>
|
||||
<nav class="row gap">
|
||||
{% if user.is_authenticated %}
|
||||
<a href="/dashboard/">Dashboard</a>
|
||||
<a href="/logout/">Logout</a>
|
||||
{% else %}
|
||||
<a href="/login/">Login</a>
|
||||
<a href="/signup/">Sign up</a>
|
||||
{% endif %}
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<main class="container">
|
||||
{% if messages %}
|
||||
{% for message in messages %}
|
||||
<div class="flash">{{ message }}</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
33
templates/builder/dashboard.html
Normal file
@@ -0,0 +1,33 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Dashboard{% endblock %}
|
||||
{% block content %}
|
||||
<div class="split">
|
||||
<section class="card">
|
||||
<h2>Create site</h2>
|
||||
<form method="post" action="/dashboard/create/">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<p class="hint">Templates are loaded from <code>templates/template_1</code> … <code>template_4</code>.</p>
|
||||
<button class="button" type="submit">Generate site</button>
|
||||
</form>
|
||||
</section>
|
||||
<section class="card">
|
||||
<h2>Your generated sites</h2>
|
||||
{% if sites %}
|
||||
<ul class="list">
|
||||
{% for site in sites %}
|
||||
<li class="list-item">
|
||||
<div>
|
||||
<strong>{{ site.business_name }}</strong>
|
||||
<p>{{ site.template_option.name }} | {{ site.status }}</p>
|
||||
</div>
|
||||
<a class="button small" href="/dashboard/sites/{{ site.id }}/">View</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p>No sites generated yet.</p>
|
||||
{% endif %}
|
||||
</section>
|
||||
</div>
|
||||
{% endblock %}
|
||||
47
templates/builder/site_detail.html
Normal file
@@ -0,0 +1,47 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}{{ site.business_name }}{% endblock %}
|
||||
{% block content %}
|
||||
<section class="card">
|
||||
<h1>{{ site.business_name }}</h1>
|
||||
<p>Status: <strong>{{ site.status }}</strong></p>
|
||||
<p>Template: {{ site.template_option.name }}</p>
|
||||
{% if site.template_option.description %}
|
||||
<p>{{ site.template_option.description }}</p>
|
||||
{% endif %}
|
||||
<p class="hint">Source: <code>{{ site.template_option.source_folder }}</code></p>
|
||||
<p>Address: {{ site.business_address }}</p>
|
||||
<p>Phone: {{ site.business_phone }}</p>
|
||||
{% if site.old_website %}
|
||||
<p>Old website: <a href="{{ site.old_website }}" target="_blank" rel="noreferrer">{{ site.old_website }}</a></p>
|
||||
{% endif %}
|
||||
</section>
|
||||
|
||||
<section class="card">
|
||||
<h2>Downloads</h2>
|
||||
{% if site.basic_zip_path %}
|
||||
<a class="button" href="/dashboard/sites/{{ site.id }}/download/basic/">Download basic HTML site</a>
|
||||
{% else %}
|
||||
<p>Basic site not ready yet.</p>
|
||||
{% endif %}
|
||||
{% if site.django_zip_path %}
|
||||
<a class="button muted" href="/dashboard/sites/{{ site.id }}/download/django/">Download Django demo site</a>
|
||||
{% else %}
|
||||
<p>Django demo not ready yet.</p>
|
||||
{% endif %}
|
||||
</section>
|
||||
|
||||
{% if site.ai_payload %}
|
||||
<section class="card">
|
||||
<h2>AI content preview</h2>
|
||||
<p><strong>{{ site.ai_payload.hero_headline }}</strong></p>
|
||||
<p>{{ site.ai_payload.hero_subheadline }}</p>
|
||||
</section>
|
||||
{% endif %}
|
||||
|
||||
{% if site.last_error %}
|
||||
<section class="card danger">
|
||||
<h2>Generation error</h2>
|
||||
<pre>{{ site.last_error }}</pre>
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
34
templates/home.html
Normal file
@@ -0,0 +1,34 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Build websites fast{% endblock %}
|
||||
{% block content %}
|
||||
<section class="hero card">
|
||||
<h1>Generate client websites in minutes</h1>
|
||||
<p>
|
||||
Build static demo sites and full Django ecommerce demos from one dashboard.
|
||||
Bring your own business details and let local Ollama produce polished copy.
|
||||
</p>
|
||||
<div class="row gap">
|
||||
{% if user.is_authenticated %}
|
||||
<a class="button" href="/dashboard/">Open dashboard</a>
|
||||
{% else %}
|
||||
<a class="button" href="/signup/">Create account</a>
|
||||
<a class="button muted" href="/login/">Login</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="grid">
|
||||
<article class="card">
|
||||
<h3>Two output flavors</h3>
|
||||
<p>Static HTML package and Django demo storefront.</p>
|
||||
</article>
|
||||
<article class="card">
|
||||
<h3>Template catalog</h3>
|
||||
<p>Pick from your own design template folders.</p>
|
||||
</article>
|
||||
<article class="card">
|
||||
<h3>Local AI integration</h3>
|
||||
<p>Uses Ollama endpoint for on-device content generation.</p>
|
||||
</article>
|
||||
</section>
|
||||
{% endblock %}
|
||||
12
templates/registration/login.html
Normal file
@@ -0,0 +1,12 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Login{% endblock %}
|
||||
{% block content %}
|
||||
<section class="card form-card">
|
||||
<h1>Login</h1>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<button class="button" type="submit">Login</button>
|
||||
</form>
|
||||
</section>
|
||||
{% endblock %}
|
||||
12
templates/registration/signup.html
Normal file
@@ -0,0 +1,12 @@
|
||||
{% extends "base.html" %}
|
||||
{% block title %}Sign up{% endblock %}
|
||||
{% block content %}
|
||||
<section class="card form-card">
|
||||
<h1>Create account</h1>
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<button class="button" type="submit">Sign up</button>
|
||||
</form>
|
||||
</section>
|
||||
{% endblock %}
|
||||
BIN
templates/template_1/5d4a639923617dc12dec0185fc0fde46.zip
Normal file
1109
templates/template_1/Main File/Documentation/assets/css/bootstrap-responsive.css
vendored
Normal file
6167
templates/template_1/Main File/Documentation/assets/css/bootstrap.css
vendored
Normal file
@@ -0,0 +1,170 @@
|
||||
/*!
|
||||
* Documenter 2.0
|
||||
* http://rxa.li/documenter
|
||||
*
|
||||
* Copyright 2013, Xaver Birsak
|
||||
* http://revaxarts.com
|
||||
*
|
||||
*/
|
||||
html, body{max-width:100%;}
|
||||
body{ padding-bottom: 40px;}
|
||||
|
||||
#documenter_content{
|
||||
padding-top: 200px;
|
||||
}
|
||||
#documenter-cover{
|
||||
min-height: 600px;
|
||||
}
|
||||
|
||||
.masthead h1{
|
||||
margin-top: 48px;
|
||||
}
|
||||
|
||||
section h3,
|
||||
section h4,
|
||||
section h5,
|
||||
section h6 {
|
||||
padding: 0;
|
||||
clear: both;
|
||||
line-height: 1.2em;
|
||||
margin-top: 2em;
|
||||
}
|
||||
section h3{ font-size:2em;}
|
||||
section h4{ font-size:1.5em;}
|
||||
section h5{ font-size:1.3em;}
|
||||
section h6{ font-size:1.1em;}
|
||||
|
||||
section table{
|
||||
border-top:1px solid;
|
||||
margin: 18px 0 18px;
|
||||
}
|
||||
section table td, section table th{
|
||||
border-bottom:1px solid;
|
||||
text-align:left;
|
||||
padding: 10px 10px 10px 3px;
|
||||
}
|
||||
section table th{
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
hr.notop{
|
||||
margin-top:3px;
|
||||
}
|
||||
|
||||
.img-area {max-width: 100%; border: 1px solid #ddd; padding: 10px; margin: 30px 0;}
|
||||
|
||||
footer{
|
||||
padding-bottom:500px;
|
||||
}
|
||||
.container{
|
||||
padding-bottom:3px;
|
||||
position: relative;
|
||||
}
|
||||
.navbar a.brand{
|
||||
display:inline-block;
|
||||
width:200px;
|
||||
background-position:center left;
|
||||
background-repeat:no-repeat;
|
||||
background-size: contain;
|
||||
text-indent:-9999px;
|
||||
margin:0;
|
||||
padding:0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.page-header{
|
||||
border:0;
|
||||
}
|
||||
.navbar .nav {
|
||||
margin: 10px 10px 0 200px;
|
||||
float: none;
|
||||
}
|
||||
.navbar .nav li a{
|
||||
border-radius:3px;
|
||||
display:block;
|
||||
white-space:nowrap;
|
||||
padding:6px 11px 7px;
|
||||
text-overflow:ellipsis;
|
||||
text-decoration:none;
|
||||
margin-left: 3px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
.navbar .nav li ul{
|
||||
border-radius:5px;
|
||||
display:none;
|
||||
position:absolute;
|
||||
list-style-type:none;
|
||||
min-width:100px;
|
||||
padding:3px;
|
||||
box-shadow:0 0 3px rgba(0,0,0,0.3);
|
||||
|
||||
}
|
||||
.navbar .nav > li:hover ul{
|
||||
display:block;
|
||||
}
|
||||
|
||||
.marketing-byline {
|
||||
list-style:none;
|
||||
margin-left: 0;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
.marketing-byline li{
|
||||
display:inline;
|
||||
padding:0 2px;
|
||||
}
|
||||
.download-info{
|
||||
clear:both;
|
||||
text-align: center;
|
||||
}
|
||||
#intro{margin-top: 40px;
|
||||
text-align: center;}
|
||||
|
||||
section{
|
||||
margin-top:300px;
|
||||
}
|
||||
img{
|
||||
height:auto !important;
|
||||
}
|
||||
iframe{
|
||||
max-width:100% !important;
|
||||
}
|
||||
|
||||
@media (max-width: 979px) {
|
||||
#documenter_content{
|
||||
padding-top: 0px;
|
||||
}
|
||||
.navbar .nav {
|
||||
margin: 10px 10px 0 0;
|
||||
}
|
||||
.navbar .nav > li > a{
|
||||
padding:6px 11px 7px;
|
||||
max-width:100%;
|
||||
overflow:hidden;
|
||||
text-overflow:ellipsis;
|
||||
}
|
||||
.navbar .nav li ul{
|
||||
display:none;
|
||||
box-shadow:none;
|
||||
position:static;
|
||||
}
|
||||
.navbar .nav li:hover ul{
|
||||
display:block;
|
||||
}
|
||||
.navbar .nav li ul li{
|
||||
display:block;
|
||||
}
|
||||
.navbar .nav li a{
|
||||
max-width:100%;
|
||||
}
|
||||
|
||||
section{
|
||||
margin-top:80px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 480px) {
|
||||
section{
|
||||
margin-top:30px;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 316 B |
|
After Width: | Height: | Size: 305 B |
|
After Width: | Height: | Size: 213 B |
|
After Width: | Height: | Size: 345 B |
|
After Width: | Height: | Size: 117 B |
|
After Width: | Height: | Size: 172 B |
|
After Width: | Height: | Size: 301 B |
|
After Width: | Height: | Size: 292 B |
106
templates/template_1/Main File/Documentation/assets/js/README.md
Normal file
@@ -0,0 +1,106 @@
|
||||
## 2.0 BOOTSTRAP JS PHILOSOPHY
|
||||
These are the high-level design rules which guide the development of Bootstrap's plugin apis.
|
||||
|
||||
---
|
||||
|
||||
### DATA-ATTRIBUTE API
|
||||
|
||||
We believe you should be able to use all plugins provided by Bootstrap purely through the markup API without writing a single line of javascript.
|
||||
|
||||
We acknowledge that this isn't always the most performant and sometimes it may be desirable to turn this functionality off altogether. Therefore, as of 2.0 we provide the ability to disable the data attribute API by unbinding all events on the body namespaced with `'data-api'`. This looks like this:
|
||||
|
||||
$('body').off('.data-api')
|
||||
|
||||
To target a specific plugin, just include the plugins name as a namespace along with the data-api namespace like this:
|
||||
|
||||
$('body').off('.alert.data-api')
|
||||
|
||||
---
|
||||
|
||||
### PROGRAMATIC API
|
||||
|
||||
We also believe you should be able to use all plugins provided by Bootstrap purely through the JS API.
|
||||
|
||||
All public APIs should be single, chainable methods, and return the collection acted upon.
|
||||
|
||||
$(".btn.danger").button("toggle").addClass("fat")
|
||||
|
||||
All methods should accept an optional options object, a string which targets a particular method, or null which initiates the default behavior:
|
||||
|
||||
$("#myModal").modal() // initialized with defaults
|
||||
$("#myModal").modal({ keyboard: false }) // initialized with now keyboard
|
||||
$("#myModal").modal('show') // initializes and invokes show immediately afterqwe2
|
||||
|
||||
---
|
||||
|
||||
### OPTIONS
|
||||
|
||||
Options should be sparse and add universal value. We should pick the right defaults.
|
||||
|
||||
All plugins should have a default object which can be modified to effect all instance's default options. The defaults object should be available via `$.fn.plugin.defaults`.
|
||||
|
||||
$.fn.modal.defaults = { … }
|
||||
|
||||
An options definition should take the following form:
|
||||
|
||||
*noun*: *adjective* - describes or modifies a quality of an instance
|
||||
|
||||
examples:
|
||||
|
||||
backdrop: true
|
||||
keyboard: false
|
||||
placement: 'top'
|
||||
|
||||
---
|
||||
|
||||
### EVENTS
|
||||
|
||||
All events should have an infinitive and past participle form. The infinitive is fired just before an action takes place, the past participle on completion of the action.
|
||||
|
||||
show | shown
|
||||
hide | hidden
|
||||
|
||||
---
|
||||
|
||||
### CONSTRUCTORS
|
||||
|
||||
Each plugin should expose it's raw constructor on a `Constructor` property -- accessed in the following way:
|
||||
|
||||
|
||||
$.fn.popover.Constructor
|
||||
|
||||
---
|
||||
|
||||
### DATA ACCESSOR
|
||||
|
||||
Each plugin stores a copy of the invoked class on an object. This class instance can be accessed directly through jQuery's data API like this:
|
||||
|
||||
$('[rel=popover]').data('popover') instanceof $.fn.popover.Constructor
|
||||
|
||||
---
|
||||
|
||||
### DATA ATTRIBUTES
|
||||
|
||||
Data attributes should take the following form:
|
||||
|
||||
- data-{{verb}}={{plugin}} - defines main interaction
|
||||
- data-target || href^=# - defined on "control" element (if element controls an element other than self)
|
||||
- data-{{noun}} - defines class instance options
|
||||
|
||||
examples:
|
||||
|
||||
// control other targets
|
||||
data-toggle="modal" data-target="#foo"
|
||||
data-toggle="collapse" data-target="#foo" data-parent="#bar"
|
||||
|
||||
// defined on element they control
|
||||
data-spy="scroll"
|
||||
|
||||
data-dismiss="modal"
|
||||
data-dismiss="alert"
|
||||
|
||||
data-toggle="dropdown"
|
||||
|
||||
data-toggle="button"
|
||||
data-toggle="buttons-checkbox"
|
||||
data-toggle="buttons-radio"
|
||||
6
templates/template_1/Main File/Documentation/assets/js/bootstrap-min.js
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
.com { color: #93a1a1; }
|
||||
.lit { color: #195f91; }
|
||||
.pun, .opn, .clo { color: #93a1a1; }
|
||||
.fun { color: #dc322f; }
|
||||
.str, .atv { color: #D14; }
|
||||
.kwd, .linenums .tag { color: #1e347b; }
|
||||
.typ, .atn, .dec, .var { color: teal; }
|
||||
.pln { color: #48484c; }
|
||||
|
||||
.prettyprint {
|
||||
padding: 8px;
|
||||
background-color: #f7f7f9;
|
||||
border: 1px solid #e1e1e8;
|
||||
}
|
||||
.prettyprint.linenums {
|
||||
-webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
|
||||
-moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
|
||||
box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
|
||||
}
|
||||
|
||||
/* Specify class=linenums on a pre to get line numbering */
|
||||
ol.linenums {
|
||||
margin: 0 0 0 33px; /* IE indents via margin-left */
|
||||
}
|
||||
ol.linenums li {
|
||||
padding-left: 12px;
|
||||
color: #bebec5;
|
||||
line-height: 18px;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
|
||||
(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
|
||||
[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
|
||||
f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
|
||||
(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
|
||||
{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
|
||||
t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
|
||||
"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
|
||||
l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
|
||||
q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
|
||||
q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
|
||||
"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
|
||||
a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
|
||||
for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
|
||||
m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
|
||||
a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
|
||||
j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
|
||||
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
|
||||
H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
|
||||
J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
|
||||
I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
|
||||
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
|
||||
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
|
||||
["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
|
||||
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
|
||||
!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
|
||||
250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
|
||||
PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();
|
||||
@@ -0,0 +1,205 @@
|
||||
/*
|
||||
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
|
||||
*
|
||||
* Uses the built in easing capabilities added In jQuery 1.1
|
||||
* to offer multiple easing options
|
||||
*
|
||||
* TERMS OF USE - jQuery Easing
|
||||
*
|
||||
* Open source under the BSD License.
|
||||
*
|
||||
* Copyright © 2008 George McGinley Smith
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||
* or promote products derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
|
||||
// t: current time, b: begInnIng value, c: change In value, d: duration
|
||||
jQuery.easing['jswing'] = jQuery.easing['swing'];
|
||||
|
||||
jQuery.extend( jQuery.easing,
|
||||
{
|
||||
def: 'easeOutQuad',
|
||||
swing: function (x, t, b, c, d) {
|
||||
//alert(jQuery.easing.default);
|
||||
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
|
||||
},
|
||||
easeInQuad: function (x, t, b, c, d) {
|
||||
return c*(t/=d)*t + b;
|
||||
},
|
||||
easeOutQuad: function (x, t, b, c, d) {
|
||||
return -c *(t/=d)*(t-2) + b;
|
||||
},
|
||||
easeInOutQuad: function (x, t, b, c, d) {
|
||||
if ((t/=d/2) < 1) return c/2*t*t + b;
|
||||
return -c/2 * ((--t)*(t-2) - 1) + b;
|
||||
},
|
||||
easeInCubic: function (x, t, b, c, d) {
|
||||
return c*(t/=d)*t*t + b;
|
||||
},
|
||||
easeOutCubic: function (x, t, b, c, d) {
|
||||
return c*((t=t/d-1)*t*t + 1) + b;
|
||||
},
|
||||
easeInOutCubic: function (x, t, b, c, d) {
|
||||
if ((t/=d/2) < 1) return c/2*t*t*t + b;
|
||||
return c/2*((t-=2)*t*t + 2) + b;
|
||||
},
|
||||
easeInQuart: function (x, t, b, c, d) {
|
||||
return c*(t/=d)*t*t*t + b;
|
||||
},
|
||||
easeOutQuart: function (x, t, b, c, d) {
|
||||
return -c * ((t=t/d-1)*t*t*t - 1) + b;
|
||||
},
|
||||
easeInOutQuart: function (x, t, b, c, d) {
|
||||
if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
|
||||
return -c/2 * ((t-=2)*t*t*t - 2) + b;
|
||||
},
|
||||
easeInQuint: function (x, t, b, c, d) {
|
||||
return c*(t/=d)*t*t*t*t + b;
|
||||
},
|
||||
easeOutQuint: function (x, t, b, c, d) {
|
||||
return c*((t=t/d-1)*t*t*t*t + 1) + b;
|
||||
},
|
||||
easeInOutQuint: function (x, t, b, c, d) {
|
||||
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
|
||||
return c/2*((t-=2)*t*t*t*t + 2) + b;
|
||||
},
|
||||
easeInSine: function (x, t, b, c, d) {
|
||||
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
|
||||
},
|
||||
easeOutSine: function (x, t, b, c, d) {
|
||||
return c * Math.sin(t/d * (Math.PI/2)) + b;
|
||||
},
|
||||
easeInOutSine: function (x, t, b, c, d) {
|
||||
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
|
||||
},
|
||||
easeInExpo: function (x, t, b, c, d) {
|
||||
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
|
||||
},
|
||||
easeOutExpo: function (x, t, b, c, d) {
|
||||
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
|
||||
},
|
||||
easeInOutExpo: function (x, t, b, c, d) {
|
||||
if (t==0) return b;
|
||||
if (t==d) return b+c;
|
||||
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
|
||||
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
|
||||
},
|
||||
easeInCirc: function (x, t, b, c, d) {
|
||||
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
|
||||
},
|
||||
easeOutCirc: function (x, t, b, c, d) {
|
||||
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
|
||||
},
|
||||
easeInOutCirc: function (x, t, b, c, d) {
|
||||
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
|
||||
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
|
||||
},
|
||||
easeInElastic: function (x, t, b, c, d) {
|
||||
var s=1.70158;var p=0;var a=c;
|
||||
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
|
||||
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
|
||||
},
|
||||
easeOutElastic: function (x, t, b, c, d) {
|
||||
var s=1.70158;var p=0;var a=c;
|
||||
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
|
||||
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
|
||||
},
|
||||
easeInOutElastic: function (x, t, b, c, d) {
|
||||
var s=1.70158;var p=0;var a=c;
|
||||
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
|
||||
if (a < Math.abs(c)) { a=c; var s=p/4; }
|
||||
else var s = p/(2*Math.PI) * Math.asin (c/a);
|
||||
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
|
||||
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
|
||||
},
|
||||
easeInBack: function (x, t, b, c, d, s) {
|
||||
if (s == undefined) s = 1.70158;
|
||||
return c*(t/=d)*t*((s+1)*t - s) + b;
|
||||
},
|
||||
easeOutBack: function (x, t, b, c, d, s) {
|
||||
if (s == undefined) s = 1.70158;
|
||||
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
|
||||
},
|
||||
easeInOutBack: function (x, t, b, c, d, s) {
|
||||
if (s == undefined) s = 1.70158;
|
||||
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
|
||||
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
|
||||
},
|
||||
easeInBounce: function (x, t, b, c, d) {
|
||||
return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
|
||||
},
|
||||
easeOutBounce: function (x, t, b, c, d) {
|
||||
if ((t/=d) < (1/2.75)) {
|
||||
return c*(7.5625*t*t) + b;
|
||||
} else if (t < (2/2.75)) {
|
||||
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
|
||||
} else if (t < (2.5/2.75)) {
|
||||
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
|
||||
} else {
|
||||
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
|
||||
}
|
||||
},
|
||||
easeInOutBounce: function (x, t, b, c, d) {
|
||||
if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
|
||||
return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
*
|
||||
* TERMS OF USE - EASING EQUATIONS
|
||||
*
|
||||
* Open source under the BSD License.
|
||||
*
|
||||
* Copyright © 2001 Robert Penner
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* Neither the name of the author nor the names of contributors may be used to endorse
|
||||
* or promote products derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
9252
templates/template_1/Main File/Documentation/assets/js/jquery.js
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
/**
|
||||
* jQuery.ScrollTo - Easy element scrolling using jQuery.
|
||||
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
||||
* Dual licensed under MIT and GPL.
|
||||
* Date: 5/25/2009
|
||||
* @author Ariel Flesler
|
||||
* @version 1.4.2
|
||||
*
|
||||
* http://flesler.blogspot.co.at/2009/05/jqueryscrollto-142-released.html
|
||||
*/
|
||||
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
|
||||
@@ -0,0 +1,86 @@
|
||||
/*!
|
||||
* Documenter 2.0
|
||||
* http://rxa.li/documenter
|
||||
*
|
||||
* Copyright 2013, Xaver Birsak
|
||||
* http://revaxarts.com
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
!function ($) {
|
||||
$(function(){
|
||||
|
||||
var hash = location.hash || null,
|
||||
win = $(window),
|
||||
scrolloffset = $('div.navbar').height()+40,
|
||||
iDeviceNotOS4 = (navigator.userAgent.match(/iphone|ipod|ipad/i) && !navigator.userAgent.match(/OS 5/i)) || false,
|
||||
badIE = $('html').prop('class').match(/ie(6|7|8)/)|| false;
|
||||
|
||||
duration = parseInt(duration,10);
|
||||
|
||||
$('.dropdown-toggle').dropdown();
|
||||
|
||||
$(".collapse").collapse();
|
||||
|
||||
$(window).one('scroll', function(){
|
||||
$('.navbar').scrollspy();
|
||||
$('.nav').find('li.active').removeClass('active');
|
||||
});
|
||||
|
||||
|
||||
//handle external links (new window)
|
||||
$('a[href^=http]').bind('click',function(){
|
||||
window.open($(this).attr('href'));
|
||||
return false;
|
||||
});
|
||||
|
||||
//IE 8 and lower doesn't like the smooth pagescroll
|
||||
if(!badIE){
|
||||
window.scroll(0,0);
|
||||
|
||||
$('a[href^=#]').bind('click touchstart',function(){
|
||||
hash = $(this).attr('href');
|
||||
$.scrollTo.window().queue([]).stop();
|
||||
goTo(hash, true);
|
||||
return false;
|
||||
});
|
||||
|
||||
//if a hash is set => go to it
|
||||
if(hash){
|
||||
setTimeout(function(){
|
||||
goTo(hash);
|
||||
},500);
|
||||
}
|
||||
}
|
||||
|
||||
$('.brand').on('click', function(){
|
||||
goTo('#container', false);
|
||||
});
|
||||
|
||||
//the function is called when the hash changes
|
||||
function hashchange(){
|
||||
goTo(location.hash, false);
|
||||
}
|
||||
|
||||
//scroll to a section and set the hash
|
||||
function goTo(hash,changehash){
|
||||
win.unbind('hashchange', hashchange);
|
||||
hash = hash.replace(/!\//,'');
|
||||
win.stop().scrollTo(hash,duration,{
|
||||
offset:-scrolloffset,
|
||||
easing:easing,
|
||||
axis:'y'
|
||||
});
|
||||
if(changehash !== false){
|
||||
var l = location;
|
||||
location.href = (l.protocol+'//'+l.host+l.pathname+'#!/'+hash.substr(1));
|
||||
location.hash = hash.substr(1);
|
||||
}
|
||||
win.bind('hashchange', hashchange);
|
||||
}
|
||||
|
||||
// make code pretty
|
||||
window.prettyPrint && prettyPrint();
|
||||
})
|
||||
}(window.jQuery)
|
||||
289
templates/template_1/Main File/Documentation/index.html
Normal file
@@ -0,0 +1,289 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href="assets/css/bootstrap.css" rel="stylesheet">
|
||||
<link href="assets/js/google-code-prettify/prettify.cs" rel="stylesheet">
|
||||
<link href="assets/css/bootstrap-responsive.css" rel="stylesheet">
|
||||
<link href="assets/css/documenter_style.css" rel="stylesheet">
|
||||
|
||||
<style>
|
||||
|
||||
html, body {
|
||||
background-color: #FFFFFF;
|
||||
color: #383838;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: #383838;
|
||||
}
|
||||
section table {
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
::-moz-selection {
|
||||
background:#444444;
|
||||
color:#DDDDDD;
|
||||
}
|
||||
::selection {
|
||||
background: #444444;
|
||||
color: #DDDDDD;
|
||||
}
|
||||
a.brand {
|
||||
background-image: url(assets/images/image_1.png);
|
||||
}
|
||||
a, a:hover, a:active {
|
||||
color: #0000FF;
|
||||
}
|
||||
hr {
|
||||
border-top: 1px solid #EBEBEB;
|
||||
border-bottom: 1px solid #FFFFFF;
|
||||
}
|
||||
div.navbar-inner, .navbar .nav li ul {
|
||||
background: #DDDDDD;
|
||||
color: #222222;
|
||||
}
|
||||
a.btn-navbar {
|
||||
background: #DDDDDD;
|
||||
color: #222222;
|
||||
}
|
||||
.navbar .nav li a {
|
||||
color: #222222;
|
||||
text-shadow: 1px 1px 0px #EEEEEE;
|
||||
}
|
||||
.navbar .nav li a:hover, .navbar .nav li.active a {
|
||||
text-shadow: none;
|
||||
}
|
||||
div.navbar-inner ul {
|
||||
}
|
||||
.navbar .nav > li a {
|
||||
color: #444444;
|
||||
}
|
||||
.navbar .nav > li a:hover, a.btn-navbar:hover {
|
||||
background: #444444;
|
||||
color: #DDDDDD;
|
||||
}
|
||||
.navbar .nav .active > a, .navbar .nav .active > a:hover, a.btn-navbar:active {
|
||||
background-color: #444444;
|
||||
color: #DDDDDD;
|
||||
}
|
||||
.navbar .nav li ul li a:hover {
|
||||
background: #444444;
|
||||
color: #DDDDDD;
|
||||
}
|
||||
.navbar .nav li ul li a:active {
|
||||
background: #444444;
|
||||
color: #DDDDDD;
|
||||
}
|
||||
.btn-primary {
|
||||
background-image: -moz-linear-gradient(top, #0088CC, #0044CC);
|
||||
background-image: -ms-linear-gradient(top, #0088CC, #0044CC);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 #0088CC, from(#DDDDDD), to(#0044CC));
|
||||
background-image: -webkit-linear-gradient(top, #0088CC, #0044CC);
|
||||
background-image: -o-linear-gradient(top, #0088CC, #0044CC);
|
||||
background-image: linear-gradient(to top, #0088CC, #0044CC);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088CC', endColorstr='#0044CC', GradientType=0);
|
||||
border-color: #0044CC #0044CC #bfbfbf;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
.btn-primary:hover, .btn-primary:active, .btn-primary.active, .btn-primary.disabled, .btn-primary[disabled] {
|
||||
background-color: #0044CC;
|
||||
}
|
||||
#documenter_copyright {
|
||||
display: block !important;
|
||||
visibility: visible !important;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="documenter-project-jhilik-" data-spy="scroll" id="top">
|
||||
|
||||
<!-- Documentation Navbar -->
|
||||
<div class="navbar navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container"> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <a class="brand" href="#">Basur</a>
|
||||
<div class="nav-collapse">
|
||||
<ul class="nav">
|
||||
<li><a href="#theme_installation" title="Theme Installation">Template Installation</a></li>
|
||||
<li><a href="#reading_setting" title="Reading Setting">Pages</a></li>
|
||||
<li><a href="#fonts" title="Fonts">Fonts</a></li>
|
||||
<li><a href="#themes_options" title="Themes Options">Source File(CSS)</a></li>
|
||||
<li><a href="#themes_options1" title="Themes Options1">Source File(JS)</a></li>
|
||||
<li><a href="#themes_options3" title="Themes Options">Customization</a></li>
|
||||
<li><a href="#thanks" title="Thanks">Thanks</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End of Navbar -->
|
||||
|
||||
<!-- Main Container Beginning -->
|
||||
<div class="container" id="documenter_content">
|
||||
|
||||
<div id="documenter-cover">
|
||||
<div class="masthead">
|
||||
<h1 style="text-align: center">NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</h1>
|
||||
<p style="text-align: center">Created: 23 Feb, 2026</p>
|
||||
<p class="download-info"> <a href="https://www.templatemonster.com/authors/themesbazer/" class="btn btn-large">24/7 Support: Send Us a message from our profile</a> </p>
|
||||
</div>
|
||||
<!-- masthead -->
|
||||
|
||||
<div id="intro">
|
||||
<p class="highlight hero-unit">Thank you for purchasing my theme. If you have any questions that are beyond the scope of this help file, please feel free to open a new ticket at our <a href="https://www.templatemonster.com/authors/themesbazer/">support forum</a></p>
|
||||
</div>
|
||||
<!-- intro -->
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<section id="theme_installation">
|
||||
<div class="page-header">
|
||||
<h3>Template Installation</h3>
|
||||
<hr class="notop">
|
||||
</div>
|
||||
|
||||
<p>
|
||||
You can do it easy ways:
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
<h5>FTP Upload:</h5>
|
||||
<ul>
|
||||
<li>Open up your FTP manager and connect to your hosting</li>
|
||||
<li>Browse to required directory (Normally public_html).</li>
|
||||
<li>Upload the files inside <strong>NeuralSync</strong> folder.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
</section>
|
||||
<section id="reading_setting">
|
||||
<div class="page-header">
|
||||
<h3>Pages</h3>
|
||||
<hr class="notop">
|
||||
<ol>
|
||||
<ul>
|
||||
<li>index.html is for Home version One</li>
|
||||
<li>service.html</li>
|
||||
<li>feature.html</li>
|
||||
<li>about.html</li>
|
||||
<li>pricing.html</li>
|
||||
<li>contact.html</li>
|
||||
<li>portfolio.html</li>
|
||||
</ul>
|
||||
</ol>
|
||||
</div>
|
||||
</section>
|
||||
<section id="fonts">
|
||||
<div class="page-header">
|
||||
<h3>Fonts</h3>
|
||||
<hr class="notop">
|
||||
</div>
|
||||
<pre>
|
||||
|
||||
<!--Google Font-->
|
||||
|
||||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap');
|
||||
|
||||
</pre>
|
||||
</section>
|
||||
|
||||
<section id="themes_options">
|
||||
<div class="page-header">
|
||||
<h3>Source File(CSS)</h3>
|
||||
<hr class="notop">
|
||||
</div>
|
||||
<pre>
|
||||
|
||||
<!-- All CSS Here-->
|
||||
|
||||
<!-- Bootstrap min CSS -->
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.min.css"/>
|
||||
<link rel="stylesheet" href="assets/font/font-awesome.min.css"/>
|
||||
<link rel="stylesheet" href="assets/font/bootstrap-icons.min.css"/>
|
||||
<link rel="stylesheet" href="assets/css/slick.min.css"/>
|
||||
<link rel="stylesheet" href="assets/css/plugin.min.css"/>
|
||||
<link rel="stylesheet" href="assets/css/theme-spacing.min.css"/>
|
||||
<link rel="stylesheet" href="assets/css/style.css"/>
|
||||
<link rel="stylesheet" href="assets/css/responsive.css"/>
|
||||
</pre>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<section id="themes_options1">
|
||||
<div class="page-header">
|
||||
<h3>Source File(JS)</h3>
|
||||
<hr class="notop">
|
||||
</div>
|
||||
<pre>
|
||||
|
||||
<!-- All JS Here-->
|
||||
|
||||
|
||||
<script src="assets/js/jquery.min.js"></script>
|
||||
<script src="assets/js/bootstrap.min.js"></script>
|
||||
<script src="assets/js/plugin.min.js"></script>
|
||||
<script src="assets/js/gsap.js"></script>
|
||||
<script src="assets/js/main.js"></script></pre>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<div id="themes_options3">
|
||||
<div class="page-header">
|
||||
<h3>How to Change Logo</h3>
|
||||
<hr class="notop"/>
|
||||
<img alt="" src="assets/images/logo.png" class="img-area"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="themes_options3">
|
||||
<div class="page-header">
|
||||
<h3>How to Change Contact Mail</h3>
|
||||
<hr class="notop"/>
|
||||
<img alt="" src="assets/images/contact.png" class="img-area"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="themes_options5">
|
||||
<div class="page-header">
|
||||
<h3>How to Change Copyright</h3>
|
||||
<hr class="notop">
|
||||
<img alt="" src="assets/images/Copyright.png" class="img-area">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<section id="thanks">
|
||||
<div class="page-header">
|
||||
<h3>Thanks</h3>
|
||||
<hr class="notop">
|
||||
</div>
|
||||
<h4 id="thanks_span_style"margin_0px_padding_0px_border_0px_outline_0px_font_weight_700_font_style_inherit_font_family_inherit_vertical_align_baseline"once_again_thankyou_for_for_purchasing_one_of_our_theme_span"><span style="margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: 700; font-style: inherit; font-family: inherit; vertical-align: baseline;">Once Again Thank you for purchasing one of our theme</span></h4>
|
||||
<h2 style="margin: 0px 0px 18px; padding: 0px; border: 0px; outline: 0px; font-weight: 100; font-size: 20px; font-family: Arial, verdana, arial, sans-serif; vertical-align: baseline; color: rgb(56, 56, 56);"> Best Regards</h2>
|
||||
<h3 style="margin: 18px 0px 0px; padding: 0px; border: 0px; outline: 0px; font-weight: 100; font-size: 26px; font-family: Arial, verdana, arial, sans-serif; vertical-align: baseline; color: rgb(56, 56, 56);"> ThemeBazar</h3>
|
||||
</section>
|
||||
<hr />
|
||||
<footer>
|
||||
<p>Copyright ThemeBazar 2026 made with the <a href="#">Documenter v2.0</a></p>
|
||||
</footer>
|
||||
</div>
|
||||
<!-- /container -->
|
||||
|
||||
<!-- Le javascript
|
||||
================================================== -->
|
||||
<!-- Placed at the end of the document so the pages load faster -->
|
||||
<script>document.createElement('section');var duEkronn='500',easing='swing';</script>
|
||||
<script src="assets/js/jquery.js"></script>
|
||||
<script src="assets/js/jquery.scrollTo.js"></script>
|
||||
<script src="assets/js/jquery.easing.js"></script>
|
||||
<script src="assets/js/scripts.js"></script>
|
||||
<script src="assets/js/google-code-prettify/prettify.js"></script>
|
||||
<script src="assets/js/bootstrap-min.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
372
templates/template_1/Main File/NeuralSync/about.html
Normal file
@@ -0,0 +1,372 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Transform your business with cutting-edge AI solutions. Premium SaaS platform for startups and digital agencies.">
|
||||
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<!-- Bootstrap 5 -->
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
|
||||
<!-- Bootstrap Icons -->
|
||||
<link rel="stylesheet" href="assets/fonts/bootstrap-icons.min.css">
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="assets/css/slick.min.css">
|
||||
<link rel="stylesheet" href="assets/css/theme-spacing.min.css">
|
||||
<!-- Template styles -->
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<link rel="stylesheet" href="assets/css/responsive.css">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="page-wrapper">
|
||||
|
||||
<!-- START PRELOADER -->
|
||||
<div class="preloader">
|
||||
<div class="status">
|
||||
<div class="loader">
|
||||
<div class="loading-1"></div>
|
||||
<div class="loading-2">Loading...</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END PRELOADER -->
|
||||
|
||||
<!-- BACK TO TOP -->
|
||||
<div class="scroll-top">
|
||||
<i class="bi bi-arrow-up" style="font-size: 1.5rem; color: white;"></i>
|
||||
</div>
|
||||
<!-- BACK TO TOP -->
|
||||
|
||||
<!-- Animated Background -->
|
||||
<div class="animated-bg"></div>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-expand-lg fixed-top">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="index.html"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto align-items-center">
|
||||
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="features.html">Features</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="about.html">About</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="portfolio.html">Portfolio</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="pricing.html">Pricing</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
|
||||
<li class="nav-item ms-3">
|
||||
<button class="btn-primary-gradient">Get Started</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
|
||||
<!-- START BREADCRUMB -->
|
||||
<section class="breadcrumb-area position-relative black-bg breadcrumb-cover-bg breadcrumb-spacing breadcrumb-bg-attach);">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center text-center">
|
||||
<div class="col-xxl-12">
|
||||
<div class="breadcrumb-content p-relative z-index-2">
|
||||
<div class="breadcrumb-single-content mb-10">
|
||||
<span><a href="index.html"><i class="fa-light fa-house fa-fade me-2"></i>HOME</a></span>
|
||||
<span class="breadcrumb-sub-title">ABOUT</span>
|
||||
</div>
|
||||
<h3 class="breadcrumb-title split-content end">About Us</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END BREADCRUMB -->
|
||||
|
||||
<!-- About / Why Choose Us -->
|
||||
<section class="atf-section-padding" id="about">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-lg-6">
|
||||
<div class="section-title mb-30 text-start">
|
||||
<h2 class="title text-start mb-4 split-content up">Why Choose NeuralSync?</h2>
|
||||
<p class="text-secondary" style="font-size: 1.1rem;">We're not just another SaaS platform. We're your innovation partner, combining cutting-edge AI technology with intuitive design to deliver exceptional results.</p>
|
||||
</div>
|
||||
<div class="about-content">
|
||||
<div class="mb-4">
|
||||
<h3 class="mb-3"><i class="fa-light fa-badge-check mr-5 text-info"></i> Innovation First</h3>
|
||||
<p class="text-secondary">Stay ahead with bleeding-edge AI technology that evolves with your needs.</p>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<h3 class="mb-3"><i class="fa-light fa-badge-check mr-5 text-info"></i> Scalable Architecture</h3>
|
||||
<p class="text-secondary">From startup to enterprise - our infrastructure grows seamlessly with your business.</p>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<h3 class="mb-3"><i class="fa-light fa-badge-check mr-5 text-info"></i> World-Class Support</h3>
|
||||
<p class="text-secondary">24/7 expert support team ready to help you succeed at every step.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button class="btn-primary-gradient mt-3">DESCOVER MORE</button>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6 zoomIn mt-lg-40">
|
||||
<div class="glass-card p-4">
|
||||
<svg viewBox="0 0 400 300" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="chartGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#667eea;stop-opacity:0.8" />
|
||||
<stop offset="100%" style="stop-color:#667eea;stop-opacity:0.1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path d="M 20 250 L 80 200 L 140 180 L 200 120 L 260 100 L 320 50 L 380 30"
|
||||
stroke="#00f2ff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M 20 250 L 80 200 L 140 180 L 200 120 L 260 100 L 320 50 L 380 30 L 380 300 L 20 300 Z"
|
||||
fill="url(#chartGrad)"/>
|
||||
<circle cx="80" cy="200" r="6" fill="#00f2ff">
|
||||
<animate attributeName="r" values="6;10;6" dur="2s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="200" cy="120" r="6" fill="#00f2ff">
|
||||
<animate attributeName="r" values="6;10;6" dur="2.5s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="320" cy="50" r="6" fill="#00f2ff">
|
||||
<animate attributeName="r" values="6;10;6" dur="3s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Stats Section -->
|
||||
<div>
|
||||
<div class="container">
|
||||
<div class="stats-section">
|
||||
<div class="row">
|
||||
<div class="col-md-3 col-6 mb-4 mb-md-0 fadeInLeft">
|
||||
<div class="stat-item">
|
||||
<div class="stat-number"><span class="counter-value">10</span>K+</div>
|
||||
<div class="stat-label">Active Users</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 col-6 mb-4 mb-md-0 fadeInUp">
|
||||
<div class="stat-item">
|
||||
<div class="stat-number"><span class="counter-value">99</span>.9%</div>
|
||||
<div class="stat-label">Uptime SLA</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 col-6 fadeInUp">
|
||||
<div class="stat-item">
|
||||
<div class="stat-number"><span class="counter-value">50</span>M+</div>
|
||||
<div class="stat-label">API Requests</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 col-6 fadeInRight">
|
||||
<div class="stat-item">
|
||||
<div class="stat-number"><span class="counter-value">24</span>/7</div>
|
||||
<div class="stat-label">Support</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Product Showcase -->
|
||||
<section class="atf-section-padding">
|
||||
<div class="container">
|
||||
<div class="section-title mb-50 text-center">
|
||||
<h2 class="title split-content start">Experience the Platform</h2>
|
||||
<p class="section-subtitle fade-in">
|
||||
A beautiful, intuitive dashboard designed for power users and beginners alike
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="dashboard-mockup spread zoom-out">
|
||||
<svg viewBox="0 0 1200 700" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<!-- Dashboard Background -->
|
||||
<rect width="1200" height="700" fill="#1e293b" rx="20"/>
|
||||
|
||||
<!-- Header -->
|
||||
<rect width="1200" height="60" fill="#0f172a"/>
|
||||
<text x="30" y="38" font-family="Inter, sans-serif" font-size="24" font-weight="bold" fill="#667eea">NeuralSync</text>
|
||||
|
||||
<!-- Header Icons -->
|
||||
<foreignObject x="1050" y="10" width="140" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;justify-content:flex-end;gap:10px;align-items:center;">
|
||||
<i class="bi bi-bell-fill" style="color:#667eea;font-size:20px;"></i>
|
||||
<i class="bi bi-gear-fill" style="color:#667eea;font-size:20px;"></i>
|
||||
<i class="bi bi-person-circle" style="color:#667eea;font-size:20px;"></i>
|
||||
</div>
|
||||
</foreignObject>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<rect x="0" y="60" width="240" height="640" fill="#0f172a"/>
|
||||
<rect x="20" y="100" width="200" height="40" rx="10" fill="#667eea" opacity="0.2"/>
|
||||
<rect x="20" y="160" width="200" height="40" rx="10" fill="#334155"/>
|
||||
<rect x="20" y="220" width="200" height="40" rx="10" fill="#334155"/>
|
||||
<foreignObject x="30" y="105" width="180" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
|
||||
<i class="bi bi-speedometer2 mr-5"></i> Dashboard
|
||||
</div>
|
||||
</foreignObject>
|
||||
<foreignObject x="30" y="165" width="180" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
|
||||
<i class="bi bi-people-fill mr-5"></i> Users
|
||||
</div>
|
||||
</foreignObject>
|
||||
<foreignObject x="30" y="225" width="180" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
|
||||
<i class="bi bi-bar-chart-fill mr-5"></i> Analytics
|
||||
</div>
|
||||
</foreignObject>
|
||||
|
||||
<!-- Main Content Area -->
|
||||
<rect x="260" y="80" width="920" height="600" fill="#1e293b" rx="15"/>
|
||||
|
||||
|
||||
<!-- Cards -->
|
||||
<rect x="280" y="100" width="280" height="180" rx="15" fill="#334155"/>
|
||||
<foreignObject x="300" y="120" width="240" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
|
||||
<i class="bi bi-graph-up mr-5"></i> Sales Overview
|
||||
</div>
|
||||
</foreignObject>
|
||||
|
||||
<rect x="580" y="100" width="280" height="180" rx="15" fill="#334155"/>
|
||||
<foreignObject x="600" y="120" width="240" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
|
||||
<i class="bi bi-people mr-5"></i> Active Users
|
||||
</div>
|
||||
</foreignObject>
|
||||
|
||||
<rect x="880" y="100" width="280" height="180" rx="15" fill="#334155"/>
|
||||
<foreignObject x="900" y="120" width="240" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
|
||||
<i class="bi bi-wallet-fill mr-5"></i> Revenue
|
||||
</div>
|
||||
</foreignObject>
|
||||
|
||||
<!-- Chart Area -->
|
||||
<rect x="280" y="300" width="880" height="360" rx="15" fill="#334155"/>
|
||||
<path d="M 320 600 L 380 550 L 440 520 L 500 480 L 560 450 L 620 420 L 680 380 L 740 360 L 800 340 L 860 320 L 920 300 L 925 305 L 930 310 L 1100 315"
|
||||
stroke="#667eea" stroke-width="3" fill="none" stroke-linecap="round"/>
|
||||
|
||||
<!-- Glowing Elements -->
|
||||
<circle cx="420" cy="200" r="30" fill="#667eea" opacity="0.6">
|
||||
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="720" cy="200" r="30" fill="#00f2ff" opacity="0.6">
|
||||
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.5s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="1020" cy="200" r="30" fill="#764ba2" opacity="0.6">
|
||||
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="3s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<!-- Footer -->
|
||||
<div class="footer">
|
||||
<div class="container">
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-4 col-md-6 fadeInLeft">
|
||||
<h3 class="navbar-brand mb-50"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</h3>
|
||||
<p class="text-secondary mb-4">Empowering businesses with cutting-edge AI technology to automate, analyze, and accelerate growth in the digital age.</p>
|
||||
<div class="social-links">
|
||||
<a href="#"><i class="fab fa-x-twitter"></i></a>
|
||||
<a href="#"><i class="bi bi-linkedin"></i></a>
|
||||
<a href="#"><i class="bi bi-github"></i></a>
|
||||
<a href="#"><i class="bi bi-instagram"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Product</h3>
|
||||
<ul>
|
||||
<li><a href="#features">Features</a></li>
|
||||
<li><a href="#pricing">Pricing</a></li>
|
||||
<li><a href="#">Security</a></li>
|
||||
<li><a href="#">Integrations</a></li>
|
||||
<li><a href="#">API Docs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Company</h3>
|
||||
<ul>
|
||||
<li><a href="#about">About Us</a></li>
|
||||
<li><a href="#">Careers</a></li>
|
||||
<li><a href="#">Blog</a></li>
|
||||
<li><a href="#">Press Kit</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
<li><a href="#">Documentation</a></li>
|
||||
<li><a href="#">Tutorials</a></li>
|
||||
<li><a href="#">Community</a></li>
|
||||
<li><a href="#">Support</a></li>
|
||||
<li><a href="#">Status</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInRight">
|
||||
<h3>Legal</h3>
|
||||
<ul>
|
||||
<li><a href="#">Privacy Policy</a></li>
|
||||
<li><a href="#">Terms of Service</a></li>
|
||||
<li><a href="#">Cookie Policy</a></li>
|
||||
<li><a href="#">GDPR</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr style="border-color: rgba(255,255,255,0.1); margin: 3rem 0 2rem;">
|
||||
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
|
||||
<p class="text-secondary mb-0">© 2026 NeuralSync. All rights reserved.</p>
|
||||
</div>
|
||||
<div class="col-md-6 text-center text-md-end">
|
||||
<p class="text-secondary mb-0">Made with <span style="color: #f093fb;">?</span> for innovators worldwide</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END PRELOADER -->
|
||||
|
||||
<!-- jQuery, Bootstrap, GSAP -->
|
||||
<script src="assets/js/jquery.min.js"></script>
|
||||
<!-- Latest compiled and minified Bootstrap -->
|
||||
<script src="assets/js/bootstrap.min.js"></script>
|
||||
<script src="assets/js/plugin.min.js"></script>
|
||||
<script src="assets/js/gsap.js"></script>
|
||||
<!-- Template scripts -->
|
||||
<script src="assets/js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
6
templates/template_1/Main File/NeuralSync/assets/css/bootstrap.min.css
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
@media only screen and (max-width : 2500px) {
|
||||
.page-wrapper{
|
||||
overflow:hidden;
|
||||
}
|
||||
|
||||
}
|
||||
@media screen and (min-width: 1200px) and (max-width: 1399px){
|
||||
.stat-number {
|
||||
font-size: 3rem;
|
||||
}
|
||||
.breadcrumb-title{
|
||||
font-size:44px;
|
||||
}
|
||||
|
||||
}
|
||||
@media screen and (min-width: 992px) and (max-width: 1199px){
|
||||
.stat-number {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
.breadcrumb-title{
|
||||
font-size:44px;
|
||||
}
|
||||
}
|
||||
@media only screen and (max-width : 1199px) {
|
||||
.mt-xl-40{
|
||||
margin-top:40px;
|
||||
}
|
||||
.mb-xl-40{
|
||||
margin-bottom:40px;
|
||||
}
|
||||
}
|
||||
@media only screen and (max-width : 991px) {
|
||||
.mt-lg-40{
|
||||
margin-top:40px;
|
||||
}
|
||||
.mb-lg-40{
|
||||
margin-bottom:40px;
|
||||
}
|
||||
.stat-number {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
.breadcrumb-title{
|
||||
font-size:36px;
|
||||
letter-spacing:0;
|
||||
line-height:1.3;
|
||||
}
|
||||
|
||||
}
|
||||
@media only screen and (max-width: 767px) {
|
||||
|
||||
.mt-lg-40{
|
||||
margin-top:25px;
|
||||
}
|
||||
.mb-lg-40{
|
||||
margin-bottom:25px;
|
||||
}
|
||||
|
||||
}
|
||||
@media screen and (min-width: 320px) and (max-width: 575px){
|
||||
.faq-question {
|
||||
font-size: 1.2rem ! important;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
}
|
||||
2
templates/template_1/Main File/NeuralSync/assets/css/slick.min.css
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.slick-slider{position:relative;display:block;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-khtml-user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list{position:relative;display:block;overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:0}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.slick-track{position:relative;top:0;left:0;display:block;margin-left:auto;margin-right:auto}.slick-track:after,.slick-track:before{display:table;content:''}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{display:none;float:left;height:100%;min-height:1px}[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}
|
||||
/*# sourceMappingURL=slick.min.css.map */
|
||||
1259
templates/template_1/Main File/NeuralSync/assets/css/style.css
Normal file
1
templates/template_1/Main File/NeuralSync/assets/css/theme-spacing.min.css
vendored
Normal file
5
templates/template_1/Main File/NeuralSync/assets/fonts/bootstrap-icons.min.css
vendored
Normal file
16
templates/template_1/Main File/NeuralSync/assets/fonts/font-awesome.min.css
vendored
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 14 KiB |
7
templates/template_1/Main File/NeuralSync/assets/js/bootstrap.min.js
vendored
Normal file
255
templates/template_1/Main File/NeuralSync/assets/js/gsap.js
Normal file
@@ -0,0 +1,255 @@
|
||||
/*
|
||||
|-----------------------------------------------------
|
||||
| Template Name: NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template
|
||||
| Developer: Themesfamily
|
||||
| Version: 1.0.0
|
||||
|-----------------------------------------------------
|
||||
*/
|
||||
/***************************************************
|
||||
==================== JS ======================
|
||||
****************************************************
|
||||
00. Configuration Check
|
||||
01. GSAP Plugin Registration
|
||||
02. LENIS SMOOTH SCROLLING
|
||||
03. TEAM Social Icon Toggle
|
||||
04. GSAP Custom Cursor Implementation
|
||||
05. GSAP Text Split Animation
|
||||
06. GSAP Image Spread / Reveal Animation
|
||||
07. GSAP 3D Scale and Fade Animation
|
||||
08. GSAP Dynamic Fade-In Animations (General)
|
||||
09. GSAP Parallax Zoom Animation
|
||||
10. MAIN INITIALIZATION FUNCTION
|
||||
****************************************************/
|
||||
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
// 00. Configuration Check
|
||||
if (typeof gsap === 'undefined' || typeof jQuery === 'undefined' || typeof Lenis === 'undefined') {
|
||||
console.error("Required libraries (GSAP, jQuery, or Lenis) are not loaded. Skipping all animations.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 01. GSAP Plugin Registration
|
||||
if (typeof SplitText !== 'undefined' && typeof ScrollTrigger !== 'undefined') {
|
||||
gsap.registerPlugin(ScrollTrigger, SplitText);
|
||||
} else {
|
||||
console.warn("GSAP plugins (SplitText or ScrollTrigger) are not loaded. Some animations may be skipped.");
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 02. LENIS SMOOTH SCROLLING
|
||||
// ----------------------------------------------------------------------------------
|
||||
new Lenis({
|
||||
autoRaf: true
|
||||
});
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 05. GSAP Text Split Animation
|
||||
// ----------------------------------------------------------------------------------
|
||||
function initSplitTextAnimations() {
|
||||
const st = $(".split-content");
|
||||
if (st.length > 0 && typeof SplitText !== 'undefined') {
|
||||
st.each(function (index, el) {
|
||||
el.split = new SplitText(el, {
|
||||
type: "lines,words,chars",
|
||||
linesClass: "atf-split-line",
|
||||
});
|
||||
|
||||
// Set initial position based on class (end, start, up, down)
|
||||
let initialProps = { opacity: 0 };
|
||||
if ($(el).hasClass("end")) initialProps.x = "50";
|
||||
else if ($(el).hasClass("start")) initialProps.x = "-50";
|
||||
else if ($(el).hasClass("up")) initialProps.y = "80";
|
||||
else if ($(el).hasClass("down")) initialProps.y = "-80";
|
||||
|
||||
gsap.set(el.split.chars, initialProps);
|
||||
gsap.set(el, { perspective: 400 });
|
||||
|
||||
// Create ScrollTrigger animation timeline
|
||||
gsap.to(el.split.chars, {
|
||||
scrollTrigger: {
|
||||
trigger: el,
|
||||
start: "top 85%",
|
||||
end: "bottom 65%",
|
||||
scrub: 1,
|
||||
},
|
||||
x: "0",
|
||||
y: "0",
|
||||
rotateX: "0",
|
||||
scale: 1,
|
||||
opacity: 1,
|
||||
autoAlpha: 1,
|
||||
duration: 1,
|
||||
ease: 'power2.out',
|
||||
stagger: 0.03,
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 06. GSAP Image Spread / Reveal Animation
|
||||
// ----------------------------------------------------------------------------------
|
||||
function initImageSpreadAnimations() {
|
||||
document.querySelectorAll(".spread").forEach((container) => {
|
||||
let image = container.querySelector("img");
|
||||
if (!image) return;
|
||||
|
||||
let tl = gsap.timeline({
|
||||
scrollTrigger: {
|
||||
trigger: container,
|
||||
toggleActions: "play none none none",
|
||||
},
|
||||
});
|
||||
|
||||
tl.set(container, { autoAlpha: 1 });
|
||||
|
||||
if (container.classList.contains("zoom-out")) {
|
||||
tl.from(image, { duration: 1.5, scale: 1.4, ease: "power2.out" });
|
||||
} else if (container.classList.contains("start") || container.classList.contains("end")) {
|
||||
let xPercent = container.classList.contains("start") ? -100 : 100;
|
||||
|
||||
tl.from(container, {
|
||||
duration: 1.5,
|
||||
xPercent,
|
||||
ease: Power2.out,
|
||||
});
|
||||
tl.from(image, {
|
||||
duration: 1.5,
|
||||
xPercent: -xPercent,
|
||||
scale: 1,
|
||||
delay: -1.5,
|
||||
ease: Power2.out,
|
||||
});
|
||||
}
|
||||
else if (container.classList.contains("up") || container.classList.contains("down")) {
|
||||
let yPercent = container.classList.contains("up") ? 100 : -100;
|
||||
|
||||
tl.from(container, {
|
||||
duration: 1.5,
|
||||
yPercent,
|
||||
ease: Power2.out,
|
||||
});
|
||||
tl.from(image, {
|
||||
duration: 1.5,
|
||||
yPercent: -yPercent,
|
||||
scale: 1,
|
||||
delay: -1.5,
|
||||
ease: Power2.out,
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 07. GSAP 3D Scale and Fade Animation
|
||||
// ----------------------------------------------------------------------------------
|
||||
function initScale3DAnimations() {
|
||||
gsap.utils.toArray(".item-3d").forEach((el) => {
|
||||
// Initial 3D transform set
|
||||
gsap.set(el, {
|
||||
opacity: 0.7,
|
||||
transform: "perspective(2500px) translate3d(0,0,0) rotateX(90deg) scale(0.5)",
|
||||
});
|
||||
|
||||
// ScrollTrigger timeline to reveal 3D item
|
||||
gsap.timeline({
|
||||
scrollTrigger: {
|
||||
trigger: el,
|
||||
start: "top bottom+=50",
|
||||
end: "bottom center",
|
||||
scrub: 2,
|
||||
},
|
||||
}).to(el, {
|
||||
scale: 1,
|
||||
rotateX: 0,
|
||||
opacity: 1,
|
||||
duration: 1.3,
|
||||
ease: "power2.out",
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 08. GSAP Dynamic Fade-In Animations (General)
|
||||
// ----------------------------------------------------------------------------------
|
||||
function initDynamicFadeAnimations() {
|
||||
[
|
||||
".fadeInUp", ".fadeInLeft", ".fadeInRight", ".zoomIn", ".zoomOut", ".bounceIn"
|
||||
].forEach((selector) => {
|
||||
gsap.utils.toArray(selector).forEach((el) => {
|
||||
let offset = el.getAttribute("data-fade-offset") || 40;
|
||||
let duration = el.getAttribute("data-duration") || 0.8;
|
||||
let from = el.getAttribute("data-fade-from") || (
|
||||
selector === ".fadeInLeft" ? "left" :
|
||||
selector === ".fadeInRight" ? "right" :
|
||||
selector.includes("zoom") || selector === ".bounceIn" ? "center" :
|
||||
"bottom"
|
||||
);
|
||||
let onScroll = el.getAttribute("data-on-scroll") || 1;
|
||||
let delay = el.getAttribute("data-delay") || 0.15;
|
||||
|
||||
let props = {
|
||||
opacity: 0,
|
||||
duration,
|
||||
delay,
|
||||
ease: el.getAttribute("data-ease") || (
|
||||
selector === ".bounceIn" ? "bounce.out" : "power2.out"
|
||||
),
|
||||
x: from === "left" ? -offset : from === "right" ? offset : 0,
|
||||
y: from === "top" ? -offset : from === "bottom" ? offset : 0,
|
||||
scale: selector === ".zoomIn" ? 0.5 : selector === ".zoomOut" ? 1.5 : 1,
|
||||
};
|
||||
|
||||
// Add ScrollTrigger if onScroll is enabled
|
||||
if (onScroll == 1) {
|
||||
props.scrollTrigger = { trigger: el, start: "top 85%" };
|
||||
}
|
||||
|
||||
gsap.from(el, props);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 09. GSAP Parallax Zoom Animation
|
||||
// ----------------------------------------------------------------------------------
|
||||
function initParallaxZoom() {
|
||||
document.querySelectorAll(".item-up-image").forEach((wrap) => {
|
||||
gsap.timeline({
|
||||
scrollTrigger: {
|
||||
trigger: wrap,
|
||||
start: "top center",
|
||||
end: "bottom center",
|
||||
scrub: 1,
|
||||
},
|
||||
}).to(wrap.querySelector(".item-up"), {
|
||||
scale: 1.10,
|
||||
duration: 1,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------
|
||||
// 10. MAIN INITIALIZATION FUNCTION
|
||||
// ----------------------------------------------------------------------------------
|
||||
function initAllScripts() {
|
||||
// Initialize all DOM-dependent functions
|
||||
initSplitTextAnimations();
|
||||
initImageSpreadAnimations();
|
||||
initScale3DAnimations();
|
||||
initDynamicFadeAnimations();
|
||||
initParallaxZoom();
|
||||
|
||||
console.log("All NeuralSync animations initialized successfully.");
|
||||
}
|
||||
|
||||
// Execute the main function (assuming script is placed before </body>)
|
||||
initAllScripts();
|
||||
|
||||
|
||||
|
||||
|
||||
})(jQuery);
|
||||
2
templates/template_1/Main File/NeuralSync/assets/js/jquery.min.js
vendored
Normal file
238
templates/template_1/Main File/NeuralSync/assets/js/main.js
Normal file
@@ -0,0 +1,238 @@
|
||||
/* =====================================================
|
||||
NovaAI - Premium Template Script
|
||||
Clean | Optimized | Reviewer Ready
|
||||
===================================================== */
|
||||
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
/* ===============================
|
||||
Helper: Safe Query Selector
|
||||
=============================== */
|
||||
const $select = (selector) => document.querySelector(selector);
|
||||
const $selectAll = (selector) => document.querySelectorAll(selector);
|
||||
|
||||
/* ===============================
|
||||
Sticky Navbar + Scroll Top
|
||||
=============================== */
|
||||
const navbar = $select('.navbar');
|
||||
const scrollTopBtn = $select('.scroll-top');
|
||||
|
||||
window.addEventListener('scroll', function () {
|
||||
|
||||
// Sticky Navbar
|
||||
if (navbar) {
|
||||
if (window.scrollY > 50) {
|
||||
navbar.classList.add('scrolled');
|
||||
} else {
|
||||
navbar.classList.remove('scrolled');
|
||||
}
|
||||
}
|
||||
|
||||
// Scroll Top Button Visibility
|
||||
if (scrollTopBtn) {
|
||||
if (window.scrollY > 300) {
|
||||
scrollTopBtn.classList.add('visible');
|
||||
} else {
|
||||
scrollTopBtn.classList.remove('visible');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Scroll To Top Click
|
||||
if (scrollTopBtn) {
|
||||
scrollTopBtn.addEventListener('click', function () {
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
behavior: 'smooth'
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/* ===============================
|
||||
Preloader
|
||||
=============================== */
|
||||
$(window).on("load", function () {
|
||||
$(".status").fadeOut();
|
||||
$(".preloader").delay(300).fadeOut("slow");
|
||||
});
|
||||
|
||||
/* ===============================
|
||||
Smooth Scroll (Anchor Links)
|
||||
=============================== */
|
||||
$selectAll('a[href^="#"]').forEach(anchor => {
|
||||
anchor.addEventListener('click', function (e) {
|
||||
|
||||
const targetID = this.getAttribute('href');
|
||||
|
||||
if (targetID.length > 1) {
|
||||
const target = $select(targetID);
|
||||
|
||||
if (target) {
|
||||
e.preventDefault();
|
||||
target.scrollIntoView({
|
||||
behavior: 'smooth',
|
||||
block: 'start'
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* ===============================
|
||||
Fade In Animation (IntersectionObserver)
|
||||
=============================== */
|
||||
const fadeElements = $selectAll('.fade-in');
|
||||
|
||||
if (fadeElements.length) {
|
||||
const fadeObserver = new IntersectionObserver((entries) => {
|
||||
entries.forEach(entry => {
|
||||
if (entry.isIntersecting) {
|
||||
entry.target.classList.add('visible');
|
||||
fadeObserver.unobserve(entry.target);
|
||||
}
|
||||
});
|
||||
}, {
|
||||
threshold: 0.15
|
||||
});
|
||||
|
||||
fadeElements.forEach(el => fadeObserver.observe(el));
|
||||
}
|
||||
|
||||
/* ===============================
|
||||
FAQ Toggle
|
||||
=============================== */
|
||||
$selectAll('.faq-question').forEach(question => {
|
||||
question.addEventListener('click', function () {
|
||||
|
||||
const answer = this.nextElementSibling;
|
||||
const icon = this.querySelector('i');
|
||||
|
||||
if (!answer) return;
|
||||
|
||||
// Close others
|
||||
$selectAll('.faq-answer').forEach(item => {
|
||||
if (item !== answer) {
|
||||
item.classList.remove('active');
|
||||
}
|
||||
});
|
||||
|
||||
$selectAll('.faq-question i').forEach(i => {
|
||||
if (i !== icon) {
|
||||
i.classList.remove('bi-chevron-up');
|
||||
i.classList.add('bi-chevron-down');
|
||||
}
|
||||
});
|
||||
|
||||
// Toggle current
|
||||
answer.classList.toggle('active');
|
||||
|
||||
if (icon) {
|
||||
icon.classList.toggle('bi-chevron-up');
|
||||
icon.classList.toggle('bi-chevron-down');
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
/* ===============================
|
||||
Newsletter Form
|
||||
=============================== */
|
||||
const newsletterForm = $select('.newsletter-form');
|
||||
|
||||
if (newsletterForm) {
|
||||
newsletterForm.addEventListener('submit', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
const emailInput = this.querySelector('input[type="email"]');
|
||||
if (!emailInput) return;
|
||||
|
||||
alert("Thank you! We'll keep you updated.");
|
||||
this.reset();
|
||||
});
|
||||
}
|
||||
|
||||
/* ===============================
|
||||
Contact Form
|
||||
=============================== */
|
||||
const contactForm = $select('.contact-form');
|
||||
|
||||
if (contactForm) {
|
||||
contactForm.addEventListener('submit', function (e) {
|
||||
e.preventDefault();
|
||||
alert("Message sent successfully!");
|
||||
this.reset();
|
||||
});
|
||||
}
|
||||
|
||||
/* ===============================
|
||||
Close Mobile Menu on Link Click
|
||||
=============================== */
|
||||
$selectAll('.navbar-nav .nav-link').forEach(link => {
|
||||
link.addEventListener('click', () => {
|
||||
const navbarCollapse = $select('.navbar-collapse');
|
||||
if (navbarCollapse && navbarCollapse.classList.contains('show')) {
|
||||
const bsCollapse = new bootstrap.Collapse(navbarCollapse);
|
||||
bsCollapse.hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
/*--------------------------------------------------------------
|
||||
START counter JS
|
||||
--------------------------------------------------------------*/
|
||||
$('.counter-value').counterUp({
|
||||
delay: 10,
|
||||
time: 1000
|
||||
});
|
||||
|
||||
/*Start Blog Design*/
|
||||
$('.atf_client-slider').slick({
|
||||
arrows: true,
|
||||
dots: false,
|
||||
infinite: true,
|
||||
speed: 300,
|
||||
slidesToShow: 3,
|
||||
slidesToScroll: 1,
|
||||
prevArrow: '<a class="slick-prev"><i class="fa-light fa-arrow-left" alt="Arrow Icon"></i></a>',
|
||||
nextArrow: '<a class="slick-next"><i class="fa-light fa-arrow-right" alt="Arrow Icon"></i></a>',
|
||||
responsive: [
|
||||
{
|
||||
breakpoint: 1200,
|
||||
settings: {
|
||||
slidesToShow: 2,
|
||||
slidesToScroll: 1,
|
||||
arrows: false,
|
||||
dots: true
|
||||
}
|
||||
},
|
||||
{
|
||||
breakpoint: 992,
|
||||
settings: {
|
||||
slidesToShow: 2,
|
||||
slidesToScroll: 1,
|
||||
arrows: false,
|
||||
dots: true
|
||||
}
|
||||
},
|
||||
{
|
||||
breakpoint: 768,
|
||||
settings: {
|
||||
slidesToShow: 2,
|
||||
slidesToScroll: 1,
|
||||
arrows: false,
|
||||
dots: true
|
||||
}
|
||||
},
|
||||
{
|
||||
breakpoint: 580,
|
||||
settings: {
|
||||
arrows: false,
|
||||
dots: true,
|
||||
slidesToShow: 1,
|
||||
slidesToScroll: 1
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
72
templates/template_1/Main File/NeuralSync/assets/js/plugin.min.js
vendored
Normal file
212
templates/template_1/Main File/NeuralSync/contact.html
Normal file
@@ -0,0 +1,212 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Transform your business with cutting-edge AI solutions. Premium SaaS platform for startups and digital agencies.">
|
||||
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<!-- Bootstrap 5 -->
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
|
||||
<!-- Bootstrap Icons -->
|
||||
<link rel="stylesheet" href="assets/fonts/bootstrap-icons.min.css">
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="assets/css/slick.min.css">
|
||||
<link rel="stylesheet" href="assets/css/theme-spacing.min.css">
|
||||
<!-- Template styles -->
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<link rel="stylesheet" href="assets/css/responsive.css">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="page-wrapper">
|
||||
|
||||
<!-- START PRELOADER -->
|
||||
<div class="preloader">
|
||||
<div class="status">
|
||||
<div class="loader">
|
||||
<div class="loading-1"></div>
|
||||
<div class="loading-2">Loading...</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END PRELOADER -->
|
||||
|
||||
<!-- BACK TO TOP -->
|
||||
<div class="scroll-top">
|
||||
<i class="bi bi-arrow-up" style="font-size: 1.5rem; color: white;"></i>
|
||||
</div>
|
||||
<!-- BACK TO TOP -->
|
||||
|
||||
<!-- Animated Background -->
|
||||
<div class="animated-bg"></div>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-expand-lg fixed-top">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="index.html"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto align-items-center">
|
||||
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="features.html">Features</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="about.html">About</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="portfolio.html">Portfolio</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="pricing.html">Pricing</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
|
||||
<li class="nav-item ms-3">
|
||||
<button class="btn-primary-gradient">Get Started</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
|
||||
<!-- START BREADCRUMB -->
|
||||
<section class="breadcrumb-area position-relative black-bg breadcrumb-cover-bg breadcrumb-spacing breadcrumb-bg-attach);">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center text-center">
|
||||
<div class="col-xxl-12">
|
||||
<div class="breadcrumb-content p-relative z-index-2">
|
||||
<div class="breadcrumb-single-content mb-10">
|
||||
<span><a href="index.html"><i class="fa-light fa-house fa-fade me-2"></i>HOME</a></span>
|
||||
<span class="breadcrumb-sub-title">CONTACT</span>
|
||||
</div>
|
||||
<h3 class="breadcrumb-title split-content end">Contact Us</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END BREADCRUMB -->
|
||||
|
||||
|
||||
<!-- Contact Form -->
|
||||
<section class="atf-section-padding" id="contact">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-8 fade-in">
|
||||
<form class="contact-form glass-card" onsubmit="submitContact(event)">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<input type="text" placeholder="Your Name" required>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<input type="email" placeholder="Your Email" required>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<input type="text" placeholder="Subject">
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<textarea rows="6" placeholder="Your Message" required></textarea>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<button type="submit" class="btn-primary-gradient w-100">Send Message</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<!-- Footer -->
|
||||
<div class="footer">
|
||||
<div class="container">
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-4 col-md-6 fadeInLeft">
|
||||
<h3 class="navbar-brand mb-50"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</h3>
|
||||
<p class="text-secondary mb-4">Empowering businesses with cutting-edge AI technology to automate, analyze, and accelerate growth in the digital age.</p>
|
||||
<div class="social-links">
|
||||
<a href="#"><i class="fab fa-x-twitter"></i></a>
|
||||
<a href="#"><i class="bi bi-linkedin"></i></a>
|
||||
<a href="#"><i class="bi bi-github"></i></a>
|
||||
<a href="#"><i class="bi bi-instagram"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Product</h3>
|
||||
<ul>
|
||||
<li><a href="#features">Features</a></li>
|
||||
<li><a href="#pricing">Pricing</a></li>
|
||||
<li><a href="#">Security</a></li>
|
||||
<li><a href="#">Integrations</a></li>
|
||||
<li><a href="#">API Docs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Company</h3>
|
||||
<ul>
|
||||
<li><a href="#about">About Us</a></li>
|
||||
<li><a href="#">Careers</a></li>
|
||||
<li><a href="#">Blog</a></li>
|
||||
<li><a href="#">Press Kit</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
<li><a href="#">Documentation</a></li>
|
||||
<li><a href="#">Tutorials</a></li>
|
||||
<li><a href="#">Community</a></li>
|
||||
<li><a href="#">Support</a></li>
|
||||
<li><a href="#">Status</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInRight">
|
||||
<h3>Legal</h3>
|
||||
<ul>
|
||||
<li><a href="#">Privacy Policy</a></li>
|
||||
<li><a href="#">Terms of Service</a></li>
|
||||
<li><a href="#">Cookie Policy</a></li>
|
||||
<li><a href="#">GDPR</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr style="border-color: rgba(255,255,255,0.1); margin: 3rem 0 2rem;">
|
||||
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
|
||||
<p class="text-secondary mb-0">© 2026 NeuralSync. All rights reserved.</p>
|
||||
</div>
|
||||
<div class="col-md-6 text-center text-md-end">
|
||||
<p class="text-secondary mb-0">Made with <span style="color: #f093fb;">?</span> for innovators worldwide</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END PRELOADER -->
|
||||
|
||||
<!-- jQuery, Bootstrap, GSAP -->
|
||||
<script src="assets/js/jquery.min.js"></script>
|
||||
<!-- Latest compiled and minified Bootstrap -->
|
||||
<script src="assets/js/bootstrap.min.js"></script>
|
||||
<script src="assets/js/plugin.min.js"></script>
|
||||
<script src="assets/js/gsap.js"></script>
|
||||
<!-- Template scripts -->
|
||||
<script src="assets/js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
277
templates/template_1/Main File/NeuralSync/features.html
Normal file
@@ -0,0 +1,277 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Transform your business with cutting-edge AI solutions. Premium SaaS platform for startups and digital agencies.">
|
||||
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<!-- Bootstrap 5 -->
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
|
||||
<!-- Bootstrap Icons -->
|
||||
<link rel="stylesheet" href="assets/fonts/bootstrap-icons.min.css">
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="assets/css/slick.min.css">
|
||||
<link rel="stylesheet" href="assets/css/theme-spacing.min.css">
|
||||
<!-- Template styles -->
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<link rel="stylesheet" href="assets/css/responsive.css">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="page-wrapper">
|
||||
|
||||
<!-- START PRELOADER -->
|
||||
<div class="preloader">
|
||||
<div class="status">
|
||||
<div class="loader">
|
||||
<div class="loading-1"></div>
|
||||
<div class="loading-2">Loading...</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END PRELOADER -->
|
||||
|
||||
<!-- BACK TO TOP -->
|
||||
<div class="scroll-top">
|
||||
<i class="bi bi-arrow-up" style="font-size: 1.5rem; color: white;"></i>
|
||||
</div>
|
||||
<!-- BACK TO TOP -->
|
||||
|
||||
<!-- Animated Background -->
|
||||
<div class="animated-bg"></div>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-expand-lg fixed-top">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="index.html"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto align-items-center">
|
||||
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="features.html">Features</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="about.html">About</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="portfolio.html">Portfolio</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="pricing.html">Pricing</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
|
||||
<li class="nav-item ms-3">
|
||||
<button class="btn-primary-gradient">Get Started</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
|
||||
<!-- START BREADCRUMB -->
|
||||
<section class="breadcrumb-area position-relative black-bg breadcrumb-cover-bg breadcrumb-spacing breadcrumb-bg-attach);">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center text-center">
|
||||
<div class="col-xxl-12">
|
||||
<div class="breadcrumb-content p-relative z-index-2">
|
||||
<div class="breadcrumb-single-content mb-10">
|
||||
<span><a href="index.html"><i class="fa-light fa-house fa-fade me-2"></i>HOME</a></span>
|
||||
<span class="breadcrumb-sub-title">SERVICE</span>
|
||||
</div>
|
||||
<h3 class="breadcrumb-title split-content end">Our Service</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END BREADCRUMB -->
|
||||
|
||||
|
||||
<!-- Logo Slider -->
|
||||
<div class="logo-slider">
|
||||
<div class="container">
|
||||
<p class="text-center mb-50 split-content end">TRUSTED BY LEADING COMPANIES WORLDWIDE</p>
|
||||
<div class="overflow-hidden">
|
||||
<div class="logo-track">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+VGVjaENvcnA8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RGF0YUZsb3c8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+QUlMYWJzPC90ZXh0Pjwvc3ZnPg==" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+SW5ub1RlY2g8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RnV0dXJlQUk8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
|
||||
<!-- Duplicate for seamless loop -->
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+VGVjaENvcnA8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RGF0YUZsb3c8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+QUlMYWJzPC90ZXh0Pjwvc3ZnPg==" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+SW5ub1RlY2g8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RnV0dXJlQUk8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Features Section -->
|
||||
<section class="atf-section-padding" id="features">
|
||||
<div class="container">
|
||||
<div class="section-title mb-50 text-center">
|
||||
<h2 class="title split-content start">Powerful Features for Modern Businesses</h2>
|
||||
<p class="section-subtitle fade-in">Everything you need to scale your operations with cutting-edge AI technology</p>
|
||||
</div>
|
||||
<div class="row g-4 text-center">
|
||||
<div class="col-md-6 col-lg-4 fadeInLeft">
|
||||
<div class="glass-card feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="bi bi-cpu"></i>
|
||||
</div>
|
||||
<h3>AI Automation</h3>
|
||||
<p>Automate repetitive tasks and workflows with intelligent machine learning algorithms that adapt to your business needs.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4 fadeInUp">
|
||||
<div class="glass-card feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="bi bi-graph-up-arrow"></i>
|
||||
</div>
|
||||
<h3>Advanced Analytics</h3>
|
||||
<p>Real-time insights and predictive analytics to make data-driven decisions and stay ahead of the competition.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4 fadeInRight">
|
||||
<div class="glass-card feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="bi bi-shield-check"></i>
|
||||
</div>
|
||||
<h3>Enterprise Security</h3>
|
||||
<p>Bank-level encryption and compliance with SOC 2, GDPR, and HIPAA standards to protect your data.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4 fadeInLeft">
|
||||
<div class="glass-card feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="bi bi-lightning-charge"></i>
|
||||
</div>
|
||||
<h3>Lightning Fast</h3>
|
||||
<p>Optimized infrastructure delivering sub-second response times and 99.9% uptime guarantee.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4 fadeInUp">
|
||||
<div class="glass-card feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="bi bi-people"></i>
|
||||
</div>
|
||||
<h3>Team Collaboration</h3>
|
||||
<p>Seamless collaboration tools with real-time sync, role-based access, and integrated communication.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4 fadeInRight">
|
||||
<div class="glass-card feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="bi bi-phone"></i>
|
||||
</div>
|
||||
<h3>API Integration</h3>
|
||||
<p>Connect with 1000+ apps and services through our robust RESTful API and webhook system.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<!-- Footer -->
|
||||
<div class="footer">
|
||||
<div class="container">
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-4 col-md-6 fadeInLeft">
|
||||
<h3 class="navbar-brand mb-50"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</h3>
|
||||
<p class="text-secondary mb-4">Empowering businesses with cutting-edge AI technology to automate, analyze, and accelerate growth in the digital age.</p>
|
||||
<div class="social-links">
|
||||
<a href="#"><i class="fab fa-x-twitter"></i></a>
|
||||
<a href="#"><i class="bi bi-linkedin"></i></a>
|
||||
<a href="#"><i class="bi bi-github"></i></a>
|
||||
<a href="#"><i class="bi bi-instagram"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Product</h3>
|
||||
<ul>
|
||||
<li><a href="#features">Features</a></li>
|
||||
<li><a href="#pricing">Pricing</a></li>
|
||||
<li><a href="#">Security</a></li>
|
||||
<li><a href="#">Integrations</a></li>
|
||||
<li><a href="#">API Docs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Company</h3>
|
||||
<ul>
|
||||
<li><a href="#about">About Us</a></li>
|
||||
<li><a href="#">Careers</a></li>
|
||||
<li><a href="#">Blog</a></li>
|
||||
<li><a href="#">Press Kit</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
<li><a href="#">Documentation</a></li>
|
||||
<li><a href="#">Tutorials</a></li>
|
||||
<li><a href="#">Community</a></li>
|
||||
<li><a href="#">Support</a></li>
|
||||
<li><a href="#">Status</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInRight">
|
||||
<h3>Legal</h3>
|
||||
<ul>
|
||||
<li><a href="#">Privacy Policy</a></li>
|
||||
<li><a href="#">Terms of Service</a></li>
|
||||
<li><a href="#">Cookie Policy</a></li>
|
||||
<li><a href="#">GDPR</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr style="border-color: rgba(255,255,255,0.1); margin: 3rem 0 2rem;">
|
||||
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
|
||||
<p class="text-secondary mb-0">© 2026 NeuralSync. All rights reserved.</p>
|
||||
</div>
|
||||
<div class="col-md-6 text-center text-md-end">
|
||||
<p class="text-secondary mb-0">Made with <span style="color: #f093fb;">?</span> for innovators worldwide</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END PRELOADER -->
|
||||
|
||||
<!-- jQuery, Bootstrap, GSAP -->
|
||||
<script src="assets/js/jquery.min.js"></script>
|
||||
<!-- Latest compiled and minified Bootstrap -->
|
||||
<script src="assets/js/bootstrap.min.js"></script>
|
||||
<script src="assets/js/plugin.min.js"></script>
|
||||
<script src="assets/js/gsap.js"></script>
|
||||
<!-- Template scripts -->
|
||||
<script src="assets/js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
926
templates/template_1/Main File/NeuralSync/index.html
Normal file
@@ -0,0 +1,926 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Transform your business with cutting-edge AI solutions. Premium SaaS platform for startups and digital agencies.">
|
||||
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<!-- Bootstrap 5 -->
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
|
||||
<!-- Bootstrap Icons -->
|
||||
<link rel="stylesheet" href="assets/fonts/bootstrap-icons.min.css">
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="assets/css/slick.min.css">
|
||||
<link rel="stylesheet" href="assets/css/theme-spacing.min.css">
|
||||
<!-- Template styles -->
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<link rel="stylesheet" href="assets/css/responsive.css">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="page-wrapper">
|
||||
|
||||
<!-- START PRELOADER -->
|
||||
<div class="preloader">
|
||||
<div class="status">
|
||||
<div class="loader">
|
||||
<div class="loading-1"></div>
|
||||
<div class="loading-2">Loading...</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END PRELOADER -->
|
||||
|
||||
<!-- BACK TO TOP -->
|
||||
<div class="scroll-top">
|
||||
<i class="bi bi-arrow-up" style="font-size: 1.5rem; color: white;"></i>
|
||||
</div>
|
||||
<!-- BACK TO TOP -->
|
||||
|
||||
<!-- Animated Background -->
|
||||
<div class="animated-bg"></div>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-expand-lg fixed-top">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="index.html"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto align-items-center">
|
||||
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="features.html">Features</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="about.html">About</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="portfolio.html">Portfolio</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="pricing.html">Pricing</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
|
||||
<li class="nav-item ms-3">
|
||||
<button class="btn-primary-gradient">Get Started</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
|
||||
<!-- Hero Section -->
|
||||
<section class="hero" id="home">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-lg-6 fade-in">
|
||||
<div class="hero-content">
|
||||
<h1 class="title split-content start">Transform Your Business with AI Powered Solutions</h1>
|
||||
<p>Unleash the power of artificial intelligence to automate, analyze, and accelerate your digital growth Built <br> for modern startups and thinking agencies.</p>
|
||||
<div class="d-flex gap-3 mb-4">
|
||||
<button class="btn-primary-gradient">Start Free Trial</button>
|
||||
<button class="btn-outline-gradient">Watch Demo</button>
|
||||
</div>
|
||||
<div class="d-flex gap-4 align-items-center mt-4">
|
||||
<div>
|
||||
<div class="stars">★★★★★</div>
|
||||
<small class="text-secondary">4.9/5 from 2,500+ reviews</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 fade-in">
|
||||
<div class="hero-image">
|
||||
<svg class="ai-illustration" viewBox="0 0 600 600" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#667eea;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#764ba2;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient id="grad2" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#00f2ff;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#667eea;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<!-- AI Brain/Network -->
|
||||
<circle cx="300" cy="300" r="120" fill="url(#grad1)" opacity="0.2"/>
|
||||
<circle cx="300" cy="300" r="90" fill="url(#grad1)" opacity="0.3"/>
|
||||
<circle cx="300" cy="300" r="60" fill="url(#grad1)" opacity="0.5"/>
|
||||
|
||||
<!-- Neural Network Nodes -->
|
||||
<circle cx="300" cy="200" r="15" fill="url(#grad2)">
|
||||
<animate attributeName="r" values="15;20;15" dur="2s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="400" cy="250" r="12" fill="url(#grad2)">
|
||||
<animate attributeName="r" values="12;17;12" dur="2.5s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="200" cy="250" r="12" fill="url(#grad2)">
|
||||
<animate attributeName="r" values="12;17;12" dur="2.2s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="350" cy="350" r="10" fill="url(#grad2)">
|
||||
<animate attributeName="r" values="10;15;10" dur="2.8s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="250" cy="350" r="10" fill="url(#grad2)">
|
||||
<animate attributeName="r" values="10;15;10" dur="2.6s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="300" cy="400" r="15" fill="url(#grad2)">
|
||||
<animate attributeName="r" values="15;20;15" dur="2.3s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
|
||||
<!-- Connection Lines -->
|
||||
<line x1="300" y1="200" x2="400" y2="250" stroke="url(#grad2)" stroke-width="2" opacity="0.5">
|
||||
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2s" repeatCount="indefinite"/>
|
||||
</line>
|
||||
<line x1="300" y1="200" x2="200" y2="250" stroke="url(#grad2)" stroke-width="2" opacity="0.5">
|
||||
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.2s" repeatCount="indefinite"/>
|
||||
</line>
|
||||
<line x1="400" y1="250" x2="350" y2="350" stroke="url(#grad2)" stroke-width="2" opacity="0.5">
|
||||
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.5s" repeatCount="indefinite"/>
|
||||
</line>
|
||||
<line x1="200" y1="250" x2="250" y2="350" stroke="url(#grad2)" stroke-width="2" opacity="0.5">
|
||||
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.8s" repeatCount="indefinite"/>
|
||||
</line>
|
||||
<line x1="350" y1="350" x2="300" y2="400" stroke="url(#grad2)" stroke-width="2" opacity="0.5">
|
||||
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.3s" repeatCount="indefinite"/>
|
||||
</line>
|
||||
<line x1="250" y1="350" x2="300" y2="400" stroke="url(#grad2)" stroke-width="2" opacity="0.5">
|
||||
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.6s" repeatCount="indefinite"/>
|
||||
</line>
|
||||
|
||||
<!-- Floating Particles -->
|
||||
<circle cx="150" cy="150" r="5" fill="#00f2ff" opacity="0.6">
|
||||
<animateMotion dur="10s" repeatCount="indefinite">
|
||||
<mpath href="#orbit1"/>
|
||||
</animateMotion>
|
||||
</circle>
|
||||
<circle cx="450" cy="150" r="4" fill="#667eea" opacity="0.6">
|
||||
<animateMotion dur="12s" repeatCount="indefinite">
|
||||
<mpath href="#orbit2"/>
|
||||
</animateMotion>
|
||||
</circle>
|
||||
|
||||
<path id="orbit1" d="M 150,150 Q 300,50 450,150 T 150,150" fill="none"/>
|
||||
<path id="orbit2" d="M 450,150 Q 500,300 450,450 T 450,150" fill="none"/>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Logo Slider -->
|
||||
<div class="logo-slider">
|
||||
<div class="container">
|
||||
<p class="text-center mb-50 split-content end">TRUSTED BY LEADING COMPANIES WORLDWIDE</p>
|
||||
<div class="overflow-hidden">
|
||||
<div class="logo-track">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+VGVjaENvcnA8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RGF0YUZsb3c8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+QUlMYWJzPC90ZXh0Pjwvc3ZnPg==" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+SW5ub1RlY2g8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RnV0dXJlQUk8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
|
||||
<!-- Duplicate for seamless loop -->
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+VGVjaENvcnA8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RGF0YUZsb3c8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+QUlMYWJzPC90ZXh0Pjwvc3ZnPg==" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+SW5ub1RlY2g8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iNDAiPjx0ZXh0IHg9IjEwIiB5PSIyNSIgZm9udC1mYW1pbHk9IkFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjIwIiBmb250LXdlaWdodD0iYm9sZCIgZmlsbD0iIzk0YTNiOCI+RnV0dXJlQUk8L3RleHQ+PC9zdmc+" alt="Client Logo" class="company-logo">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Features Section -->
|
||||
<section class="atf-section-padding" id="features">
|
||||
<div class="container">
|
||||
<div class="section-title mb-50 text-center">
|
||||
<h2 class="title split-content start">Powerful Features for Modern Businesses</h2>
|
||||
<p class="section-subtitle fade-in">Everything you need to scale your operations with cutting-edge AI technology</p>
|
||||
</div>
|
||||
<div class="row g-4 text-center">
|
||||
<div class="col-md-6 col-lg-4 fadeInLeft">
|
||||
<div class="glass-card feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="bi bi-cpu"></i>
|
||||
</div>
|
||||
<h3>AI Automation</h3>
|
||||
<p>Automate repetitive tasks and workflows with intelligent machine learning algorithms that adapt to your business needs.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4 fadeInUp">
|
||||
<div class="glass-card feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="bi bi-graph-up-arrow"></i>
|
||||
</div>
|
||||
<h3>Advanced Analytics</h3>
|
||||
<p>Real-time insights and predictive analytics to make data-driven decisions and stay ahead of the competition.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4 fadeInRight">
|
||||
<div class="glass-card feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="bi bi-shield-check"></i>
|
||||
</div>
|
||||
<h3>Enterprise Security</h3>
|
||||
<p>Bank-level encryption and compliance with SOC 2, GDPR, and HIPAA standards to protect your data.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4 fadeInLeft">
|
||||
<div class="glass-card feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="bi bi-lightning-charge"></i>
|
||||
</div>
|
||||
<h3>Lightning Fast</h3>
|
||||
<p>Optimized infrastructure delivering sub-second response times and 99.9% uptime guarantee.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4 fadeInUp">
|
||||
<div class="glass-card feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="bi bi-people"></i>
|
||||
</div>
|
||||
<h3>Team Collaboration</h3>
|
||||
<p>Seamless collaboration tools with real-time sync, role-based access, and integrated communication.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-lg-4 fadeInRight">
|
||||
<div class="glass-card feature-card">
|
||||
<div class="feature-icon">
|
||||
<i class="bi bi-phone"></i>
|
||||
</div>
|
||||
<h3>API Integration</h3>
|
||||
<p>Connect with 1000+ apps and services through our robust RESTful API and webhook system.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Stats Section -->
|
||||
<div>
|
||||
<div class="container">
|
||||
<div class="stats-section">
|
||||
<div class="row">
|
||||
<div class="col-md-3 col-6 mb-4 mb-md-0 fadeInLeft">
|
||||
<div class="stat-item">
|
||||
<div class="stat-number"><span class="counter-value">10</span>K+</div>
|
||||
<div class="stat-label">Active Users</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 col-6 mb-4 mb-md-0 fadeInUp">
|
||||
<div class="stat-item">
|
||||
<div class="stat-number"><span class="counter-value">99</span>.9%</div>
|
||||
<div class="stat-label">Uptime SLA</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 col-6 fadeInUp">
|
||||
<div class="stat-item">
|
||||
<div class="stat-number"><span class="counter-value">50</span>M+</div>
|
||||
<div class="stat-label">API Requests</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3 col-6 fadeInRight">
|
||||
<div class="stat-item">
|
||||
<div class="stat-number"><span class="counter-value">24</span>/7</div>
|
||||
<div class="stat-label">Support</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- About / Why Choose Us -->
|
||||
<section class="atf-section-padding" id="about">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-lg-6">
|
||||
<div class="section-title mb-30 text-start">
|
||||
<h2 class="title text-start mb-4 split-content up">Why Choose NeuralSync?</h2>
|
||||
<p class="text-secondary" style="font-size: 1.1rem;">We're not just another SaaS platform. We're your innovation partner, combining cutting-edge AI technology with intuitive design to deliver exceptional results.</p>
|
||||
</div>
|
||||
<div class="about-content">
|
||||
<div class="mb-4">
|
||||
<h3 class="mb-3"><i class="fa-light fa-badge-check mr-5 text-info"></i> Innovation First</h3>
|
||||
<p class="text-secondary">Stay ahead with bleeding-edge AI technology that evolves with your needs.</p>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<h3 class="mb-3"><i class="fa-light fa-badge-check mr-5 text-info"></i> Scalable Architecture</h3>
|
||||
<p class="text-secondary">From startup to enterprise - our infrastructure grows seamlessly with your business.</p>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
<h3 class="mb-3"><i class="fa-light fa-badge-check mr-5 text-info"></i> World-Class Support</h3>
|
||||
<p class="text-secondary">24/7 expert support team ready to help you succeed at every step.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button class="btn-primary-gradient mt-3">DESCOVER MORE</button>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-6 zoomIn mt-lg-40">
|
||||
<div class="glass-card p-4">
|
||||
<svg viewBox="0 0 400 300" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="chartGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#667eea;stop-opacity:0.8" />
|
||||
<stop offset="100%" style="stop-color:#667eea;stop-opacity:0.1" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path d="M 20 250 L 80 200 L 140 180 L 200 120 L 260 100 L 320 50 L 380 30"
|
||||
stroke="#00f2ff" stroke-width="3" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M 20 250 L 80 200 L 140 180 L 200 120 L 260 100 L 320 50 L 380 30 L 380 300 L 20 300 Z"
|
||||
fill="url(#chartGrad)"/>
|
||||
<circle cx="80" cy="200" r="6" fill="#00f2ff">
|
||||
<animate attributeName="r" values="6;10;6" dur="2s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="200" cy="120" r="6" fill="#00f2ff">
|
||||
<animate attributeName="r" values="6;10;6" dur="2.5s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="320" cy="50" r="6" fill="#00f2ff">
|
||||
<animate attributeName="r" values="6;10;6" dur="3s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Product Showcase -->
|
||||
<section class="atf-section-padding pt-0">
|
||||
<div class="container">
|
||||
<div class="section-title mb-50 text-center">
|
||||
<h2 class="title split-content start">Experience the Platform</h2>
|
||||
<p class="section-subtitle fade-in">
|
||||
A beautiful, intuitive dashboard designed for power users and beginners alike
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="dashboard-mockup spread zoom-out">
|
||||
<svg viewBox="0 0 1200 700" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<!-- Dashboard Background -->
|
||||
<rect width="1200" height="700" fill="#1e293b" rx="20"/>
|
||||
|
||||
<!-- Header -->
|
||||
<rect width="1200" height="60" fill="#0f172a"/>
|
||||
<text x="30" y="38" font-family="Inter, sans-serif" font-size="24" font-weight="bold" fill="#667eea">NeuralSync</text>
|
||||
|
||||
<!-- Header Icons -->
|
||||
<foreignObject x="1050" y="10" width="140" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="display:flex;justify-content:flex-end;gap:10px;align-items:center;">
|
||||
<i class="bi bi-bell-fill" style="color:#667eea;font-size:20px;"></i>
|
||||
<i class="bi bi-gear-fill" style="color:#667eea;font-size:20px;"></i>
|
||||
<i class="bi bi-person-circle" style="color:#667eea;font-size:20px;"></i>
|
||||
</div>
|
||||
</foreignObject>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<rect x="0" y="60" width="240" height="640" fill="#0f172a"/>
|
||||
<rect x="20" y="100" width="200" height="40" rx="10" fill="#667eea" opacity="0.2"/>
|
||||
<rect x="20" y="160" width="200" height="40" rx="10" fill="#334155"/>
|
||||
<rect x="20" y="220" width="200" height="40" rx="10" fill="#334155"/>
|
||||
<foreignObject x="30" y="105" width="180" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
|
||||
<i class="bi bi-speedometer2 mr-5"></i> Dashboard
|
||||
</div>
|
||||
</foreignObject>
|
||||
<foreignObject x="30" y="165" width="180" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
|
||||
<i class="bi bi-people-fill mr-5"></i> Users
|
||||
</div>
|
||||
</foreignObject>
|
||||
<foreignObject x="30" y="225" width="180" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
|
||||
<i class="bi bi-bar-chart-fill mr-5"></i> Analytics
|
||||
</div>
|
||||
</foreignObject>
|
||||
|
||||
<!-- Main Content Area -->
|
||||
<rect x="260" y="80" width="920" height="600" fill="#1e293b" rx="15"/>
|
||||
|
||||
|
||||
<!-- Cards -->
|
||||
<rect x="280" y="100" width="280" height="180" rx="15" fill="#334155"/>
|
||||
<foreignObject x="300" y="120" width="240" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
|
||||
<i class="bi bi-graph-up mr-5"></i> Sales Overview
|
||||
</div>
|
||||
</foreignObject>
|
||||
|
||||
<rect x="580" y="100" width="280" height="180" rx="15" fill="#334155"/>
|
||||
<foreignObject x="600" y="120" width="240" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
|
||||
<i class="bi bi-people mr-5"></i> Active Users
|
||||
</div>
|
||||
</foreignObject>
|
||||
|
||||
<rect x="880" y="100" width="280" height="180" rx="15" fill="#334155"/>
|
||||
<foreignObject x="900" y="120" width="240" height="40">
|
||||
<div xmlns="http://www.w3.org/1999/xhtml" style="color:white;font-weight:600;font-family:Inter,sans-serif;">
|
||||
<i class="bi bi-wallet-fill mr-5"></i> Revenue
|
||||
</div>
|
||||
</foreignObject>
|
||||
|
||||
<!-- Chart Area -->
|
||||
<rect x="280" y="300" width="880" height="360" rx="15" fill="#334155"/>
|
||||
<path d="M 320 600 L 380 550 L 440 520 L 500 480 L 560 450 L 620 420 L 680 380 L 740 360 L 800 340 L 860 320 L 920 300 L 925 305 L 930 310 L 1100 315"
|
||||
stroke="#667eea" stroke-width="3" fill="none" stroke-linecap="round"/>
|
||||
|
||||
<!-- Glowing Elements -->
|
||||
<circle cx="420" cy="200" r="30" fill="#667eea" opacity="0.6">
|
||||
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="720" cy="200" r="30" fill="#00f2ff" opacity="0.6">
|
||||
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="2.5s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
<circle cx="1020" cy="200" r="30" fill="#764ba2" opacity="0.6">
|
||||
<animate attributeName="opacity" values="0.3;0.8;0.3" dur="3s" repeatCount="indefinite"/>
|
||||
</circle>
|
||||
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Portfolio / Case Studies -->
|
||||
<section class="atf-section-padding pt-0" id="portfolio">
|
||||
<div class="container">
|
||||
<div class="section-title mb-50 text-center">
|
||||
<h2 class="title split-content start">Success Stories</h2>
|
||||
<p class="section-subtitle fade-in">Real results from real companies transforming their businesses with NeuralSync</p>
|
||||
</div>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-md-6 fade-in">
|
||||
<div class="glass-card portfolio-item">
|
||||
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
|
||||
<rect width="400" height="350" fill="#667eea"/>
|
||||
<circle cx="200" cy="175" r="80" fill="rgba(255,255,255,0.2)"/>
|
||||
<path d="M 150 175 L 190 215 L 270 135" stroke="white" stroke-width="8" fill="none" stroke-linecap="round"/>
|
||||
</svg>
|
||||
<div class="portfolio-overlay">
|
||||
<div class="portfolio-title">TechStartup Inc.</div>
|
||||
<div class="portfolio-category">AI Automation • 300% Growth</div>
|
||||
<p class="mt-3">Automated customer support system reduced response time by 80%</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 fade-in">
|
||||
<div class="glass-card portfolio-item">
|
||||
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
|
||||
<rect width="400" height="350" fill="#764ba2"/>
|
||||
<rect x="100" y="100" width="80" height="150" rx="10" fill="rgba(255,255,255,0.2)"/>
|
||||
<rect x="200" y="80" width="80" height="170" rx="10" fill="rgba(255,255,255,0.3)"/>
|
||||
<rect x="300" y="60" width="80" height="190" rx="10" fill="rgba(255,255,255,0.2)"/>
|
||||
</svg>
|
||||
<div class="portfolio-overlay">
|
||||
<div class="portfolio-title">DataFlow Solutions</div>
|
||||
<div class="portfolio-category">Analytics Platform • 500K Users</div>
|
||||
<p class="mt-3">Built scalable analytics platform processing 10TB daily</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 fade-in">
|
||||
<div class="glass-card portfolio-item">
|
||||
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
|
||||
<rect width="400" height="350" fill="#00f2ff"/>
|
||||
<circle cx="200" cy="175" r="100" fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="3"/>
|
||||
<circle cx="200" cy="175" r="70" fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="3"/>
|
||||
<circle cx="200" cy="175" r="40" fill="rgba(255,255,255,0.4)"/>
|
||||
</svg>
|
||||
<div class="portfolio-overlay">
|
||||
<div class="portfolio-title">Marketing Pro Agency</div>
|
||||
<div class="portfolio-category">Automation Tools • $2M Revenue</div>
|
||||
<p class="mt-3">Marketing automation increased client retention by 65%</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 fade-in">
|
||||
<div class="glass-card portfolio-item">
|
||||
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
|
||||
<rect width="400" height="350" fill="#f093fb"/>
|
||||
<path d="M 50 300 L 100 250 L 150 270 L 200 200 L 250 220 L 300 150 L 350 100"
|
||||
stroke="white" stroke-width="5" fill="none" stroke-linecap="round"/>
|
||||
<circle cx="200" cy="200" r="8" fill="white"/>
|
||||
<circle cx="300" cy="150" r="8" fill="white"/>
|
||||
<circle cx="350" cy="100" r="8" fill="white"/>
|
||||
</svg>
|
||||
<div class="portfolio-overlay">
|
||||
<div class="portfolio-title">FinTech Innovations</div>
|
||||
<div class="portfolio-category">ML Predictions • 95% Accuracy</div>
|
||||
<p class="mt-3">AI-powered fraud detection saved $5M in first quarter</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Pricing Section -->
|
||||
<section class="atf-section-padding pt-0" id="pricing">
|
||||
<div class="container">
|
||||
<div class="section-title mb-50 text-center">
|
||||
<h2 class="title split-content start">Simple, Transparent Pricing</h2>
|
||||
<p class="section-subtitle fade-in">Choose the perfect plan for your business. All plans include 14-day free trial.</p>
|
||||
</div>
|
||||
|
||||
<div class="row g-4 justify-content-center mt-40">
|
||||
<div class="col-lg-4 col-md-6 fadeInLeft">
|
||||
<div class="pricing-card">
|
||||
<div class="glass-card">
|
||||
<h3 class="mb-3">Starter</h3>
|
||||
<p class="text-secondary mb-4">Perfect for small teams and startups</p>
|
||||
<div class="price">$49<span style="font-size: 1.5rem; color: var(--text-secondary);">/mo</span></div>
|
||||
<ul class="pricing-features">
|
||||
<li><i class="bi bi-check-circle-fill"></i> Up to 5 team members</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> 10,000 API requests/month</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Basic analytics</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Email support</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> 10GB storage</li>
|
||||
</ul>
|
||||
<button class="btn-outline-gradient w-100">Get Started</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4 col-md-6 fadeInUp">
|
||||
<div class="pricing-card featured">
|
||||
<div class="pricing-badge">MOST POPULAR</div>
|
||||
<div class="glass-card">
|
||||
<h3 class="mb-3">Professional</h3>
|
||||
<p class="text-secondary mb-4">For growing businesses and agencies</p>
|
||||
<div class="price">$149<span style="font-size: 1.5rem; color: var(--text-secondary);">/mo</span></div>
|
||||
<ul class="pricing-features">
|
||||
<li><i class="bi bi-check-circle-fill"></i> Up to 25 team members</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> 100,000 API requests/month</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Advanced analytics & AI</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Priority support 24/7</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> 100GB storage</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Custom integrations</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> White-label options</li>
|
||||
</ul>
|
||||
<button class="btn-primary-gradient w-100">Get Started</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4 col-md-6 fadeInRight">
|
||||
<div class="pricing-card">
|
||||
<div class="glass-card">
|
||||
<h3 class="mb-3">Enterprise</h3>
|
||||
<p class="text-secondary mb-4">For large organizations with custom needs</p>
|
||||
<div class="price">Custom</div>
|
||||
<ul class="pricing-features">
|
||||
<li><i class="bi bi-check-circle-fill"></i> Unlimited team members</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Unlimited API requests</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Custom AI models</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Dedicated success manager</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Unlimited storage</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> On-premise deployment</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> SLA guarantee</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Custom contracts</li>
|
||||
</ul>
|
||||
<button class="btn-outline-gradient w-100">Contact Sales</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Testimonials -->
|
||||
<section class="atf-section-padding pt-0">
|
||||
<div class="container">
|
||||
<div class="row align-items-center justify-content-start">
|
||||
<div class="section-title style1 mb-50 text-start">
|
||||
<h2 class="title split-content end ">Loved by Thousands of Companies</h2>
|
||||
<p class="section-subtitle fade-in ">Don't just take our word for it - hear from our satisfied customers</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-4 atf_client-slider slick-arrow-2">
|
||||
<div class="col-lg-4 col-md-6 fade-in">
|
||||
<div class="glass-card testimonial-card">
|
||||
<div class="stars">★★★★★</div>
|
||||
<p class="testimonial-text">"NeuralSync transformed how we handle customer data. The AI automation saved us 20 hours per week and increased our conversion rate by 45%."</p>
|
||||
<svg width="80" height="80" class="testimonial-image">
|
||||
<circle cx="40" cy="40" r="37" fill="#667eea"/>
|
||||
<text x="40" y="50" text-anchor="middle" font-family="Inter" font-size="32" font-weight="bold" fill="white">SK</text>
|
||||
</svg>
|
||||
<div class="testimonial-author">Sarah Kim</div>
|
||||
<div class="testimonial-role">CEO, TechFlow Solutions</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4 col-md-6 fade-in">
|
||||
<div class="glass-card testimonial-card">
|
||||
<div class="stars">★★★★★</div>
|
||||
<p class="testimonial-text">"The best investment we've made. The platform is incredibly intuitive and the support team is outstanding. Highly recommend to any growing startup."</p>
|
||||
<svg width="80" height="80" class="testimonial-image">
|
||||
<circle cx="40" cy="40" r="37" fill="#764ba2"/>
|
||||
<text x="40" y="50" text-anchor="middle" font-family="Inter" font-size="32" font-weight="bold" fill="white">MJ</text>
|
||||
</svg>
|
||||
<div class="testimonial-author">Michael Johnson</div>
|
||||
<div class="testimonial-role">CTO, DataVerse Inc</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4 col-md-6 fade-in">
|
||||
<div class="glass-card testimonial-card">
|
||||
<div class="stars">★★★★★</div>
|
||||
<p class="testimonial-text">"Seamless integration with our existing tools. The analytics dashboard gives us insights we never had before. Game changer for our agency."</p>
|
||||
<svg width="80" height="80" class="testimonial-image">
|
||||
<circle cx="40" cy="40" r="37" fill="#00f2ff"/>
|
||||
<text x="40" y="50" text-anchor="middle" font-family="Inter" font-size="32" font-weight="bold" fill="white">EP</text>
|
||||
</svg>
|
||||
<div class="testimonial-author">Emily Parker</div>
|
||||
<div class="testimonial-role">Director, Creative Digital Agency</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-4 col-md-6 fade-in">
|
||||
<div class="glass-card testimonial-card">
|
||||
<div class="stars">★★★★★</div>
|
||||
<p class="testimonial-text">"NeuralSync transformed how we handle customer data. The AI automation saved us 20 hours per week and increased our conversion rate by 45%."</p>
|
||||
<svg width="80" height="80" class="testimonial-image">
|
||||
<circle cx="40" cy="40" r="37" fill="#667eea"/>
|
||||
<text x="40" y="50" text-anchor="middle" font-family="Inter" font-size="32" font-weight="bold" fill="white">SK</text>
|
||||
</svg>
|
||||
<div class="testimonial-author">Sarah Kim</div>
|
||||
<div class="testimonial-role">CEO, TechFlow Solutions</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4 col-md-6 fade-in">
|
||||
<div class="glass-card testimonial-card">
|
||||
<div class="stars">★★★★★</div>
|
||||
<p class="testimonial-text">"The best investment we've made. The platform is incredibly intuitive and the support team is outstanding. Highly recommend to any growing startup."</p>
|
||||
<svg width="80" height="80" class="testimonial-image">
|
||||
<circle cx="40" cy="40" r="37" fill="#764ba2"/>
|
||||
<text x="40" y="50" text-anchor="middle" font-family="Inter" font-size="32" font-weight="bold" fill="white">MJ</text>
|
||||
</svg>
|
||||
<div class="testimonial-author">Michael Johnson</div>
|
||||
<div class="testimonial-role">CTO, DataVerse Inc</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4 col-md-6 fade-in">
|
||||
<div class="glass-card testimonial-card">
|
||||
<div class="stars">★★★★★</div>
|
||||
<p class="testimonial-text">"Seamless integration with our existing tools. The analytics dashboard gives us insights we never had before. Game changer for our agency."</p>
|
||||
<svg width="80" height="80" class="testimonial-image">
|
||||
<circle cx="40" cy="40" r="37" fill="#00f2ff"/>
|
||||
<text x="40" y="50" text-anchor="middle" font-family="Inter" font-size="32" font-weight="bold" fill="white">EP</text>
|
||||
</svg>
|
||||
<div class="testimonial-author">Emily Parker</div>
|
||||
<div class="testimonial-role">Director, Creative Digital Agency</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- CTA Banner -->
|
||||
<section>
|
||||
<div class="container">
|
||||
<div class="cta-banner fade-in">
|
||||
<h2>Ready to Transform Your Business?</h2>
|
||||
<p>Join 10,000+ companies already using NeuralSync to automate, analyze, and accelerate their growth.</p>
|
||||
<div class="d-flex gap-3 justify-content-center flex-wrap">
|
||||
<button class="btn-primary-gradient" style="background: white; color: #667eea;">Start Free Trial</button>
|
||||
<button class="btn-outline-gradient" style="border-color: white; color: white;">Schedule Demo</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- FAQ Section -->
|
||||
<section class="atf-section-padding">
|
||||
<div class="container">
|
||||
<div class="section-title mb-50 text-center">
|
||||
<h2 class="title split-content end">Frequently Asked Questions</h2>
|
||||
<p class="section-subtitle fade-in">Everything you need to know about NeuralSync</p>
|
||||
</div>
|
||||
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-8 fade-in">
|
||||
<div class="faq-item">
|
||||
<div class="faq-question">
|
||||
<span>What is NeuralSync and how does it work?</span>
|
||||
<i class="bi bi-chevron-down"></i>
|
||||
</div>
|
||||
<div class="faq-answer">
|
||||
NeuralSync is an AI-powered SaaS platform that helps businesses automate workflows, analyze data, and scale operations. Our machine learning algorithms adapt to your specific needs and continuously improve performance over time.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="faq-item">
|
||||
<div class="faq-question">
|
||||
<span>Can I try NeuralSync before committing?</span>
|
||||
<i class="bi bi-chevron-down"></i>
|
||||
</div>
|
||||
<div class="faq-answer">
|
||||
Absolutely! All plans include a 14-day free trial with full access to features. No credit card required to start. You can cancel anytime during the trial period.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="faq-item">
|
||||
<div class="faq-question">
|
||||
<span>How secure is my data?</span>
|
||||
<i class="bi bi-chevron-down"></i>
|
||||
</div>
|
||||
<div class="faq-answer">
|
||||
Security is our top priority. We use bank-level 256-bit encryption, are SOC 2 Type II certified, and comply with GDPR, HIPAA, and other international standards. Your data is stored in encrypted databases with regular backups.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="faq-item">
|
||||
<div class="faq-question">
|
||||
<span>What kind of support do you provide?</span>
|
||||
<i class="bi bi-chevron-down"></i>
|
||||
</div>
|
||||
<div class="faq-answer">
|
||||
We offer email support for Starter plans, 24/7 priority support for Professional plans, and dedicated success managers for Enterprise clients. We also have extensive documentation, video tutorials, and community forums.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="faq-item">
|
||||
<div class="faq-question">
|
||||
<span>Can I change my plan later?</span>
|
||||
<i class="bi bi-chevron-down"></i>
|
||||
</div>
|
||||
<div class="faq-answer">
|
||||
Yes! You can upgrade or downgrade your plan at any time. When upgrading, you'll get immediate access to new features. When downgrading, changes take effect at the start of your next billing cycle.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="faq-item">
|
||||
<div class="faq-question">
|
||||
<span>Do you offer refunds?</span>
|
||||
<i class="bi bi-chevron-down"></i>
|
||||
</div>
|
||||
<div class="faq-answer">
|
||||
Yes, we offer a 30-day money-back guarantee. If you're not satisfied with NeuralSync within the first 30 days, we'll provide a full refund, no questions asked.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
<!-- Newsletter Section -->
|
||||
<section>
|
||||
<div class="container">
|
||||
<div class="newsletter-section fade-in">
|
||||
<h2>Stay Updated</h2>
|
||||
<p>Get the latest AI insights, product updates, and exclusive offers delivered to your inbox.</p>
|
||||
<form class="d-flex justify-content-center flex-wrap gap-3" onsubmit="subscribeNewsletter(event)">
|
||||
<input type="email" class="newsletter-input" placeholder="Enter your email address" required>
|
||||
<button type="submit" class="btn-primary-gradient" style="background: white; color: #667eea;">Subscribe</button>
|
||||
</form>
|
||||
<p class="description">We respect your privacy. Unsubscribe at any time.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Contact Form -->
|
||||
<section class="atf-section-padding" id="contact">
|
||||
<div class="container">
|
||||
<div class="section-title mb-50 text-center">
|
||||
<h2 class="title split-content end">Get In Touch</h2>
|
||||
<p class="section-subtitle fade-in">Have questions? We'd love to hear from you Send us a message.</p>
|
||||
</div>
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-8 fade-in">
|
||||
<form class="contact-form glass-card" onsubmit="submitContact(event)">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<input type="text" placeholder="Your Name" required>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<input type="email" placeholder="Your Email" required>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<input type="text" placeholder="Subject">
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<textarea rows="6" placeholder="Your Message" required></textarea>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<button type="submit" class="btn-primary-gradient w-100">Send Message</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<!-- Footer -->
|
||||
<div class="footer">
|
||||
<div class="container">
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-4 col-md-6 fadeInLeft">
|
||||
<h3 class="navbar-brand mb-50"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</h3>
|
||||
<p class="text-secondary mb-4">Empowering businesses with cutting-edge AI technology to automate, analyze, and accelerate growth in the digital age.</p>
|
||||
<div class="social-links">
|
||||
<a href="#"><i class="fab fa-x-twitter"></i></a>
|
||||
<a href="#"><i class="bi bi-linkedin"></i></a>
|
||||
<a href="#"><i class="bi bi-github"></i></a>
|
||||
<a href="#"><i class="bi bi-instagram"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Product</h3>
|
||||
<ul>
|
||||
<li><a href="#features">Features</a></li>
|
||||
<li><a href="#pricing">Pricing</a></li>
|
||||
<li><a href="#">Security</a></li>
|
||||
<li><a href="#">Integrations</a></li>
|
||||
<li><a href="#">API Docs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Company</h3>
|
||||
<ul>
|
||||
<li><a href="#about">About Us</a></li>
|
||||
<li><a href="#">Careers</a></li>
|
||||
<li><a href="#">Blog</a></li>
|
||||
<li><a href="#">Press Kit</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
<li><a href="#">Documentation</a></li>
|
||||
<li><a href="#">Tutorials</a></li>
|
||||
<li><a href="#">Community</a></li>
|
||||
<li><a href="#">Support</a></li>
|
||||
<li><a href="#">Status</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInRight">
|
||||
<h3>Legal</h3>
|
||||
<ul>
|
||||
<li><a href="#">Privacy Policy</a></li>
|
||||
<li><a href="#">Terms of Service</a></li>
|
||||
<li><a href="#">Cookie Policy</a></li>
|
||||
<li><a href="#">GDPR</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr style="border-color: rgba(255,255,255,0.1); margin: 3rem 0 2rem;">
|
||||
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
|
||||
<p class="text-secondary mb-0">© 2026 NeuralSync. All rights reserved.</p>
|
||||
</div>
|
||||
<div class="col-md-6 text-center text-md-end">
|
||||
<p class="text-secondary mb-0">Made with <span style="color: #f093fb;">♥</span> for innovators worldwide</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END PRELOADER -->
|
||||
|
||||
<!-- jQuery, Bootstrap, GSAP -->
|
||||
<script src="assets/js/jquery.min.js"></script>
|
||||
<!-- Latest compiled and minified Bootstrap -->
|
||||
<script src="assets/js/bootstrap.min.js"></script>
|
||||
<script src="assets/js/plugin.min.js"></script>
|
||||
<script src="assets/js/gsap.js"></script>
|
||||
<!-- Template scripts -->
|
||||
<script src="assets/js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
259
templates/template_1/Main File/NeuralSync/portfolio.html
Normal file
@@ -0,0 +1,259 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Transform your business with cutting-edge AI solutions. Premium SaaS platform for startups and digital agencies.">
|
||||
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<!-- Bootstrap 5 -->
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
|
||||
<!-- Bootstrap Icons -->
|
||||
<link rel="stylesheet" href="assets/fonts/bootstrap-icons.min.css">
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="assets/css/slick.min.css">
|
||||
<link rel="stylesheet" href="assets/css/theme-spacing.min.css">
|
||||
<!-- Template styles -->
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<link rel="stylesheet" href="assets/css/responsive.css">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="page-wrapper">
|
||||
|
||||
<!-- START PRELOADER -->
|
||||
<div class="preloader">
|
||||
<div class="status">
|
||||
<div class="loader">
|
||||
<div class="loading-1"></div>
|
||||
<div class="loading-2">Loading...</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END PRELOADER -->
|
||||
|
||||
<!-- BACK TO TOP -->
|
||||
<div class="scroll-top">
|
||||
<i class="bi bi-arrow-up" style="font-size: 1.5rem; color: white;"></i>
|
||||
</div>
|
||||
<!-- BACK TO TOP -->
|
||||
|
||||
<!-- Animated Background -->
|
||||
<div class="animated-bg"></div>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-expand-lg fixed-top">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="index.html"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto align-items-center">
|
||||
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="features.html">Features</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="about.html">About</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="portfolio.html">Portfolio</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="pricing.html">Pricing</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
|
||||
<li class="nav-item ms-3">
|
||||
<button class="btn-primary-gradient">Get Started</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
|
||||
<!-- START BREADCRUMB -->
|
||||
<section class="breadcrumb-area position-relative black-bg breadcrumb-cover-bg breadcrumb-spacing breadcrumb-bg-attach);">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center text-center">
|
||||
<div class="col-xxl-12">
|
||||
<div class="breadcrumb-content p-relative z-index-2">
|
||||
<div class="breadcrumb-single-content mb-10">
|
||||
<span><a href="index.html"><i class="fa-light fa-house fa-fade me-2"></i>HOME</a></span>
|
||||
<span class="breadcrumb-sub-title">PORTFOLIO</span>
|
||||
</div>
|
||||
<h3 class="breadcrumb-title split-content end">Our Portfolio</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END BREADCRUMB -->
|
||||
|
||||
<!-- Portfolio / Case Studies -->
|
||||
<section class="atf-section-padding" id="portfolio">
|
||||
<div class="container">
|
||||
<div class="section-title mb-50 text-center">
|
||||
<h2 class="title split-content start">Success Stories</h2>
|
||||
<p class="section-subtitle fade-in">Real results from real companies transforming their businesses with NeuralSync</p>
|
||||
</div>
|
||||
|
||||
<div class="row g-4">
|
||||
<div class="col-md-6 fade-in">
|
||||
<div class="glass-card portfolio-item">
|
||||
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
|
||||
<rect width="400" height="350" fill="#667eea"/>
|
||||
<circle cx="200" cy="175" r="80" fill="rgba(255,255,255,0.2)"/>
|
||||
<path d="M 150 175 L 190 215 L 270 135" stroke="white" stroke-width="8" fill="none" stroke-linecap="round"/>
|
||||
</svg>
|
||||
<div class="portfolio-overlay">
|
||||
<div class="portfolio-title">TechStartup Inc.</div>
|
||||
<div class="portfolio-category">AI Automation • 300% Growth</div>
|
||||
<p class="mt-3">Automated customer support system reduced response time by 80%</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 fade-in">
|
||||
<div class="glass-card portfolio-item">
|
||||
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
|
||||
<rect width="400" height="350" fill="#764ba2"/>
|
||||
<rect x="100" y="100" width="80" height="150" rx="10" fill="rgba(255,255,255,0.2)"/>
|
||||
<rect x="200" y="80" width="80" height="170" rx="10" fill="rgba(255,255,255,0.3)"/>
|
||||
<rect x="300" y="60" width="80" height="190" rx="10" fill="rgba(255,255,255,0.2)"/>
|
||||
</svg>
|
||||
<div class="portfolio-overlay">
|
||||
<div class="portfolio-title">DataFlow Solutions</div>
|
||||
<div class="portfolio-category">Analytics Platform • 500K Users</div>
|
||||
<p class="mt-3">Built scalable analytics platform processing 10TB daily</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 fade-in">
|
||||
<div class="glass-card portfolio-item">
|
||||
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
|
||||
<rect width="400" height="350" fill="#00f2ff"/>
|
||||
<circle cx="200" cy="175" r="100" fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="3"/>
|
||||
<circle cx="200" cy="175" r="70" fill="none" stroke="rgba(255,255,255,0.3)" stroke-width="3"/>
|
||||
<circle cx="200" cy="175" r="40" fill="rgba(255,255,255,0.4)"/>
|
||||
</svg>
|
||||
<div class="portfolio-overlay">
|
||||
<div class="portfolio-title">Marketing Pro Agency</div>
|
||||
<div class="portfolio-category">Automation Tools • $2M Revenue</div>
|
||||
<p class="mt-3">Marketing automation increased client retention by 65%</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 fade-in">
|
||||
<div class="glass-card portfolio-item">
|
||||
<svg viewBox="0 0 400 350" xmlns="http://www.w3.org/2000/svg" class="portfolio-image">
|
||||
<rect width="400" height="350" fill="#f093fb"/>
|
||||
<path d="M 50 300 L 100 250 L 150 270 L 200 200 L 250 220 L 300 150 L 350 100"
|
||||
stroke="white" stroke-width="5" fill="none" stroke-linecap="round"/>
|
||||
<circle cx="200" cy="200" r="8" fill="white"/>
|
||||
<circle cx="300" cy="150" r="8" fill="white"/>
|
||||
<circle cx="350" cy="100" r="8" fill="white"/>
|
||||
</svg>
|
||||
<div class="portfolio-overlay">
|
||||
<div class="portfolio-title">FinTech Innovations</div>
|
||||
<div class="portfolio-category">ML Predictions • 95% Accuracy</div>
|
||||
<p class="mt-3">AI-powered fraud detection saved $5M in first quarter</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<!-- Footer -->
|
||||
<div class="footer">
|
||||
<div class="container">
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-4 col-md-6 fadeInLeft">
|
||||
<h3 class="navbar-brand mb-50"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</h3>
|
||||
<p class="text-secondary mb-4">Empowering businesses with cutting-edge AI technology to automate, analyze, and accelerate growth in the digital age.</p>
|
||||
<div class="social-links">
|
||||
<a href="#"><i class="fab fa-x-twitter"></i></a>
|
||||
<a href="#"><i class="bi bi-linkedin"></i></a>
|
||||
<a href="#"><i class="bi bi-github"></i></a>
|
||||
<a href="#"><i class="bi bi-instagram"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Product</h3>
|
||||
<ul>
|
||||
<li><a href="#features">Features</a></li>
|
||||
<li><a href="#pricing">Pricing</a></li>
|
||||
<li><a href="#">Security</a></li>
|
||||
<li><a href="#">Integrations</a></li>
|
||||
<li><a href="#">API Docs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Company</h3>
|
||||
<ul>
|
||||
<li><a href="#about">About Us</a></li>
|
||||
<li><a href="#">Careers</a></li>
|
||||
<li><a href="#">Blog</a></li>
|
||||
<li><a href="#">Press Kit</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
<li><a href="#">Documentation</a></li>
|
||||
<li><a href="#">Tutorials</a></li>
|
||||
<li><a href="#">Community</a></li>
|
||||
<li><a href="#">Support</a></li>
|
||||
<li><a href="#">Status</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInRight">
|
||||
<h3>Legal</h3>
|
||||
<ul>
|
||||
<li><a href="#">Privacy Policy</a></li>
|
||||
<li><a href="#">Terms of Service</a></li>
|
||||
<li><a href="#">Cookie Policy</a></li>
|
||||
<li><a href="#">GDPR</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr style="border-color: rgba(255,255,255,0.1); margin: 3rem 0 2rem;">
|
||||
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
|
||||
<p class="text-secondary mb-0">© 2026 NeuralSync. All rights reserved.</p>
|
||||
</div>
|
||||
<div class="col-md-6 text-center text-md-end">
|
||||
<p class="text-secondary mb-0">Made with <span style="color: #f093fb;">?</span> for innovators worldwide</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END PRELOADER -->
|
||||
|
||||
<!-- jQuery, Bootstrap, GSAP -->
|
||||
<script src="assets/js/jquery.min.js"></script>
|
||||
<!-- Latest compiled and minified Bootstrap -->
|
||||
<script src="assets/js/bootstrap.min.js"></script>
|
||||
<script src="assets/js/plugin.min.js"></script>
|
||||
<script src="assets/js/gsap.js"></script>
|
||||
<!-- Template scripts -->
|
||||
<script src="assets/js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
255
templates/template_1/Main File/NeuralSync/pricing.html
Normal file
@@ -0,0 +1,255 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Transform your business with cutting-edge AI solutions. Premium SaaS platform for startups and digital agencies.">
|
||||
<title>NeuralSync - AI-Powered SaaS Solutions for Modern Businesses HTML Template</title>
|
||||
|
||||
<!-- Google Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<!-- Bootstrap 5 -->
|
||||
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
|
||||
<!-- Bootstrap Icons -->
|
||||
<link rel="stylesheet" href="assets/fonts/bootstrap-icons.min.css">
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="assets/fonts/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="assets/css/slick.min.css">
|
||||
<link rel="stylesheet" href="assets/css/theme-spacing.min.css">
|
||||
<!-- Template styles -->
|
||||
<link rel="stylesheet" href="assets/css/style.css">
|
||||
<link rel="stylesheet" href="assets/css/responsive.css">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="page-wrapper">
|
||||
|
||||
<!-- START PRELOADER -->
|
||||
<div class="preloader">
|
||||
<div class="status">
|
||||
<div class="loader">
|
||||
<div class="loading-1"></div>
|
||||
<div class="loading-2">Loading...</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END PRELOADER -->
|
||||
|
||||
<!-- BACK TO TOP -->
|
||||
<div class="scroll-top">
|
||||
<i class="bi bi-arrow-up" style="font-size: 1.5rem; color: white;"></i>
|
||||
</div>
|
||||
<!-- BACK TO TOP -->
|
||||
|
||||
<!-- Animated Background -->
|
||||
<div class="animated-bg"></div>
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar navbar-expand-lg fixed-top">
|
||||
<div class="container">
|
||||
<a class="navbar-brand" href="index.html"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav ms-auto align-items-center">
|
||||
<li class="nav-item"><a class="nav-link" href="index.html">Home</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="features.html">Features</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="about.html">About</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="portfolio.html">Portfolio</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="pricing.html">Pricing</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
|
||||
<li class="nav-item ms-3">
|
||||
<button class="btn-primary-gradient">Get Started</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
|
||||
<!-- START BREADCRUMB -->
|
||||
<section class="breadcrumb-area position-relative black-bg breadcrumb-cover-bg breadcrumb-spacing breadcrumb-bg-attach);">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center text-center">
|
||||
<div class="col-xxl-12">
|
||||
<div class="breadcrumb-content p-relative z-index-2">
|
||||
<div class="breadcrumb-single-content mb-10">
|
||||
<span><a href="index.html"><i class="fa-light fa-house fa-fade me-2"></i>HOME</a></span>
|
||||
<span class="breadcrumb-sub-title">PRICING</span>
|
||||
</div>
|
||||
<h3 class="breadcrumb-title split-content end">Our Pricing</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!-- END BREADCRUMB -->
|
||||
|
||||
|
||||
<!-- Pricing Section -->
|
||||
<section class="atf-section-padding" id="pricing">
|
||||
<div class="container">
|
||||
<div class="section-title mb-50 text-center">
|
||||
<h2 class="title split-content start">Simple, Transparent Pricing</h2>
|
||||
<p class="section-subtitle fade-in">Choose the perfect plan for your business. All plans include 14-day free trial.</p>
|
||||
</div>
|
||||
|
||||
<div class="row g-4 justify-content-center mt-40">
|
||||
<div class="col-lg-4 col-md-6 fadeInLeft">
|
||||
<div class="pricing-card">
|
||||
<div class="glass-card">
|
||||
<h3 class="mb-3">Starter</h3>
|
||||
<p class="text-secondary mb-4">Perfect for small teams and startups</p>
|
||||
<div class="price">$49<span style="font-size: 1.5rem; color: var(--text-secondary);">/mo</span></div>
|
||||
<ul class="pricing-features">
|
||||
<li><i class="bi bi-check-circle-fill"></i> Up to 5 team members</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> 10,000 API requests/month</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Basic analytics</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Email support</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> 10GB storage</li>
|
||||
</ul>
|
||||
<button class="btn-outline-gradient w-100">Get Started</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4 col-md-6 fadeInUp">
|
||||
<div class="pricing-card featured">
|
||||
<div class="pricing-badge">MOST POPULAR</div>
|
||||
<div class="glass-card">
|
||||
<h3 class="mb-3">Professional</h3>
|
||||
<p class="text-secondary mb-4">For growing businesses and agencies</p>
|
||||
<div class="price">$149<span style="font-size: 1.5rem; color: var(--text-secondary);">/mo</span></div>
|
||||
<ul class="pricing-features">
|
||||
<li><i class="bi bi-check-circle-fill"></i> Up to 25 team members</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> 100,000 API requests/month</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Advanced analytics & AI</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Priority support 24/7</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> 100GB storage</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Custom integrations</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> White-label options</li>
|
||||
</ul>
|
||||
<button class="btn-primary-gradient w-100">Get Started</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-4 col-md-6 fadeInRight">
|
||||
<div class="pricing-card">
|
||||
<div class="glass-card">
|
||||
<h3 class="mb-3">Enterprise</h3>
|
||||
<p class="text-secondary mb-4">For large organizations with custom needs</p>
|
||||
<div class="price">Custom</div>
|
||||
<ul class="pricing-features">
|
||||
<li><i class="bi bi-check-circle-fill"></i> Unlimited team members</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Unlimited API requests</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Custom AI models</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Dedicated success manager</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Unlimited storage</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> On-premise deployment</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> SLA guarantee</li>
|
||||
<li><i class="bi bi-check-circle-fill"></i> Custom contracts</li>
|
||||
</ul>
|
||||
<button class="btn-outline-gradient w-100">Contact Sales</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<!-- Footer -->
|
||||
<div class="footer">
|
||||
<div class="container">
|
||||
<div class="row g-4">
|
||||
<div class="col-lg-4 col-md-6 fadeInLeft">
|
||||
<h3 class="navbar-brand mb-50"><i class="fa-light fa-sparkles mr-5"></i>NeuralSync</h3>
|
||||
<p class="text-secondary mb-4">Empowering businesses with cutting-edge AI technology to automate, analyze, and accelerate growth in the digital age.</p>
|
||||
<div class="social-links">
|
||||
<a href="#"><i class="fab fa-x-twitter"></i></a>
|
||||
<a href="#"><i class="bi bi-linkedin"></i></a>
|
||||
<a href="#"><i class="bi bi-github"></i></a>
|
||||
<a href="#"><i class="bi bi-instagram"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Product</h3>
|
||||
<ul>
|
||||
<li><a href="#features">Features</a></li>
|
||||
<li><a href="#pricing">Pricing</a></li>
|
||||
<li><a href="#">Security</a></li>
|
||||
<li><a href="#">Integrations</a></li>
|
||||
<li><a href="#">API Docs</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Company</h3>
|
||||
<ul>
|
||||
<li><a href="#about">About Us</a></li>
|
||||
<li><a href="#">Careers</a></li>
|
||||
<li><a href="#">Blog</a></li>
|
||||
<li><a href="#">Press Kit</a></li>
|
||||
<li><a href="#contact">Contact</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInUp">
|
||||
<h3>Resources</h3>
|
||||
<ul>
|
||||
<li><a href="#">Documentation</a></li>
|
||||
<li><a href="#">Tutorials</a></li>
|
||||
<li><a href="#">Community</a></li>
|
||||
<li><a href="#">Support</a></li>
|
||||
<li><a href="#">Status</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-lg-2 col-md-6 fadeInRight">
|
||||
<h3>Legal</h3>
|
||||
<ul>
|
||||
<li><a href="#">Privacy Policy</a></li>
|
||||
<li><a href="#">Terms of Service</a></li>
|
||||
<li><a href="#">Cookie Policy</a></li>
|
||||
<li><a href="#">GDPR</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr style="border-color: rgba(255,255,255,0.1); margin: 3rem 0 2rem;">
|
||||
|
||||
<div class="row align-items-center">
|
||||
<div class="col-md-6 text-center text-md-start mb-3 mb-md-0">
|
||||
<p class="text-secondary mb-0">© 2026 NeuralSync. All rights reserved.</p>
|
||||
</div>
|
||||
<div class="col-md-6 text-center text-md-end">
|
||||
<p class="text-secondary mb-0">Made with <span style="color: #f093fb;">?</span> for innovators worldwide</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
|
||||
|
||||
</div>
|
||||
<!-- END PRELOADER -->
|
||||
|
||||
<!-- jQuery, Bootstrap, GSAP -->
|
||||
<script src="assets/js/jquery.min.js"></script>
|
||||
<!-- Latest compiled and minified Bootstrap -->
|
||||
<script src="assets/js/bootstrap.min.js"></script>
|
||||
<script src="assets/js/plugin.min.js"></script>
|
||||
<script src="assets/js/gsap.js"></script>
|
||||
<!-- Template scripts -->
|
||||
<script src="assets/js/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
templates/template_2/5dec4e017496df80779f65bc2fa3ee69.zip
Normal file
BIN
templates/template_2/__MACOSX/eventio/._.DS_Store
Normal file
BIN
templates/template_2/eventio/.DS_Store
vendored
Normal file
6584
templates/template_2/eventio/documentation/css/bootstrap.css
vendored
Normal file
5
templates/template_2/eventio/documentation/css/bootstrap.min.css
vendored
Normal file
82
templates/template_2/eventio/documentation/css/prettify.css
Normal file
@@ -0,0 +1,82 @@
|
||||
.pln {
|
||||
color: #48484C; }
|
||||
|
||||
.str {
|
||||
color: #DD1144; }
|
||||
|
||||
.kwd {
|
||||
color: #1E347B; }
|
||||
|
||||
.com {
|
||||
color: #93A1A1; }
|
||||
|
||||
.typ {
|
||||
color: teal; }
|
||||
|
||||
.lit {
|
||||
color: #195F91; }
|
||||
|
||||
.pun {
|
||||
color: #93A1A1; }
|
||||
|
||||
.opn {
|
||||
color: #93A1A1; }
|
||||
|
||||
.clo {
|
||||
color: #93A1A1; }
|
||||
|
||||
.tag {
|
||||
color: #008; }
|
||||
|
||||
.atn {
|
||||
color: teal; }
|
||||
|
||||
.atv {
|
||||
color: #DD1144; }
|
||||
|
||||
.dec {
|
||||
color: teal; }
|
||||
|
||||
.var {
|
||||
color: teal; }
|
||||
|
||||
.fun {
|
||||
color: #DC322F; }
|
||||
|
||||
/* Put a border around prettyprinted code snippets. */
|
||||
pre.prettyprint {
|
||||
background-color: #F7F7F9;
|
||||
padding: 10px;
|
||||
border: 1px solid #E1E1E8; }
|
||||
|
||||
pre.prettyprint.linenums {
|
||||
box-shadow: 40px 0 0 #FBFBFC inset, 41px 0 0 #ECECF0 inset; }
|
||||
|
||||
/* Specify class=linenums on a pre to get line numbering */
|
||||
ol.linenums {
|
||||
color: #1E347B;
|
||||
margin: 0 0 0 40px; }
|
||||
|
||||
ol.linenums li {
|
||||
color: #BEBEC5;
|
||||
line-height: 18px;
|
||||
padding-left: 12px;
|
||||
text-shadow: 0 1px 0 #FFFFFF; }
|
||||
|
||||
li.L0,
|
||||
li.L1,
|
||||
li.L2,
|
||||
li.L3,
|
||||
li.L5,
|
||||
li.L6,
|
||||
li.L7,
|
||||
li.L8 {
|
||||
list-style-type: normal; }
|
||||
|
||||
/* Alternate shading for lines */
|
||||
li.L1,
|
||||
li.L3,
|
||||
li.L5,
|
||||
li.L7,
|
||||
li.L9 {
|
||||
background: #eee; }
|
||||