1752 lines
66 KiB
HTML
1752 lines
66 KiB
HTML
<!doctype html>
|
|
<html lang="en-US">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<meta
|
|
name="description"
|
|
content="Explore reliable Odoo hosting and expert AI consulting."
|
|
/>
|
|
<title>ODOO4projects | Hosting for the AI generation</title>
|
|
<link rel="icon" href="images/favicon.ico" />
|
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
<link
|
|
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Inter+Tight:wght@500;600;700;800&display=swap"
|
|
rel="stylesheet"
|
|
/>
|
|
<link
|
|
rel="stylesheet"
|
|
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
|
|
/>
|
|
<style>
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
body {
|
|
margin: 0;
|
|
font-family: Inter, sans-serif;
|
|
font-size: 0.8rem;
|
|
line-height: 1.6;
|
|
color: #212529;
|
|
background: #fff;
|
|
}
|
|
h1,
|
|
h2,
|
|
h3 {
|
|
font-family:
|
|
Inter Tight,
|
|
sans-serif;
|
|
font-weight: 600;
|
|
line-height: 1.25;
|
|
margin-top: 0;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
h1 {
|
|
font-size: clamp(1.44rem, 3.2vw, 2.24rem);
|
|
}
|
|
h2 {
|
|
font-size: clamp(1.2rem, 2.56vw, 1.76rem);
|
|
}
|
|
h3 {
|
|
font-size: clamp(0.96rem, 2vw, 1.28rem);
|
|
}
|
|
p {
|
|
margin-top: 0;
|
|
margin-bottom: 1rem;
|
|
}
|
|
a {
|
|
color: #65435c;
|
|
text-decoration: none;
|
|
}
|
|
img {
|
|
max-width: 100%;
|
|
height: auto;
|
|
vertical-align: middle;
|
|
}
|
|
:root {
|
|
--primary: #714b67;
|
|
--secondary: #f0cda8;
|
|
--dark: #1b1319;
|
|
--light: #f6f5f4;
|
|
--border: #e5e3e0;
|
|
--radius: 0.6rem;
|
|
--radius-lg: 1rem;
|
|
}
|
|
.container {
|
|
width: 80%;
|
|
padding: 0 20px;
|
|
margin: 0 auto;
|
|
max-width: 1300px;
|
|
}
|
|
@media (max-width: 768px) {
|
|
.container {
|
|
max-width: 100%;
|
|
}
|
|
}
|
|
.row {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
margin: 0 -15px;
|
|
}
|
|
.col-lg-5 {
|
|
flex: 0 0 41.666%;
|
|
max-width: 41.666%;
|
|
padding: 0 15px;
|
|
}
|
|
.col-lg-6 {
|
|
flex: 0 0 50%;
|
|
max-width: 50%;
|
|
padding: 0 15px;
|
|
}
|
|
.col-lg-10 {
|
|
flex: 0 0 83.333%;
|
|
max-width: 83.333%;
|
|
padding: 0 15px;
|
|
}
|
|
.offset-lg-1 {
|
|
margin-left: 8.333%;
|
|
}
|
|
.offset-lg-6 {
|
|
margin-left: 50%;
|
|
}
|
|
@media (max-width: 992px) {
|
|
.col-lg-5,
|
|
.col-lg-6,
|
|
.col-lg-10 {
|
|
flex: 0 0 100%;
|
|
max-width: 100%;
|
|
}
|
|
.offset-lg-1,
|
|
.offset-lg-6 {
|
|
margin-left: 0;
|
|
}
|
|
}
|
|
.text-center {
|
|
text-align: center;
|
|
}
|
|
.d-none {
|
|
display: none !important;
|
|
}
|
|
.d-flex {
|
|
display: flex;
|
|
}
|
|
.align-items-center {
|
|
align-items: center;
|
|
}
|
|
.mb-4 {
|
|
margin-bottom: 1.5rem;
|
|
}
|
|
.mt-3 {
|
|
margin-top: 1rem;
|
|
}
|
|
.btn {
|
|
display: inline-block;
|
|
padding: 0.5rem 1.3rem;
|
|
font-size: 0.72rem;
|
|
font-weight: 500;
|
|
border: 1px solid transparent;
|
|
border-radius: 0.5rem;
|
|
cursor: pointer;
|
|
text-decoration: none;
|
|
transition: all 0.2s;
|
|
}
|
|
.btn-primary {
|
|
color: #fff;
|
|
background: var(--primary);
|
|
border-color: var(--primary);
|
|
}
|
|
.btn-primary:hover {
|
|
background: #5e3f55;
|
|
border-color: #5e3f55;
|
|
transform: translateY(-1px);
|
|
}
|
|
.btn-outline-primary {
|
|
color: #65435c;
|
|
border-color: #65435c;
|
|
background: transparent;
|
|
}
|
|
.btn-outline-primary:hover {
|
|
color: #fff;
|
|
background: #65435c;
|
|
border-color: #65435c;
|
|
}
|
|
.btn-lg {
|
|
padding: 0.75rem 2rem;
|
|
font-size: 0.84rem;
|
|
border-radius: 2rem;
|
|
}
|
|
.hr {
|
|
width: 3.5rem;
|
|
height: 3px;
|
|
background: linear-gradient(
|
|
90deg,
|
|
var(--primary),
|
|
var(--secondary)
|
|
);
|
|
border-radius: 2px;
|
|
margin: 0 auto 1rem;
|
|
}
|
|
.hero-carousel {
|
|
position: relative;
|
|
overflow: hidden;
|
|
min-height: 400px;
|
|
}
|
|
.hero-slide {
|
|
position: absolute;
|
|
inset: 0;
|
|
min-height: 400px;
|
|
display: flex;
|
|
align-items: center;
|
|
background-size: cover;
|
|
background-position: center;
|
|
transform: translateY(-100%);
|
|
opacity: 0;
|
|
transition:
|
|
transform 0.5s ease,
|
|
opacity 0.5s ease;
|
|
z-index: 1;
|
|
}
|
|
.hero-slide.active {
|
|
transform: translateY(0);
|
|
opacity: 1;
|
|
z-index: 2;
|
|
}
|
|
.hero-slide.prev {
|
|
transform: translateY(100%);
|
|
opacity: 0;
|
|
z-index: 1;
|
|
}
|
|
.hero-slide::before {
|
|
content: "";
|
|
position: absolute;
|
|
inset: 0;
|
|
background: none;
|
|
}
|
|
.hero-box {
|
|
position: relative;
|
|
z-index: 2;
|
|
padding: 1.5rem;
|
|
border-radius: var(--radius);
|
|
background: rgba(27, 19, 25, 0.75);
|
|
color: #fff;
|
|
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
}
|
|
.hero-box h2 {
|
|
color: #fff;
|
|
font-size: clamp(1rem, 2.2vw, 1.4rem);
|
|
margin-bottom: 0.3rem;
|
|
}
|
|
.hero-box p {
|
|
color: rgba(255, 255, 255, 0.9);
|
|
font-size: 0.75rem;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
.carousel-dots {
|
|
position: absolute;
|
|
bottom: 1rem;
|
|
left: 0;
|
|
right: 0;
|
|
display: flex;
|
|
justify-content: center;
|
|
gap: 0.5rem;
|
|
z-index: 3;
|
|
}
|
|
.carousel-dot {
|
|
width: 8px;
|
|
height: 8px;
|
|
border-radius: 50%;
|
|
border: none;
|
|
background: rgba(255, 255, 255, 0.35);
|
|
cursor: pointer;
|
|
transition: all 0.3s;
|
|
}
|
|
.carousel-dot.active {
|
|
background: rgba(255, 255, 255, 0.8);
|
|
transform: scale(1.2);
|
|
}
|
|
.arrow {
|
|
position: absolute;
|
|
top: 50%;
|
|
transform: translateY(-50%);
|
|
z-index: 3;
|
|
background: rgba(27, 19, 25, 0.5);
|
|
color: #fff;
|
|
border: none;
|
|
width: 2.5rem;
|
|
height: 2.5rem;
|
|
border-radius: 50%;
|
|
cursor: pointer;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
transition: all 0.2s;
|
|
}
|
|
.arrow:hover {
|
|
background: rgba(27, 19, 25, 0.8);
|
|
transform: translateY(-50%) scale(1.05);
|
|
}
|
|
.arrow.left {
|
|
left: 1rem;
|
|
}
|
|
.arrow.right {
|
|
right: 1rem;
|
|
}
|
|
@media (max-width: 768px) {
|
|
.arrow {
|
|
display: none;
|
|
}
|
|
}
|
|
.stitle {
|
|
text-align: center;
|
|
padding: 2rem 0;
|
|
}
|
|
.stitle h1 {
|
|
font-size: clamp(1.12rem, 2.4vw, 1.6rem);
|
|
max-width: 720px;
|
|
margin: 0 auto;
|
|
color: var(--dark);
|
|
}
|
|
.tabs-section {
|
|
padding: 2rem 0;
|
|
}
|
|
.tabs-wrap {
|
|
display: flex;
|
|
gap: 2rem;
|
|
}
|
|
.tabs-nav {
|
|
flex: 0 0 220px;
|
|
max-width: 220px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 0.25rem;
|
|
}
|
|
.tabs-content {
|
|
flex: 1;
|
|
min-height: 200px;
|
|
font-size: 0.84rem;
|
|
line-height: 1.7;
|
|
}
|
|
.tab-btn {
|
|
display: block;
|
|
padding: 0.6rem 1rem;
|
|
color: #212529;
|
|
border-radius: var(--radius);
|
|
border: none;
|
|
background: none;
|
|
width: 100%;
|
|
text-align: left;
|
|
font-size: 0.76rem;
|
|
font-weight: 500;
|
|
cursor: pointer;
|
|
transition: all 0.2s;
|
|
}
|
|
.tab-btn:hover {
|
|
background: var(--light);
|
|
}
|
|
.tab-btn.active {
|
|
background: linear-gradient(
|
|
135deg,
|
|
rgba(113, 75, 103, 0.08),
|
|
rgba(113, 75, 103, 0.03)
|
|
);
|
|
color: var(--primary);
|
|
font-weight: 600;
|
|
border-left: 3px solid var(--primary);
|
|
}
|
|
.tab-btn small {
|
|
display: block;
|
|
color: rgba(33, 37, 41, 0.55);
|
|
font-size: 0.64rem;
|
|
margin-top: 0.1rem;
|
|
}
|
|
.tab-btn.active small {
|
|
color: rgba(113, 75, 103, 0.6);
|
|
}
|
|
.tab-pane {
|
|
display: none;
|
|
}
|
|
.tab-pane.active {
|
|
display: block;
|
|
}
|
|
@media (max-width: 992px) {
|
|
.tabs-wrap {
|
|
flex-direction: column;
|
|
}
|
|
.tabs-nav {
|
|
flex: 0 0 100%;
|
|
max-width: 100%;
|
|
flex-direction: row;
|
|
overflow-x: auto;
|
|
padding-bottom: 0.5rem;
|
|
border-bottom: 1px solid var(--border);
|
|
}
|
|
.tab-btn {
|
|
white-space: nowrap;
|
|
width: auto;
|
|
border-left: none;
|
|
}
|
|
.tab-btn.active {
|
|
border-left: none;
|
|
border-bottom: 3px solid var(--primary);
|
|
}
|
|
.tab-btn small {
|
|
display: none;
|
|
}
|
|
.tabs-content {
|
|
flex: 0 0 100%;
|
|
max-width: 100%;
|
|
}
|
|
}
|
|
.psection {
|
|
padding: 2rem 0;
|
|
background: var(--light);
|
|
}
|
|
.pgrid {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, 1fr);
|
|
gap: 1rem;
|
|
}
|
|
.pcard {
|
|
background: #fff;
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-lg);
|
|
overflow: hidden;
|
|
display: flex;
|
|
flex-direction: column;
|
|
transition: all 0.3s;
|
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
|
|
}
|
|
.pcard:hover {
|
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
|
|
transform: translateY(-3px);
|
|
}
|
|
.pcard.featured {
|
|
border: 2px solid var(--primary);
|
|
position: relative;
|
|
}
|
|
.pcard.featured::before {
|
|
content: "Most Popular";
|
|
position: absolute;
|
|
top: 0.75rem;
|
|
right: 0.75rem;
|
|
background: var(--primary);
|
|
color: #fff;
|
|
padding: 0.2rem 0.6rem;
|
|
border-radius: 2rem;
|
|
font-size: 0.6rem;
|
|
font-weight: 600;
|
|
}
|
|
.pcard-body {
|
|
padding: 1.25rem;
|
|
flex: 1;
|
|
}
|
|
.pcard-body h3 {
|
|
font-size: 0.92rem;
|
|
font-weight: 700;
|
|
}
|
|
.pcard .price {
|
|
margin: 0.5rem 0;
|
|
}
|
|
.pcard .price strong {
|
|
font-size: clamp(1.28rem, 2vw, 1.92rem);
|
|
color: var(--dark);
|
|
}
|
|
.pcard .price small {
|
|
color: rgba(33, 37, 41, 0.55);
|
|
font-size: 0.68rem;
|
|
}
|
|
.pcard .desc {
|
|
font-size: 0.68rem;
|
|
color: rgba(33, 37, 41, 0.6);
|
|
min-height: 2rem;
|
|
font-style: italic;
|
|
}
|
|
.pcard .btn {
|
|
margin-bottom: 0.75rem;
|
|
width: 100%;
|
|
}
|
|
.pcard ul {
|
|
list-style: none;
|
|
padding: 0;
|
|
margin: 0;
|
|
}
|
|
.pcard li {
|
|
padding: 0.4rem 0;
|
|
font-size: 0.68rem;
|
|
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.4rem;
|
|
}
|
|
.pcard li:last-child {
|
|
border-bottom: 0;
|
|
}
|
|
.pcard-foot {
|
|
padding: 0.6rem 1.25rem;
|
|
text-align: center;
|
|
border-top: 1px solid var(--border);
|
|
font-size: 0.64rem;
|
|
color: rgba(33, 37, 41, 0.55);
|
|
}
|
|
@media (max-width: 992px) {
|
|
.pgrid {
|
|
grid-template-columns: repeat(2, 1fr);
|
|
}
|
|
}
|
|
@media (max-width: 576px) {
|
|
.pgrid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
.trial {
|
|
padding: 3rem 0;
|
|
background: linear-gradient(135deg, #1b1319, #2a1d27);
|
|
color: #fff;
|
|
}
|
|
.trial h2 {
|
|
color: #fff;
|
|
}
|
|
.trial p {
|
|
color: rgba(255, 255, 255, 0.8);
|
|
}
|
|
.abanner {
|
|
padding: 2rem 0;
|
|
text-align: center;
|
|
background: #fff;
|
|
}
|
|
.abanner h2 {
|
|
font-size: clamp(1.12rem, 2.4vw, 1.6rem) !important;
|
|
max-width: 700px;
|
|
margin: 0 auto 0.5rem;
|
|
}
|
|
.footer {
|
|
background: var(--dark);
|
|
color: rgba(255, 255, 255, 0.85);
|
|
padding-top: 3rem;
|
|
}
|
|
.fgrid {
|
|
display: grid;
|
|
grid-template-columns: 1.5fr 3fr 3.5fr;
|
|
gap: 2rem;
|
|
padding-bottom: 2rem;
|
|
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
|
}
|
|
.footer h5 {
|
|
color: #fff;
|
|
margin-bottom: 0.8rem;
|
|
font-weight: 600;
|
|
}
|
|
.footer ul {
|
|
list-style: none;
|
|
padding: 0;
|
|
}
|
|
.footer li {
|
|
margin-bottom: 0.3rem;
|
|
}
|
|
.footer a {
|
|
color: rgba(255, 255, 255, 0.65);
|
|
transition: color 0.2s;
|
|
}
|
|
.footer a:hover {
|
|
color: #fff;
|
|
text-decoration: none;
|
|
}
|
|
.footer p {
|
|
color: rgba(255, 255, 255, 0.7);
|
|
font-size: 0.72rem;
|
|
line-height: 1.7;
|
|
}
|
|
.footer strong {
|
|
color: #fff;
|
|
}
|
|
.footer .social a {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 2.5rem;
|
|
height: 2.5rem;
|
|
border-radius: 50%;
|
|
background: rgba(255, 255, 255, 0.08);
|
|
color: rgba(255, 255, 255, 0.7);
|
|
margin-right: 0.3rem;
|
|
transition: all 0.2s;
|
|
}
|
|
.footer .social a:hover {
|
|
background: var(--primary);
|
|
color: #fff;
|
|
}
|
|
.fform label {
|
|
font-weight: 500;
|
|
margin-bottom: 0.25rem;
|
|
display: block;
|
|
color: #fff;
|
|
}
|
|
.fform input {
|
|
display: block;
|
|
width: 100%;
|
|
padding: 0.5rem 0.8rem;
|
|
font-size: 0.72rem;
|
|
background: rgba(255, 255, 255, 0.08);
|
|
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
border-radius: 0.5rem;
|
|
color: #fff;
|
|
margin-bottom: 0.75rem;
|
|
}
|
|
.fform input:focus {
|
|
outline: none;
|
|
border-color: var(--primary);
|
|
}
|
|
.fform input::placeholder {
|
|
color: rgba(255, 255, 255, 0.35);
|
|
}
|
|
.fcopy {
|
|
padding: 1rem 0;
|
|
text-align: center;
|
|
font-size: 0.68rem;
|
|
color: rgba(255, 255, 255, 0.5);
|
|
}
|
|
@media (max-width: 992px) {
|
|
.fgrid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
.spinner-overlay {
|
|
position: absolute;
|
|
inset: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: var(--dark);
|
|
z-index: 5;
|
|
transition: opacity 0.5s;
|
|
}
|
|
.spinner-overlay.hidden {
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
}
|
|
.spinner {
|
|
width: 2rem;
|
|
height: 2rem;
|
|
border: 3px solid rgba(255, 255, 255, 0.15);
|
|
border-top-color: #fff;
|
|
border-radius: 50%;
|
|
animation: spin 0.8s linear infinite;
|
|
}
|
|
@keyframes spin {
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
/* ---- Blog Section ---- */
|
|
.blog-section {
|
|
padding: 3rem 0;
|
|
background: #08080c;
|
|
color: #e8e8f0;
|
|
}
|
|
.blog-section h2 {
|
|
color: #e8e8f0;
|
|
}
|
|
.blog-search-wrap {
|
|
max-width: 500px;
|
|
margin: 0 auto 2rem;
|
|
}
|
|
.blog-search {
|
|
width: 100%;
|
|
padding: 0.75rem 1rem;
|
|
font-size: 0.85rem;
|
|
background: #12121c;
|
|
border: 1px solid #1a1a2e;
|
|
border-radius: 0.5rem;
|
|
color: #e8e8f0;
|
|
font-family: Inter, sans-serif;
|
|
transition: border-color 0.2s;
|
|
outline: none;
|
|
}
|
|
.blog-search:focus {
|
|
border-color: #00f5ff;
|
|
box-shadow: 0 0 0 2px rgba(0,245,255,0.15);
|
|
}
|
|
.blog-search::placeholder {
|
|
color: rgba(232,232,240,0.35);
|
|
}
|
|
.blog-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
gap: 1.25rem;
|
|
margin-bottom: 2rem;
|
|
}
|
|
@media (max-width: 992px) {
|
|
.blog-grid {
|
|
grid-template-columns: repeat(2, 1fr);
|
|
}
|
|
}
|
|
@media (max-width: 576px) {
|
|
.blog-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
.blog-card {
|
|
background: #12121c;
|
|
border: 1px solid #1a1a2e;
|
|
border-radius: 0.6rem;
|
|
padding: 1.25rem;
|
|
display: flex;
|
|
flex-direction: column;
|
|
transition: transform 0.2s, border-color 0.2s, box-shadow 0.2s;
|
|
}
|
|
.blog-card:hover {
|
|
transform: translateY(-2px);
|
|
border-color: #00f5ff;
|
|
box-shadow: 0 4px 20px rgba(0,245,255,0.08);
|
|
}
|
|
.blog-card-top {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
margin-bottom: 0.75rem;
|
|
flex-wrap: wrap;
|
|
}
|
|
.blog-badge {
|
|
display: inline-block;
|
|
padding: 0.15rem 0.5rem;
|
|
border-radius: 3rem;
|
|
font-size: 0.6rem;
|
|
font-weight: 700;
|
|
letter-spacing: 0.04em;
|
|
text-transform: uppercase;
|
|
color: #08080c;
|
|
}
|
|
.blog-badge-speed-run {
|
|
background: #f472b6;
|
|
}
|
|
.blog-badge-guide {
|
|
background: #a78bfa;
|
|
}
|
|
.blog-badge-howto {
|
|
background: #00f5ff;
|
|
}
|
|
.blog-badge-news {
|
|
background: #ffaa00;
|
|
}
|
|
.blog-badge-default {
|
|
background: #a78bfa;
|
|
}
|
|
.blog-agent {
|
|
display: inline-block;
|
|
padding: 0.15rem 0.45rem;
|
|
border-radius: 3rem;
|
|
font-size: 0.56rem;
|
|
font-weight: 600;
|
|
background: rgba(0,245,255,0.15);
|
|
color: #00f5ff;
|
|
border: 1px solid rgba(0,245,255,0.25);
|
|
}
|
|
.blog-date {
|
|
font-size: 0.7rem;
|
|
color: rgba(232,232,240,0.45);
|
|
margin-bottom: 0.4rem;
|
|
}
|
|
.blog-card h3 {
|
|
font-family: 'Inter Tight', sans-serif;
|
|
font-size: 0.95rem;
|
|
font-weight: 600;
|
|
margin: 0 0 0.5rem;
|
|
line-height: 1.35;
|
|
}
|
|
.blog-card h3 a {
|
|
color: #e8e8f0;
|
|
text-decoration: none;
|
|
transition: color 0.2s;
|
|
}
|
|
.blog-card h3 a:hover {
|
|
color: #00f5ff;
|
|
}
|
|
.blog-teaser {
|
|
font-size: 0.78rem;
|
|
color: rgba(232,232,240,0.65);
|
|
line-height: 1.55;
|
|
margin-bottom: 1rem;
|
|
flex: 1;
|
|
}
|
|
.blog-readmore {
|
|
font-size: 0.75rem;
|
|
color: #00f5ff;
|
|
text-decoration: none;
|
|
font-weight: 500;
|
|
transition: opacity 0.2s;
|
|
margin-top: auto;
|
|
}
|
|
.blog-readmore:hover {
|
|
opacity: 0.75;
|
|
}
|
|
.blog-empty {
|
|
grid-column: 1 / -1;
|
|
text-align: center;
|
|
padding: 2rem;
|
|
color: rgba(232,232,240,0.5);
|
|
font-size: 0.9rem;
|
|
}
|
|
.blog-pagination {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 0.75rem;
|
|
padding: 1rem 0;
|
|
}
|
|
.blog-page-btn {
|
|
padding: 0.4rem 1rem;
|
|
font-size: 0.78rem;
|
|
background: #12121c;
|
|
border: 1px solid #1a1a2e;
|
|
border-radius: 0.4rem;
|
|
color: #e8e8f0;
|
|
cursor: pointer;
|
|
font-family: Inter, sans-serif;
|
|
transition: border-color 0.2s, background 0.2s;
|
|
}
|
|
.blog-page-btn:hover:not(:disabled) {
|
|
border-color: #00f5ff;
|
|
background: rgba(0,245,255,0.08);
|
|
}
|
|
.blog-page-btn:disabled {
|
|
opacity: 0.3;
|
|
cursor: default;
|
|
}
|
|
.blog-page-info {
|
|
font-size: 0.78rem;
|
|
color: rgba(232,232,240,0.55);
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="hero-carousel" id="hc">
|
|
<div class="spinner-overlay" id="spinner">
|
|
<div style="text-align: center">
|
|
<div class="spinner" style="margin: 0 auto 1rem"></div>
|
|
<p
|
|
style="
|
|
margin: 0;
|
|
font-size: 0.7rem;
|
|
color: rgba(255, 255, 255, 0.6);
|
|
"
|
|
>
|
|
Loading…
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div
|
|
class="hero-slide active"
|
|
style="background-image: url("images/holland.webp")"
|
|
data-idx="0"
|
|
>
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-lg-5">
|
|
<div class="hero-box">
|
|
<h2>Try ODOO 4 weeks for free</h2>
|
|
<p>
|
|
Curious about Odoo 19 or testing our
|
|
service? Explore everything with a 4-week
|
|
free trial — no credit card required!
|
|
</p>
|
|
<p>
|
|
<a class="btn btn-primary" href="/contactus"
|
|
>Try Now</a
|
|
>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div
|
|
class="hero-slide"
|
|
style="
|
|
background-image: url("images/brazil.webp");
|
|
background-position: 50% 100%;
|
|
"
|
|
data-idx="1"
|
|
>
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-lg-5">
|
|
<div class="hero-box">
|
|
<h2>
|
|
Startup challenge!<br />From Zero to ERP in
|
|
3 Month
|
|
</h2>
|
|
<p>
|
|
With our consulting and training partners
|
|
over at OD8N we offer a compelling hands on
|
|
workshop for startups. Our ODOO 19 and N8N
|
|
hosting
|
|
<strong>included for a year</strong>.
|
|
</p>
|
|
<p>
|
|
<a
|
|
class="btn btn-primary"
|
|
href="/odoo-erp-automation-bootcamp"
|
|
>More Info</a
|
|
>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div
|
|
class="hero-slide"
|
|
style="background-image: url("images/india.webp")"
|
|
data-idx="2"
|
|
>
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-lg-6 offset-lg-6">
|
|
<div class="hero-box" style="text-align: center">
|
|
<h2>Turn Your Network into Income</h2>
|
|
<hr
|
|
style="
|
|
width: 3rem;
|
|
margin: 0.5rem auto;
|
|
border-color: rgba(255, 255, 255, 0.2);
|
|
"
|
|
/>
|
|
<p>
|
|
Promote AI-powered tools and hosting
|
|
solutions your audience already loves
|
|
— earn up to 25% commissions with
|
|
ready-to-use materials, instant setup and an
|
|
interesting target audience!
|
|
</p>
|
|
<p>
|
|
<a
|
|
class="btn btn-primary"
|
|
href="/affiliates"
|
|
>More Info</a
|
|
>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div
|
|
class="hero-slide"
|
|
style="
|
|
background-image: url("images/england.webp");
|
|
background-position: 50% 15.6182%;
|
|
"
|
|
data-idx="3"
|
|
>
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-lg-6">
|
|
<div class="hero-box">
|
|
<h2>Supercharge ODOO with N8N Automations</h2>
|
|
<p>
|
|
Copy our automated invoice workflow —
|
|
generate invoices with payment links in ODOO
|
|
instantly. Just set up a server and our
|
|
modules, and you’re ready to go.
|
|
</p>
|
|
<p>
|
|
Want to see how it works? Just buy a hosting
|
|
pack and you will be seeing it.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<button
|
|
class="arrow left"
|
|
onclick="prevSlide()"
|
|
aria-label="Previous"
|
|
>
|
|
<i class="fas fa-chevron-left"></i>
|
|
</button>
|
|
<button class="arrow right" onclick="nextSlide()" aria-label="Next">
|
|
<i class="fas fa-chevron-right"></i>
|
|
</button>
|
|
|
|
<div class="carousel-dots">
|
|
<button
|
|
class="carousel-dot active"
|
|
onclick="goSlide(0)"
|
|
aria-label="1"
|
|
></button>
|
|
<button
|
|
class="carousel-dot"
|
|
onclick="goSlide(1)"
|
|
aria-label="2"
|
|
></button>
|
|
<button
|
|
class="carousel-dot"
|
|
onclick="goSlide(2)"
|
|
aria-label="3"
|
|
></button>
|
|
<button
|
|
class="carousel-dot"
|
|
onclick="goSlide(3)"
|
|
aria-label="4"
|
|
></button>
|
|
</div>
|
|
</div>
|
|
|
|
<div
|
|
id="pop"
|
|
style="
|
|
display: none;
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: 999;
|
|
background: rgba(0, 0, 0, 0.6);
|
|
align-items: center;
|
|
justify-content: center;
|
|
"
|
|
>
|
|
<div
|
|
style="
|
|
background: #fff;
|
|
border-radius: 1rem;
|
|
max-width: 460px;
|
|
width: 90%;
|
|
overflow: hidden;
|
|
"
|
|
>
|
|
<div style="position: relative">
|
|
<button
|
|
onclick="closepop()"
|
|
style="
|
|
position: absolute;
|
|
top: 0.75rem;
|
|
right: 0.75rem;
|
|
z-index: 10;
|
|
background: #fff;
|
|
border: none;
|
|
width: 2.4rem;
|
|
height: 2.4rem;
|
|
border-radius: 50%;
|
|
cursor: pointer;
|
|
font-size: 1.3rem;
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
color: #555;
|
|
"
|
|
>
|
|
×
|
|
</button>
|
|
<div style="padding: 2rem; text-align: center; border-radius: 0.8rem;">
|
|
<h2
|
|
style="
|
|
font-size: clamp(1rem, 2vw, 1.24rem);
|
|
margin-bottom: 0.5rem;
|
|
color: #1b1319;
|
|
"
|
|
>
|
|
Start your 4 weeks free ODOO 19 trial
|
|
</h2>
|
|
<p
|
|
style="
|
|
font-size: 0.8rem;
|
|
color: rgba(33, 37, 41, 0.7);
|
|
"
|
|
>
|
|
No credit card required
|
|
</p>
|
|
<a class="btn btn-primary btn-lg" href="/contactus"
|
|
>Try Now</a
|
|
>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<section class="stitle">
|
|
<div class="container">
|
|
<div class="hr"></div>
|
|
<h1>
|
|
Effortless Odoo Community Hosting with AI-Powered Automation —
|
|
Scale Your Business Seamlessly
|
|
</h1>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="tabs-section">
|
|
<div class="container">
|
|
<div class="tabs-wrap">
|
|
<nav class="tabs-nav">
|
|
<button class="tab-btn active" data-t="tab1">
|
|
Our process innovation
|
|
<small>We practice what we preach</small>
|
|
</button>
|
|
<button class="tab-btn" data-t="tab2">
|
|
Our competitive advantages
|
|
<small>Why are we here to stay</small>
|
|
</button>
|
|
<button class="tab-btn" data-t="tab3">
|
|
Grow with us
|
|
<small>Our technology lets us grow with you</small>
|
|
</button>
|
|
<button class="tab-btn" data-t="tab4">
|
|
Affiliates <small>Earn while you sleep</small>
|
|
</button>
|
|
<button class="tab-btn" data-t="tab5">
|
|
FAQ
|
|
<small
|
|
>Here you find answers to your questions</small
|
|
>
|
|
</button>
|
|
</nav>
|
|
<div class="tabs-content">
|
|
<div class="tab-pane active" id="tab1">
|
|
<p>
|
|
We believe in ODOO as a stable,
|
|
<strong>battle-proven</strong> ERP platform with
|
|
countless integrations. This gives us a solid
|
|
foundation to build on.
|
|
</p>
|
|
<p>
|
|
On top of this, we enhance the system with
|
|
modern <strong>AI tooling</strong> via N8N,
|
|
enabling us to create entirely new business
|
|
processes from scratch.
|
|
</p>
|
|
<p>
|
|
<strong>We practice what we preach:</strong> our
|
|
website has no traditional shop. The entire
|
|
sales process is powered by N8N, while ODOO
|
|
handles only invoicing and payment processing,
|
|
proving that automation and ERP can seamlessly
|
|
work together.
|
|
</p>
|
|
</div>
|
|
<div class="tab-pane" id="tab2">
|
|
<h3><em>Our Competitive Advantages</em></h3>
|
|
<p>
|
|
🌎 <strong>Promotion of ODOO CE</strong
|
|
><br />Keep costs low while bootstrapping;
|
|
upgrade to Enterprise as you grow.
|
|
</p>
|
|
<p>
|
|
🤖
|
|
<strong>Advanced N8N & AI Automation</strong
|
|
><br />Automate servers, sales, and marketing to
|
|
boost efficiency and reduce errors.
|
|
</p>
|
|
<p>
|
|
✈️
|
|
<strong>Direct International Rollout</strong
|
|
><br />Easily scale your operations and launch
|
|
globally without friction.
|
|
</p>
|
|
</div>
|
|
<div class="tab-pane" id="tab3">
|
|
<p>
|
|
We are not the best hardware data center
|
|
managers — and we don’t try to be.
|
|
</p>
|
|
<p>
|
|
Instead, we purchase compute from the
|
|
world’s top providers 🌎 and
|
|
combine it with our fully automated server
|
|
management, letting us scale extremely fast.
|
|
</p>
|
|
<p>
|
|
In the unlikely event you overtake us or prefer
|
|
to use your own bare metal, we can integrate
|
|
your server into our management service and take
|
|
care of business. In this case, please contact
|
|
our sales.
|
|
</p>
|
|
</div>
|
|
<div class="tab-pane" id="tab4">
|
|
<p>
|
|
<strong
|
|
>Earn Up to 25% Commission 💰</strong
|
|
>
|
|
</p>
|
|
<p>
|
|
Promote our <strong>Odoo Hosting</strong> and
|
|
<strong>Workshops</strong> — trusted by
|
|
real businesses.
|
|
</p>
|
|
<p>We handle the sales. You earn.</p>
|
|
<p>
|
|
🌟 High-converting pages • 📦
|
|
Easy promo materials
|
|
</p>
|
|
<p>
|
|
<a class="btn btn-primary" href="/affiliates"
|
|
>More Info</a
|
|
>
|
|
</p>
|
|
</div>
|
|
<div class="tab-pane" id="tab5">
|
|
<p>
|
|
Our chatbot answers all the FAQs and snacks on
|
|
tokens along the way.
|
|
</p>
|
|
<p>
|
|
Want a real human? Just tell it to book you a
|
|
📅 meeting for us. Looking forward
|
|
hearing from you!
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="psection">
|
|
<div class="container">
|
|
<div class="text-center mb-4">
|
|
<div class="hr"></div>
|
|
<h2>Your Plan, Your Timing: Upgrade Anytime</h2>
|
|
</div>
|
|
<div class="pgrid">
|
|
<div class="pcard">
|
|
<div class="pcard-body">
|
|
<h3>Side Hustle</h3>
|
|
<div class="price">
|
|
<strong>$ 214.00</strong>
|
|
<small class="text-muted">/ year</small>
|
|
</div>
|
|
<p class="desc">
|
|
“ODOO Standard .. that is all my business
|
|
needs”
|
|
</p>
|
|
<a
|
|
href="/3/214.00/4/Side%20Hustle"
|
|
class="btn btn-primary"
|
|
>Buy Now</a
|
|
>
|
|
<ul>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
ODOO CE hosting
|
|
</li>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
1 Backup Slots
|
|
</li>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
1 Domain Mapping, SSL Cert
|
|
</li>
|
|
<li>
|
|
<i
|
|
class="fas fa-times"
|
|
style="color: #dc3545"
|
|
></i>
|
|
No module installation
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="pcard-foot">
|
|
Instant setup, satisfied or reimbursed.
|
|
</div>
|
|
</div>
|
|
<div class="pcard featured">
|
|
<div class="pcard-body">
|
|
<h3>On the Rise</h3>
|
|
<div class="price">
|
|
<strong>$ 395.00</strong>
|
|
<small class="text-muted">/ year</small>
|
|
</div>
|
|
<p class="desc">
|
|
“I need some modules and professional
|
|
reports”
|
|
</p>
|
|
<a
|
|
href="/4/395.00/4/On%20the%20Rise"
|
|
class="btn btn-primary"
|
|
>Buy Now</a
|
|
>
|
|
<ul>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
ODOO CE hosting
|
|
</li>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
4 Backup Slots
|
|
</li>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
3 Domain Mappings, SSL Cert
|
|
</li>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
Module installation via git
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div class="pcard-foot">
|
|
Instant setup, satisfied or reimbursed.
|
|
</div>
|
|
</div>
|
|
<div class="pcard">
|
|
<div class="pcard-body">
|
|
<h3>Powerhouse</h3>
|
|
<div class="price">
|
|
<strong>$ 595.00</strong>
|
|
<small class="text-muted">/ year</small>
|
|
</div>
|
|
<p class="desc">
|
|
“ODOO Enterprise is a must have!”
|
|
</p>
|
|
<a
|
|
href="/5/595.00/4/Powerhouse"
|
|
class="btn btn-primary"
|
|
>Buy Now</a
|
|
>
|
|
<ul>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
All of On the Rise
|
|
</li>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
ODOO Enterprise Ready
|
|
</li>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
2 Workers
|
|
</li>
|
|
<li><br /></li>
|
|
</ul>
|
|
</div>
|
|
<div class="pcard-foot">
|
|
Instant setup, satisfied or reimbursed.
|
|
</div>
|
|
</div>
|
|
<div class="pcard">
|
|
<div class="pcard-body">
|
|
<h3>Empire</h3>
|
|
<div class="price">
|
|
<strong>>$ 950.00</strong>
|
|
<small class="text-muted">/ year</small>
|
|
</div>
|
|
<p class="desc">
|
|
“My house! My Horse! My Server!”
|
|
</p>
|
|
<a href="/contactus" class="btn btn-outline-primary"
|
|
>Contact Us</a
|
|
>
|
|
<ul>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
Our service on your server
|
|
</li>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
All modules & features
|
|
</li>
|
|
<li>
|
|
<i
|
|
class="fas fa-check"
|
|
style="color: #28a745"
|
|
></i>
|
|
Unlimited customization
|
|
</li>
|
|
<li><br /></li>
|
|
</ul>
|
|
</div>
|
|
<div class="pcard-foot">
|
|
Instant setup, satisfied or reimbursed.
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="blog-section" id="blog">
|
|
<div class="container">
|
|
<div class="text-center mb-4">
|
|
<div class="hr"></div>
|
|
<h2>Latest from the Blog</h2>
|
|
</div>
|
|
<div class="blog-search-wrap">
|
|
<input type="text" class="blog-search" id="blogSearch" placeholder="Search posts..." />
|
|
</div>
|
|
<div class="blog-grid" id="blogGrid"></div>
|
|
<div class="blog-pagination" id="blogPagination"></div>
|
|
</div>
|
|
</section>
|
|
|
|
<footer class="footer">
|
|
<div class="container">
|
|
<div class="fgrid">
|
|
<div>
|
|
<h5>Useful Links</h5>
|
|
<ul>
|
|
<li><a href="/">Home</a></li>
|
|
<li><a href="/support">Support</a></li>
|
|
<li><a href="/legal">Legal</a></li>
|
|
<li><a href="/contactus">Contact us</a></li>
|
|
<li><a href="/workshops">Workshops</a></li>
|
|
<li><a href="/affiliates">Affiliates</a></li>
|
|
<li>
|
|
Partner: <a href="https://OD8N.com">OD8N</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
<div>
|
|
<h5>About us</h5>
|
|
<p>
|
|
We build smart, scalable business solutions by
|
|
combining the <strong>stability</strong> of Odoo ERP
|
|
with the <strong>power</strong> of AI and N8N
|
|
automation.
|
|
</p>
|
|
<p>
|
|
From streamlined sales to global rollouts, our
|
|
<strong>lean, eco-friendly</strong> approach helps
|
|
businesses cut costs, boost efficiency, and grow
|
|
without limits.
|
|
</p>
|
|
</div>
|
|
<div>
|
|
<h5>Contact us</h5>
|
|
<p>
|
|
<a
|
|
class="btn btn-primary"
|
|
href="/contactus"
|
|
style="
|
|
background: rgba(255, 255, 255, 0.1);
|
|
border-color: rgba(255, 255, 255, 0.2);
|
|
color: #fff;
|
|
"
|
|
>Contact Form</a
|
|
>
|
|
</p>
|
|
<div class="social">
|
|
<a
|
|
href="/website/social/linkedin"
|
|
target="_blank"
|
|
aria-label="LinkedIn"
|
|
><i class="fab fa-linkedin-in"></i></a
|
|
><a href="/" target="_blank" aria-label="Home"
|
|
><i class="fas fa-home"></i></a
|
|
><a
|
|
href="/website/social/youtube"
|
|
target="_blank"
|
|
aria-label="YouTube"
|
|
><i class="fab fa-youtube"></i
|
|
></a>
|
|
</div>
|
|
<form
|
|
class="fform"
|
|
action="/website/form/"
|
|
method="post"
|
|
>
|
|
<label for="n1">Your Name *</label
|
|
><input
|
|
type="text"
|
|
name="name"
|
|
id="n1"
|
|
required
|
|
placeholder="Your Name"
|
|
/><label for="e1">Your Email *</label
|
|
><input
|
|
type="email"
|
|
name="email"
|
|
id="e1"
|
|
required
|
|
placeholder="Your Email"
|
|
/>
|
|
<div
|
|
class="d-flex align-items-center gap-2"
|
|
style="margin-bottom: 0.75rem"
|
|
>
|
|
<input
|
|
type="checkbox"
|
|
id="c1"
|
|
checked
|
|
style="width: auto"
|
|
/><label
|
|
for="c1"
|
|
style="
|
|
margin: 0;
|
|
color: rgba(255, 255, 255, 0.7);
|
|
font-weight: 400;
|
|
"
|
|
>Subscribe to Newsletter</label
|
|
>
|
|
</div>
|
|
<button
|
|
type="submit"
|
|
class="btn btn-primary"
|
|
style="
|
|
background: var(--primary);
|
|
border-color: var(--primary);
|
|
"
|
|
>
|
|
Submit
|
|
</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<div class="fcopy">Copyright © ODOO4projects LLC</div>
|
|
</div>
|
|
</footer>
|
|
|
|
<script>
|
|
var si = 0,
|
|
slides = document.querySelectorAll(".hero-slide"),
|
|
dots = document.querySelectorAll(".carousel-dot"),
|
|
t,
|
|
dir = 1,
|
|
autoStop = false,
|
|
autoInterval = 7000;
|
|
|
|
function show(i, direction) {
|
|
if (direction === undefined) return;
|
|
var current = slides[si];
|
|
var next = slides[i];
|
|
if (direction === 1) {
|
|
current.style.transform = "translateY(100%)";
|
|
current.style.opacity = "0";
|
|
current.style.zIndex = "1";
|
|
next.style.transform = "translateY(-100%)";
|
|
next.style.opacity = "0";
|
|
next.style.zIndex = "1";
|
|
requestAnimationFrame(function () {
|
|
next.style.transition =
|
|
"transform 0.5s ease, opacity 0.5s ease";
|
|
next.style.transform = "translateY(0)";
|
|
next.style.opacity = "1";
|
|
next.style.zIndex = "2";
|
|
});
|
|
} else {
|
|
current.style.transform = "translateY(-100%)";
|
|
current.style.opacity = "0";
|
|
current.style.zIndex = "1";
|
|
next.style.transform = "translateY(100%)";
|
|
next.style.opacity = "0";
|
|
next.style.zIndex = "1";
|
|
requestAnimationFrame(function () {
|
|
next.style.transition =
|
|
"transform 0.5s ease, opacity 0.5s ease";
|
|
next.style.transform = "translateY(0)";
|
|
next.style.opacity = "1";
|
|
next.style.zIndex = "2";
|
|
});
|
|
}
|
|
for (var j = 0; j < dots.length; j++) {
|
|
if (j === i) {
|
|
dots[j].classList.add("active");
|
|
} else {
|
|
dots[j].classList.remove("active");
|
|
}
|
|
}
|
|
si = i;
|
|
}
|
|
function nextSlide() {
|
|
show((si + 1) % slides.length, 1);
|
|
resetTimer();
|
|
}
|
|
function prevSlide() {
|
|
show((si - 1 + slides.length) % slides.length, -1);
|
|
resetTimer();
|
|
}
|
|
function goSlide(i) {
|
|
autoStop = true;
|
|
show(i, i > si ? 1 : -1);
|
|
clearInterval(t);
|
|
t = null;
|
|
}
|
|
function resetTimer() {
|
|
clearInterval(t);
|
|
t = setInterval(nextSlide, autoInterval);
|
|
}
|
|
|
|
window.addEventListener("load", function () {
|
|
var o = document.getElementById("spinner");
|
|
o.classList.add("hidden");
|
|
setTimeout(function () {
|
|
o.style.display = "none";
|
|
}, 500);
|
|
});
|
|
setTimeout(function () {
|
|
var o = document.getElementById("spinner");
|
|
o.classList.add("hidden");
|
|
setTimeout(function () {
|
|
o.style.display = "none";
|
|
}, 500);
|
|
}, 3000);
|
|
t = setInterval(nextSlide, autoInterval);
|
|
|
|
for (var s = 0; s < slides.length; s++) {
|
|
slides[s].addEventListener("click", function () {
|
|
autoStop = true;
|
|
clearInterval(t);
|
|
t = null;
|
|
});
|
|
}
|
|
|
|
setTimeout(function () {
|
|
document.getElementById("pop").style.display = "flex";
|
|
}, 5000);
|
|
function closepop() {
|
|
document.getElementById("pop").style.display = "none";
|
|
}
|
|
document
|
|
.getElementById("pop")
|
|
.addEventListener("click", function (e) {
|
|
if (e.target === this) closepop();
|
|
});
|
|
|
|
document.querySelectorAll(".tab-btn").forEach(function (b) {
|
|
b.addEventListener("click", function () {
|
|
document.querySelectorAll(".tab-btn").forEach(function (x) {
|
|
x.classList.remove("active");
|
|
});
|
|
document
|
|
.querySelectorAll(".tab-pane")
|
|
.forEach(function (p) {
|
|
p.classList.remove("active");
|
|
});
|
|
this.classList.add("active");
|
|
document
|
|
.getElementById(this.getAttribute("data-t"))
|
|
.classList.add("active");
|
|
});
|
|
});
|
|
|
|
/* ---- Blog Module ---- */
|
|
var blogState = {
|
|
allPosts: [],
|
|
filteredPosts: [],
|
|
currentPage: 1,
|
|
perPage: 6,
|
|
searchTerm: ""
|
|
};
|
|
|
|
function formatDate(dateStr) {
|
|
var d = new Date(dateStr + "T00:00:00Z");
|
|
var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
|
|
return months[d.getUTCMonth()] + " " + d.getUTCDate() + ", " + d.getUTCFullYear();
|
|
}
|
|
|
|
function badgeClass(area) {
|
|
var m = {"speed-run":"speed-run","guide":"guide","howto":"howto","news":"news"};
|
|
return m[area] || "default";
|
|
}
|
|
|
|
function renderBlog() {
|
|
var grid = document.getElementById("blogGrid");
|
|
var search = (blogState.searchTerm || "").toLowerCase();
|
|
blogState.filteredPosts = blogState.allPosts.filter(function(p) {
|
|
if (!search) return true;
|
|
return (p.headline + " " + p.teaser).toLowerCase().indexOf(search) !== -1;
|
|
});
|
|
var total = blogState.filteredPosts.length;
|
|
var totalPages = Math.max(1, Math.ceil(total / blogState.perPage));
|
|
if (blogState.currentPage > totalPages) blogState.currentPage = totalPages;
|
|
var start = (blogState.currentPage - 1) * blogState.perPage;
|
|
var pagePosts = blogState.filteredPosts.slice(start, start + blogState.perPage);
|
|
|
|
var html = "";
|
|
if (pagePosts.length === 0) {
|
|
html = "<div class=\"blog-empty\">No posts match your search.</div>";
|
|
} else {
|
|
for (var i = 0; i < pagePosts.length; i++) {
|
|
var p = pagePosts[i];
|
|
var bc = badgeClass(p.area);
|
|
var agentHtml = "";
|
|
if (p.agent) agentHtml = "<span class=\"blog-agent\">" + p.agent + "</span>";
|
|
html += "<div class=\"blog-card\">" +
|
|
"<div class=\"blog-card-top\">" +
|
|
"<span class=\"blog-badge blog-badge-" + bc + "\">" + p.area + "</span>" +
|
|
agentHtml +
|
|
"</div>" +
|
|
"<div class=\"blog-date\">" + formatDate(p.date) + "</div>" +
|
|
"<h3><a href=\"" + p.link + "\">" + p.headline + "</a></h3>" +
|
|
"<p class=\"blog-teaser\">" + p.teaser + "</p>" +
|
|
"<a href=\"" + p.link + "\" class=\"blog-readmore\">Read more →</a>" +
|
|
"</div>";
|
|
}
|
|
}
|
|
grid.innerHTML = html;
|
|
|
|
var pag = document.getElementById("blogPagination");
|
|
var pagHtml = "";
|
|
if (totalPages > 1) {
|
|
pagHtml += "<button class=\"blog-page-btn\" onclick=\"blogGo(1)\"" + (blogState.currentPage <= 1 ? " disabled\"" : "\"") + ">«</button>";
|
|
pagHtml += "<button class=\"blog-page-btn\" onclick=\"blogGo(" + (blogState.currentPage - 1) + ")\"" + (blogState.currentPage <= 1 ? " disabled\"" : "\"") + ">‹ Prev</button>";
|
|
pagHtml += "<span class=\"blog-page-info\">Page " + blogState.currentPage + " of " + totalPages + "</span>";
|
|
pagHtml += "<button class=\"blog-page-btn\" onclick=\"blogGo(" + (blogState.currentPage + 1) + ")\"" + (blogState.currentPage >= totalPages ? " disabled\"" : "\"") + ">Next ›</button>";
|
|
pagHtml += "<button class=\"blog-page-btn\" onclick=\"blogGo(" + totalPages + ")\"" + (blogState.currentPage >= totalPages ? " disabled\"" : "\"") + ">»</button>";
|
|
}
|
|
pag.innerHTML = pagHtml;
|
|
}
|
|
|
|
function blogGo(page) {
|
|
blogState.currentPage = page;
|
|
renderBlog();
|
|
}
|
|
|
|
fetch("blog/index.json?_=" + Date.now())
|
|
.then(function(r) { return r.json(); })
|
|
.then(function(data) {
|
|
blogState.allPosts = data.posts;
|
|
renderBlog();
|
|
})
|
|
.catch(function() {
|
|
document.getElementById("blogGrid").innerHTML = "<div class=\"blog-empty\">Could not load blog posts.</div>";
|
|
});
|
|
|
|
document.getElementById("blogSearch").addEventListener("input", function() {
|
|
blogState.searchTerm = this.value;
|
|
blogState.currentPage = 1;
|
|
renderBlog();
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|