Compare commits
3 Commits
4ccf898068
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 600875ac73 | |||
| c0cf7f01ad | |||
| 037922795a |
14
Dockerfile
Normal file
14
Dockerfile
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
FROM node:22-alpine AS build
|
||||||
|
WORKDIR /app
|
||||||
|
COPY package*.json ./
|
||||||
|
RUN npm ci
|
||||||
|
COPY . .
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
FROM node:22-alpine
|
||||||
|
WORKDIR /app
|
||||||
|
COPY --from=build /app/dist ./dist
|
||||||
|
RUN npm i -g serve
|
||||||
|
EXPOSE 3000
|
||||||
|
ENV NODE_ENV=production
|
||||||
|
CMD ["serve", "-s", "dist", "-l", "3000"]
|
||||||
13
deploy.yml
13
deploy.yml
@@ -1,4 +1,9 @@
|
|||||||
name: profen
|
app: profen
|
||||||
type: node
|
stack: dockerfile
|
||||||
start: npm run build && npx --yes -- serve -s dist -l $PORT
|
build:
|
||||||
dev: ./node_modules/.bin/vite --port $PORT --host
|
context: .
|
||||||
|
ports:
|
||||||
|
- container: 3000
|
||||||
|
host: 0
|
||||||
|
health:
|
||||||
|
path: /
|
||||||
|
|||||||
@@ -471,6 +471,8 @@ function rakar_content_load_scripts() {
|
|||||||
|
|
||||||
// Window Load
|
// Window Load
|
||||||
$(window).on('load', function () {
|
$(window).on('load', function () {
|
||||||
|
if (window.__rakarInit) return;
|
||||||
|
window.__rakarInit = true;
|
||||||
rakar_content_load_scripts();
|
rakar_content_load_scripts();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ export default function HomeHero() {
|
|||||||
<div className="swiper th-slider" id="heroSlide5" data-slider-options={JSON.stringify({effect: "fade", autoHeight: true})}>
|
<div className="swiper th-slider" id="heroSlide5" data-slider-options={JSON.stringify({effect: "fade", autoHeight: true})}>
|
||||||
<div className="swiper-wrapper">
|
<div className="swiper-wrapper">
|
||||||
<div className="swiper-slide">
|
<div className="swiper-slide">
|
||||||
<div className="hero-inner" data-bg-src="/assets/images/img-14filt.jpg">
|
<div className="hero-inner hero-promist" data-bg-src="/assets/images/img-14filt.jpg">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="hero-style5">
|
<div className="hero-style5">
|
||||||
<span className="sub-title2 sub"><span className="line"></span>Welcome To Profen</span>
|
<span className="sub-title2 sub"><span className="line"></span>Welcome To Profen</span>
|
||||||
@@ -22,7 +22,7 @@ export default function HomeHero() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="swiper-slide">
|
<div className="swiper-slide">
|
||||||
<div className="hero-inner" data-bg-src="/assets/images/adiabatic-cool.jpg">
|
<div className="hero-inner hero-heating" data-bg-src="/assets/images/adiabatic-cool.jpg">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="hero-style5">
|
<div className="hero-style5">
|
||||||
<span className="sub-title2 sub"><span className="line"></span>Welcome To Profen</span>
|
<span className="sub-title2 sub"><span className="line"></span>Welcome To Profen</span>
|
||||||
@@ -39,7 +39,7 @@ export default function HomeHero() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="swiper-slide">
|
<div className="swiper-slide">
|
||||||
<div className="hero-inner" data-bg-src="/assets/images/img-13filter.jpg">
|
<div className="hero-inner hero-ac" data-bg-src="/assets/images/img-13filter.jpg">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="hero-style5">
|
<div className="hero-style5">
|
||||||
<span className="sub-title2 sub"><span className="line"></span>Welcome To Profen</span>
|
<span className="sub-title2 sub"><span className="line"></span>Welcome To Profen</span>
|
||||||
|
|||||||
@@ -14,18 +14,23 @@ const SERVICES = [
|
|||||||
export default function HomeServicesSection() {
|
export default function HomeServicesSection() {
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
id="services"
|
||||||
className="elementor-element elementor-element-fb76345 e-flex e-con-boxed e-con e-parent"
|
className="elementor-element elementor-element-fb76345 e-flex e-con-boxed e-con e-parent"
|
||||||
data-id="fb76345"
|
data-id="fb76345"
|
||||||
data-element_type="container"
|
data-element_type="container"
|
||||||
data-e-type="container"
|
data-e-type="container"
|
||||||
data-settings={JSON.stringify({ background_background: "classic" })}
|
data-settings={JSON.stringify({ background_background: "classic" })}
|
||||||
|
style={{ scrollMarginTop: 96 }}
|
||||||
>
|
>
|
||||||
<div className="e-con-inner">
|
<div className="e-con-inner">
|
||||||
<div
|
<div
|
||||||
className="elementor-element elementor-element-7f99e6d e-con-full e-flex e-con e-child"
|
id="services"
|
||||||
data-id="7f99e6d"
|
className="elementor-element elementor-element-fb76345 e-flex e-con-boxed e-con e-parent"
|
||||||
|
data-id="fb76345"
|
||||||
data-element_type="container"
|
data-element_type="container"
|
||||||
data-e-type="container"
|
data-e-type="container"
|
||||||
|
data-settings={JSON.stringify({ background_background: "classic" })}
|
||||||
|
style={{ scrollMarginTop: 96 }}
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
className="elementor-element elementor-element-5ab397b elementor-widget__width-initial elementor-widget elementor-widget-rakarsectiontitle"
|
className="elementor-element elementor-element-5ab397b elementor-widget__width-initial elementor-widget elementor-widget-rakarsectiontitle"
|
||||||
@@ -44,19 +49,6 @@ export default function HomeServicesSection() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
className="elementor-element elementor-element-521e1f7 elementor-widget elementor-widget-rakarbutton"
|
|
||||||
data-id="521e1f7"
|
|
||||||
data-element_type="widget"
|
|
||||||
data-e-type="widget"
|
|
||||||
data-widget_type="rakarbutton.default"
|
|
||||||
>
|
|
||||||
<div className="elementor-widget-container">
|
|
||||||
<div className="btn-wrapper">
|
|
||||||
<Link className="th-btn th_btn style2 rounded-12" to="/contact">View the service<i className="far fa-arrow-right"></i></Link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className="elementor-element elementor-element-148606f elementor-widget elementor-widget-rakarservice"
|
className="elementor-element elementor-element-148606f elementor-widget elementor-widget-rakarservice"
|
||||||
@@ -68,10 +60,11 @@ export default function HomeServicesSection() {
|
|||||||
<div className="elementor-widget-container">
|
<div className="elementor-widget-container">
|
||||||
<div className="row gy-4">
|
<div className="row gy-4">
|
||||||
{SERVICES.map((s) => (
|
{SERVICES.map((s) => (
|
||||||
<div key={s.slug} className="col-4 col-xxl-3 col-lg-4 col-md-6">
|
<div key={s.slug} className="col-6 col-xxl-3 col-lg-4 col-md-6">
|
||||||
<div className="service-block-new">
|
<div className="service-block-new">
|
||||||
|
<div className="service-media">
|
||||||
<img className="service-bg" decoding="async" src={s.img} alt={s.title} />
|
<img className="service-bg" decoding="async" src={s.img} alt={s.title} />
|
||||||
<div className="service-overlay"></div>
|
</div>
|
||||||
<div className="service-content">
|
<div className="service-content">
|
||||||
<h3 className="service-title">
|
<h3 className="service-title">
|
||||||
{s.external ? (
|
{s.external ? (
|
||||||
|
|||||||
@@ -97,6 +97,9 @@ export default function Footer() {
|
|||||||
max-width:none !important;
|
max-width:none !important;
|
||||||
width:100% !important;
|
width:100% !important;
|
||||||
}
|
}
|
||||||
|
.pf-footer .th-widget-about{
|
||||||
|
max-width:none !important;
|
||||||
|
}
|
||||||
/* ── FOOTER MOBILE RESPONSIVE ── */
|
/* ── FOOTER MOBILE RESPONSIVE ── */
|
||||||
@media (max-width: 991px){
|
@media (max-width: 991px){
|
||||||
.pf-footer .pf-contact-divider{ display:none !important; }
|
.pf-footer .pf-contact-divider{ display:none !important; }
|
||||||
@@ -173,6 +176,7 @@ export default function Footer() {
|
|||||||
<div className="pf-copyright-line">
|
<div className="pf-copyright-line">
|
||||||
<div className="pf-copyright-inner">
|
<div className="pf-copyright-inner">
|
||||||
<p className="copyright-text">Copyright <i className="fas fa-copyright"></i> 2026 <a href="/">Profen Engineering LLC</a>. All Rights Reserved.</p>
|
<p className="copyright-text">Copyright <i className="fas fa-copyright"></i> 2026 <a href="/">Profen Engineering LLC</a>. All Rights Reserved.</p>
|
||||||
|
<p className="copyright-text" style={{ color: 'rgba(255,255,255,0.7)' }}>Maintained and built by OpenXpert Solutions LLC.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -34,6 +34,15 @@ export default function Header() {
|
|||||||
return pathname.startsWith(path)
|
return pathname.startsWith(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Drawer control — idempotent add/remove so it never double-toggles
|
||||||
|
// even if the theme's jQuery thmobilemenu binding also fires.
|
||||||
|
const openMobileMenu = () => {
|
||||||
|
document.querySelector('.th-menu-wrapper')?.classList.add('th-body-visible')
|
||||||
|
}
|
||||||
|
const closeMobileMenu = () => {
|
||||||
|
document.querySelector('.th-menu-wrapper')?.classList.remove('th-body-visible')
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<header ref={ref}>
|
<header ref={ref}>
|
||||||
<style id="elementor-post-945" dangerouslySetInnerHTML={{ __html: ELEMENTOR_945_CSS }}></style>
|
<style id="elementor-post-945" dangerouslySetInnerHTML={{ __html: ELEMENTOR_945_CSS }}></style>
|
||||||
@@ -43,9 +52,9 @@ export default function Header() {
|
|||||||
<div className="elementor-widget-container">
|
<div className="elementor-widget-container">
|
||||||
|
|
||||||
{/* Mobile Menu */}
|
{/* Mobile Menu */}
|
||||||
<div className="th-menu-wrapper">
|
<div className="th-menu-wrapper" onClick={closeMobileMenu}>
|
||||||
<div className="th-menu-area text-center">
|
<div className="th-menu-area text-center" onClick={(e) => e.stopPropagation()}>
|
||||||
<button className="th-menu-toggle"><i className="fas fa-times"></i></button>
|
<button className="th-menu-toggle" onClick={closeMobileMenu}><i className="fas fa-times"></i></button>
|
||||||
<div className="mobile-logo">
|
<div className="mobile-logo">
|
||||||
<a href="/"><img alt="logo" src="/assets/images/logo_pe-new-bk-70.png" /></a>
|
<a href="/"><img alt="logo" src="/assets/images/logo_pe-new-bk-70.png" /></a>
|
||||||
</div>
|
</div>
|
||||||
@@ -55,7 +64,7 @@ export default function Header() {
|
|||||||
if (item.label === 'SERVICES') {
|
if (item.label === 'SERVICES') {
|
||||||
return (
|
return (
|
||||||
<li key={item.path} className={`menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children${mobileServicesOpen ? ' th-active' : ''}${pathname.startsWith('/service') ? ' current-menu-item' : ''}`}>
|
<li key={item.path} className={`menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children${mobileServicesOpen ? ' th-active' : ''}${pathname.startsWith('/service') ? ' current-menu-item' : ''}`}>
|
||||||
<a href="/service" onClick={(e) => { e.preventDefault(); setMobileServicesOpen(o => !o) }}>
|
<a href="#" onClick={(e) => { e.preventDefault(); setMobileServicesOpen(o => !o) }}>
|
||||||
SERVICES
|
SERVICES
|
||||||
<span className="th-mean-expand"></span>
|
<span className="th-mean-expand"></span>
|
||||||
</a>
|
</a>
|
||||||
@@ -120,19 +129,24 @@ export default function Header() {
|
|||||||
|
|
||||||
{/* Sticky Nav */}
|
{/* Sticky Nav */}
|
||||||
<div className="sticky-wrapper">
|
<div className="sticky-wrapper">
|
||||||
<div className="container">
|
<div className="container px-3 px-sm-4 px-lg-0">
|
||||||
<div className="menu-area">
|
<div className="menu-area">
|
||||||
<div className="row align-items-start justify-content-between">
|
<div className="row align-items-start justify-content-between">
|
||||||
<div className="col-auto d-none d-lg-block">
|
<div className="col-auto d-none d-lg-block">
|
||||||
<div className="header-logo">
|
<div className="header-logo">
|
||||||
<a href="/"><img alt="logo_pe Rd Wh 70" src="/assets/images/logo_pe-Rd-Wh-70.png" /></a>
|
<a href="/"><img alt="logo Pe Rd Wh 70" src="/assets/images/logo_pe-Rd-Wh-70.png" className="logo-top" /></a>
|
||||||
|
<a href="/"><img alt="logo_pe new bk 70" src="/assets/images/logo_pe-new-bk-70.png" className="logo-sticky" /></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="col">
|
<div className="col">
|
||||||
<div className="menu-wrap">
|
<div className="menu-wrap">
|
||||||
|
<button className="th-menu-toggle d-block d-lg-none ms-0" type="button" onClick={openMobileMenu}><i className="far fa-bars"></i></button>
|
||||||
<div className="header-logo d-block d-lg-none">
|
<div className="header-logo d-block d-lg-none">
|
||||||
<a href="/"><img alt="logo_pe new wh 70" src="/assets/images/logo_pe-new-wh-70.png" /></a>
|
<a href="/"><img alt="logo_pe new bk 70" src="/assets/images/logo_pe-new-bk-70.png" /></a>
|
||||||
</div>
|
</div>
|
||||||
|
<a href="https://promist.openexplorer.xyz" target="_blank" rel="noopener noreferrer" className="promist-link d-lg-none ms-auto">
|
||||||
|
<img src="/assets/images/Promist-Logo-1.png" alt="Promist" />
|
||||||
|
</a>
|
||||||
<nav className="main-menu d-none d-lg-inline-block">
|
<nav className="main-menu d-none d-lg-inline-block">
|
||||||
<ul className="rakar-menu">
|
<ul className="rakar-menu">
|
||||||
{NAV_ITEMS.map(item => {
|
{NAV_ITEMS.map(item => {
|
||||||
@@ -140,7 +154,7 @@ export default function Header() {
|
|||||||
const isServiceActive = pathname.startsWith('/service')
|
const isServiceActive = pathname.startsWith('/service')
|
||||||
return (
|
return (
|
||||||
<li key={item.path} className={`menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children${isServiceActive ? ' current-menu-item' : ''}`}>
|
<li key={item.path} className={`menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children${isServiceActive ? ' current-menu-item' : ''}`}>
|
||||||
<a href="/service" onClick={e => e.preventDefault()}>SERVICES</a>
|
<a href="#services" onClick={(e) => { e.preventDefault(); if (window.location.pathname !== '/' && !window.location.pathname.endsWith('/')) { window.location.href = '/#services'; } else { document.getElementById('services')?.scrollIntoView({ behavior: 'smooth' }); } }}>SERVICES</a>
|
||||||
<ul className="sub-menu">
|
<ul className="sub-menu">
|
||||||
{SERVICE_SUBITEMS.map(s => (
|
{SERVICE_SUBITEMS.map(s => (
|
||||||
<li key={s.slug} className={`menu-item${pathname === `/service/${s.slug}` ? ' current-menu-item' : ''}`}>
|
<li key={s.slug} className={`menu-item${pathname === `/service/${s.slug}` ? ' current-menu-item' : ''}`}>
|
||||||
@@ -163,13 +177,12 @@ export default function Header() {
|
|||||||
})}
|
})}
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
<button className="th-menu-toggle d-block d-lg-none" type="button"><i className="far fa-bars"></i></button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-auto d-none d-xl-block">
|
<div className="col-auto d-none d-xl-block">
|
||||||
<div className="header-button">
|
<div className="header-button">
|
||||||
<a href="http://promist.profen.openexplorer.xyz" target="_blank" rel="noopener noreferrer">
|
<a href="https://promist.openexplorer.xyz" target="_blank" rel="noopener noreferrer" className="promist-link">
|
||||||
<img src="/assets/images/Promist-Logo-1.png" alt="Promist" style={{ height: '40px' }} />
|
<img src="/assets/images/Promist-Logo-1.png" alt="Promist" />
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -22,7 +22,10 @@ img { max-width: 100%; height: auto; }
|
|||||||
.breadcumb-wrapper{background-repeat:no-repeat;background-position:center center;background-image:url('/assets/images/breadcumb-bg.jpg');background-size:cover;}
|
.breadcumb-wrapper{background-repeat:no-repeat;background-position:center center;background-image:url('/assets/images/breadcumb-bg.jpg');background-size:cover;}
|
||||||
.hero-inner{position:relative;background-color:var(--brand-dark, #101840);min-height:640px;}
|
.hero-inner{position:relative;background-color:var(--brand-dark, #101840);min-height:640px;}
|
||||||
.hero-5 .hero-inner{min-height:720px;}
|
.hero-5 .hero-inner{min-height:720px;}
|
||||||
.hero-inner::before{content:'';position:absolute;inset:0;background:linear-gradient(90deg,rgba(0,0,0,0.7) 0%,rgba(0,0,0,0.3) 100%);z-index:1;pointer-events:none;}
|
.hero-inner::before{content:'';position:absolute;inset:0;background:linear-gradient(90deg,rgba(0,0,0,0.35) 0%,rgba(0,0,0,0.15) 100%);z-index:1;pointer-events:none;}
|
||||||
|
.hero-promist::before{background:linear-gradient(90deg,rgba(0,0,0,0.2) 0%,rgba(0,0,0,0.08) 100%)!important;}
|
||||||
|
.hero-heating::before{background:linear-gradient(90deg,rgba(0,0,0,0.2) 0%,rgba(0,0,0,0.08) 100%)!important;}
|
||||||
|
.hero-ac::before{background:linear-gradient(90deg,rgba(0,0,0,0.5) 0%,rgba(0,0,0,0.25) 100%)!important;}
|
||||||
.hero-inner .container{position:relative;z-index:2;}
|
.hero-inner .container{position:relative;z-index:2;}
|
||||||
.hero-style5 .sub-title2.sub{color:#fff !important;}
|
.hero-style5 .sub-title2.sub{color:#fff !important;}
|
||||||
.hero-style5 .hero-title,.hero-style5 .hero-text{color:#fff !important;}
|
.hero-style5 .hero-title,.hero-style5 .hero-text{color:#fff !important;}
|
||||||
@@ -64,12 +67,18 @@ img { max-width: 100%; height: auto; }
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.promist-btn { justify-content: center; }
|
/* ── PROMIST LINK (header): plain image, no button chrome ── */
|
||||||
.promist-btn .promist-logo { transition: margin 0.3s; }
|
.promist-link {
|
||||||
.promist-btn .fa-arrow-right { opacity: 0; transition: opacity 0.3s; }
|
display: inline-flex;
|
||||||
.promist-btn:hover { background-color: #101840 !important; border-color: #101840 !important; }
|
align-items: center;
|
||||||
.promist-btn:hover .promist-logo { margin-right: 8px; }
|
text-decoration: none;
|
||||||
.promist-btn:hover .fa-arrow-right { opacity: 1; }
|
line-height: 0;
|
||||||
|
}
|
||||||
|
.promist-link img {
|
||||||
|
height: 30px;
|
||||||
|
width: auto;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
/* Tab menu spacing */
|
/* Tab menu spacing */
|
||||||
.tab-menu2 {
|
.tab-menu2 {
|
||||||
@@ -249,8 +258,8 @@ img { max-width: 100%; height: auto; }
|
|||||||
|
|
||||||
/* ── HERO: bigger Promist inline logo ── */
|
/* ── HERO: bigger Promist inline logo ── */
|
||||||
.hero-style5 .hero-title img {
|
.hero-style5 .hero-title img {
|
||||||
height: 48px !important;
|
height: 64px !important;
|
||||||
width: auto !important;
|
width: auto;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,11 +267,9 @@ img { max-width: 100%; height: auto; }
|
|||||||
/* Left column is now always visible (d-none d-lg-block removed from JSX) */
|
/* Left column is now always visible (d-none d-lg-block removed from JSX) */
|
||||||
|
|
||||||
@media (max-width: 991px) {
|
@media (max-width: 991px) {
|
||||||
.header-layout5 .header-top .row {
|
.header-layout5 .header-top .row {
|
||||||
flex-direction: column;
|
justify-content: center;
|
||||||
align-items: center;
|
}
|
||||||
gap: 2px;
|
|
||||||
}
|
|
||||||
.header-top {
|
.header-top {
|
||||||
padding: 8px 0 !important;
|
padding: 8px 0 !important;
|
||||||
}
|
}
|
||||||
@@ -342,11 +349,15 @@ img { max-width: 100%; height: auto; }
|
|||||||
/* ── NAV/TOP-BAR SPACING: tighten on mobile ── */
|
/* ── NAV/TOP-BAR SPACING: tighten on mobile ── */
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
.header-layout5 .header-top {
|
.header-layout5 .header-top {
|
||||||
|
background: rgba(16, 25, 64, 0.95);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
padding: 6px 0 !important;
|
padding: 6px 0 !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media (max-width: 575px) {
|
@media (max-width: 575px) {
|
||||||
.header-top {
|
.header-top {
|
||||||
|
background: rgba(16, 25, 64, 0.95);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
padding: 4px 0 !important;
|
padding: 4px 0 !important;
|
||||||
}
|
}
|
||||||
.header-layout5 .header-logo {
|
.header-layout5 .header-logo {
|
||||||
@@ -399,7 +410,7 @@ img { max-width: 100%; height: auto; }
|
|||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
}
|
}
|
||||||
.hero-style5 .hero-title img {
|
.hero-style5 .hero-title img {
|
||||||
height: 32px;
|
height: 32px !important;
|
||||||
width: auto;
|
width: auto;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
@@ -431,7 +442,7 @@ img { max-width: 100%; height: auto; }
|
|||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
}
|
}
|
||||||
.hero-style5 .hero-title img {
|
.hero-style5 .hero-title img {
|
||||||
height: 24px;
|
height: 30px !important;
|
||||||
}
|
}
|
||||||
.hero-style5 .hero-text {
|
.hero-style5 .hero-text {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
@@ -590,11 +601,11 @@ img { max-width: 100%; height: auto; }
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 3. Ensure menu-wrap flex guarantees hamburger on the right */
|
/* 3. Ensure menu-wrap flex guarantees hamburger on the right */
|
||||||
.header-layout5 .menu-wrap {
|
.header-layout5 .menu-wrap {
|
||||||
display: flex !important;
|
margin-left: 0;
|
||||||
align-items: center !important;
|
width: 100%;
|
||||||
justify-content: space-between !important;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 4. Sidebar flyout: frosted glass effect */
|
/* 4. Sidebar flyout: frosted glass effect */
|
||||||
.th-menu-wrapper.th-body-visible .th-menu-area {
|
.th-menu-wrapper.th-body-visible .th-menu-area {
|
||||||
@@ -671,7 +682,7 @@ img { max-width: 100%; height: auto; }
|
|||||||
|
|
||||||
.service-block .box-icon img {
|
.service-block .box-icon img {
|
||||||
max-width: 24px !important;
|
max-width: 24px !important;
|
||||||
max-height: 24px !important;
|
max-height: 30px !important;
|
||||||
width: auto !important;
|
width: auto !important;
|
||||||
height: auto !important;
|
height: auto !important;
|
||||||
display: inline-block !important;
|
display: inline-block !important;
|
||||||
@@ -829,15 +840,24 @@ img { max-width: 100%; height: auto; }
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ══════════════════════════════════════════════════════════════
|
/* ══════════════════════════════════════════════════════════════
|
||||||
NEW SERVICE CARDS: image background with gradient overlay
|
NEW SERVICE CARDS: image on top, white text panel below
|
||||||
— PC + mobile (global, not inside media query)
|
— PC + mobile (global, not inside media query)
|
||||||
══════════════════════════════════════════════════════════════ */
|
══════════════════════════════════════════════════════════════ */
|
||||||
.service-block-new {
|
.service-block-new {
|
||||||
position: relative;
|
position: relative;
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
height: 280px;
|
background: #ffffff;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-block-new .service-media {
|
||||||
|
position: relative;
|
||||||
|
height: 220px;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.service-block-new .service-bg {
|
.service-block-new .service-bg {
|
||||||
@@ -845,58 +865,56 @@ img { max-width: 100%; height: auto; }
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
display: block;
|
display: block;
|
||||||
transition: transform 0.4s ease;
|
transition: transform 0.45s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Image "pops": rises slightly on hover */
|
||||||
.service-block-new:hover .service-bg {
|
.service-block-new:hover .service-bg {
|
||||||
transform: scale(1.05);
|
transform: scale(1.06) translateY(-4px);
|
||||||
}
|
|
||||||
|
|
||||||
.service-block-new .service-overlay {
|
|
||||||
position: absolute;
|
|
||||||
inset: 0;
|
|
||||||
background: linear-gradient(
|
|
||||||
to top,
|
|
||||||
rgba(0, 0, 0, 0.9) 0%,
|
|
||||||
rgba(0, 0, 0, 0.5) 40%,
|
|
||||||
rgba(0, 0, 0, 0.1) 100%
|
|
||||||
);
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.service-block-new .service-content {
|
.service-block-new .service-content {
|
||||||
position: absolute;
|
flex: 1;
|
||||||
bottom: 0;
|
padding: 24px 20px 26px;
|
||||||
left: 0;
|
background: #ffffff;
|
||||||
right: 0;
|
text-align: center;
|
||||||
padding: 24px;
|
display: flex;
|
||||||
z-index: 2;
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.service-block-new .service-title {
|
.service-block-new .service-title {
|
||||||
color: #ffffff;
|
color: #101840;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
line-height: 1.3;
|
line-height: 1.3;
|
||||||
|
/* reserve 2 lines so all cards (and rows) stay equal height */
|
||||||
|
min-height: 2.6em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.service-block-new .service-title a {
|
.service-block-new .service-title a {
|
||||||
color: #ffffff;
|
color: #101840;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.service-block-new .service-title a:hover {
|
.service-block-new .service-title a:hover {
|
||||||
color: #ED1C24;
|
color: #ED1C24;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ── Mobile overrides for new service cards ── */
|
|
||||||
|
/* ── Mobile overrides for new service cards (2×4 grid) ── */
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
.service-block-new {
|
.service-block-new {
|
||||||
height: 180px !important;
|
height: 100% !important;
|
||||||
overflow: hidden !important;
|
overflow: hidden !important;
|
||||||
border-radius: 12px !important;
|
border-radius: 12px !important;
|
||||||
}
|
}
|
||||||
|
.service-block-new .service-media {
|
||||||
|
height: 130px !important;
|
||||||
|
overflow: hidden !important;
|
||||||
|
}
|
||||||
.service-block-new .service-bg {
|
.service-block-new .service-bg {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
height: 100% !important;
|
height: 100% !important;
|
||||||
@@ -904,33 +922,30 @@ img { max-width: 100%; height: auto; }
|
|||||||
object-position: center !important;
|
object-position: center !important;
|
||||||
display: block !important;
|
display: block !important;
|
||||||
}
|
}
|
||||||
.service-block-new .service-overlay {
|
|
||||||
background: linear-gradient(
|
|
||||||
to top,
|
|
||||||
rgba(0, 0, 0, 0.85) 0%,
|
|
||||||
rgba(0, 0, 0, 0.4) 40%,
|
|
||||||
rgba(0, 0, 0, 0) 70%
|
|
||||||
) !important;
|
|
||||||
}
|
|
||||||
.service-block-new .service-content {
|
.service-block-new .service-content {
|
||||||
padding: 12px !important;
|
padding: 12px 10px !important;
|
||||||
z-index: 2 !important;
|
background: #fff !important;
|
||||||
|
text-align: center !important;
|
||||||
|
display: flex !important;
|
||||||
|
align-items: center !important;
|
||||||
|
justify-content: center !important;
|
||||||
}
|
}
|
||||||
.service-block-new .service-title {
|
.service-block-new .service-title {
|
||||||
font-size: 11px !important;
|
font-size: 12px !important;
|
||||||
line-height: 1.3 !important;
|
line-height: 1.3 !important;
|
||||||
font-weight: 600 !important;
|
font-weight: 700 !important;
|
||||||
color: #fff !important;
|
color: #101840 !important;
|
||||||
text-shadow: 0 1px 3px rgba(0, 0, 0, 0.6) !important;
|
text-shadow: none !important;
|
||||||
display: -webkit-box !important;
|
display: -webkit-box !important;
|
||||||
-webkit-line-clamp: 2 !important;
|
-webkit-line-clamp: 2 !important;
|
||||||
-webkit-box-orient: vertical !important;
|
-webkit-box-orient: vertical !important;
|
||||||
overflow: hidden !important;
|
overflow: hidden !important;
|
||||||
text-overflow: ellipsis !important;
|
text-overflow: ellipsis !important;
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
|
min-height: 2.6em !important;
|
||||||
}
|
}
|
||||||
.service-block-new .service-title a {
|
.service-block-new .service-title a {
|
||||||
color: #fff !important;
|
color: #101840 !important;
|
||||||
text-decoration: none !important;
|
text-decoration: none !important;
|
||||||
}
|
}
|
||||||
[data-id="148606f"] .row {
|
[data-id="148606f"] .row {
|
||||||
@@ -938,24 +953,13 @@ img { max-width: 100%; height: auto; }
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ── Service card text center ── */
|
|
||||||
.service-block-new .service-content {
|
|
||||||
text-align: center !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.service-block-new .service-title a {
|
|
||||||
display: block !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ══════════════════════════════════════════════════════════════
|
/* ══════════════════════════════════════════════════════════════
|
||||||
STICKY NAVBAR: white frosted glass
|
STICKY NAVBAR: solid white
|
||||||
- Overrides theme.css solid #0c0d0e bg
|
- Overrides theme.css solid #0c0d0e bg
|
||||||
- White frosted + subtle shadow for PC view
|
- Solid white + subtle shadow for PC view
|
||||||
══════════════════════════════════════════════════════════════ */
|
══════════════════════════════════════════════════════════════ */
|
||||||
.sticky-wrapper.sticky {
|
.sticky-wrapper.sticky {
|
||||||
background: rgba(255, 255, 255, 0.85) !important;
|
background: #ffffff !important;
|
||||||
backdrop-filter: blur(20px) !important;
|
|
||||||
-webkit-backdrop-filter: blur(20px) !important;
|
|
||||||
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.08) !important;
|
box-shadow: 0 4px 30px rgba(0, 0, 0, 0.08) !important;
|
||||||
border-bottom: 1px solid rgba(0, 0, 0, 0.05) !important;
|
border-bottom: 1px solid rgba(0, 0, 0, 0.05) !important;
|
||||||
}
|
}
|
||||||
@@ -964,15 +968,41 @@ img { max-width: 100%; height: auto; }
|
|||||||
.header-layout5 .sticky-wrapper.sticky .header-logo {
|
.header-layout5 .sticky-wrapper.sticky .header-logo {
|
||||||
background-color: transparent !important;
|
background-color: transparent !important;
|
||||||
}
|
}
|
||||||
|
/* Logo swap: top logo = red/white, sticky logo = black */
|
||||||
|
.logo-sticky { display: none; }
|
||||||
|
.sticky-wrapper.sticky .logo-top { display: none; }
|
||||||
|
.sticky-wrapper.sticky .logo-sticky { display: block; }
|
||||||
|
|
||||||
|
/* Lighter border on the nav CTA when navbar is scrolled/sticky */
|
||||||
|
|
||||||
/* ── HEADER BUTTON: bigger Promist logo in navbar ── */
|
/* ── HEADER BUTTON: bigger Promist logo in navbar ── */
|
||||||
.header-layout5 .header-button img {
|
.header-layout5 .header-button .promist-link img {
|
||||||
height: 40px !important;
|
height: 30px !important;
|
||||||
width: auto !important;
|
width: auto !important;
|
||||||
display: block !important;
|
display: block !important;
|
||||||
margin: 0 auto !important;
|
margin: 0 auto !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ── MOBILE (<=767px): shrink both logos so hamburger + Profen + Promist fit one row ── */
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
/* Vertically center hamburger, Profen logo and Promist in the same row */
|
||||||
|
.header-layout5 .row.align-items-start {
|
||||||
|
align-items: center !important;
|
||||||
|
}
|
||||||
|
/* Hide the SVG mask wings that overlap the Promist logo on small screens */
|
||||||
|
.header-layout5 .menu-wrap:before,
|
||||||
|
.header-layout5 .menu-wrap:after {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
.header-layout5 .header-logo img {
|
||||||
|
max-width: 88px !important;
|
||||||
|
}
|
||||||
|
.header-layout5 .menu-wrap .promist-link img {
|
||||||
|
height: 20px !important;
|
||||||
|
width: auto !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ── Mobile sidebar: white frosted glass + dark text ── */
|
/* ── Mobile sidebar: white frosted glass + dark text ── */
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
@@ -1032,12 +1062,10 @@ img { max-width: 100%; height: auto; }
|
|||||||
background: transparent !important;
|
background: transparent !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make nav and menu elements transparent so frosted glass shows through */
|
/* Keep Services dropdown solid when header is sticky
|
||||||
.sticky-wrapper.sticky .main-menu,
|
(prevents the transparent cascade from wiping the dropdown background) */
|
||||||
.sticky-wrapper.sticky .main-menu ul,
|
.sticky-wrapper.sticky .header-layout5 .main-menu ul.sub-menu {
|
||||||
.sticky-wrapper.sticky .rakar-menu,
|
background: #101940 !important;
|
||||||
.sticky-wrapper.sticky .rakar-menu li {
|
|
||||||
background: transparent !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ══════════════════════════════════════════════════════════════
|
/* ══════════════════════════════════════════════════════════════
|
||||||
|
|||||||
Reference in New Issue
Block a user