commit 2a64ce8daaa377e2c80e2540776ac916c41b8aca Author: zhs123 Date: Fri Jul 24 13:52:59 2026 +0800 feat: initial commit - 汽车贴膜门店 WordPress 主题 (B2B Trade v2.0.0) - WordPress classic theme for car tinting/foil shop - 13 homepage template parts - Customizer panel with 13 sections - RFQ inquiry form handler - Bootstrap 5.3 + AOS + Colorbox frontend - 13 SVG placeholder images - Chinese content defaults diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..31b71f4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# WordPress +wp-config-local.php +wp-config.php +wp-config-sample.php + +# Node / dependencies +node_modules/ +npm-debug.log +yarn-error.log + +# Build / cache +.cache/ +dist/ +build/ + +# OS files +.DS_Store +Thumbs.db +Desktop.ini + +# IDE / editor +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# WorkBuddy +.workbuddy/ + +# Environment +.env +.env.local diff --git a/404.php b/404.php new file mode 100644 index 0000000..3f99a24 --- /dev/null +++ b/404.php @@ -0,0 +1,13 @@ + +
+
+

+

+
+ +
+
+ diff --git a/README.md b/README.md new file mode 100644 index 0000000..43713d2 --- /dev/null +++ b/README.md @@ -0,0 +1,114 @@ +# B2B Trade — 汽车贴膜企业 B2B 主题 + +B2B Trade 是一款面向 OEM、ODM 和贴牌汽车贴膜制造商的经典 WordPress 主题。专为帮助海外品牌方、进口商、经销商、零售商和项目采购方评估生产能力并提交合格询价而设计。 + +本主题不依赖 WooCommerce,不含购物车、价格、结账或在线下单流程。产品卡片是工厂生产参考案例,引导买家进入询价表单。附带的参考图片使用浅灰色 SVG 占位符,上线前请替换为实际产品图片。 + +## 环境要求 + +- WordPress 6.5 或更高版本 +- PHP 7.4 或更高版本 +- 生产环境建议使用 HTTPS 和认证 SMTP + +## 安装 + +1. 将 `fragrance-trade` 文件夹复制到 `wp-content/themes/`。 +2. 在 **外观 → 主题** 中激活 **B2B Trade**。 +3. 在 **外观 → 自定义 → 站点身份** 中设置站点标题和自定义 Logo。 +4. 创建菜单并分配到 **主导航**。未分配时主题使用单页 B2B 回退菜单。 +5. 打开 **外观 → 自定义 → B2B 企业首页**,将所有演示文案和图片替换为经验证的工厂信息。 + +## 首页架构 + +首页遵循 B2B 采购方的决策路径: + +1. 制造商定位与询价入口 +2. 工厂合作证明点 +3. OEM/ODM 和贴牌服务 +4. 产品制造能力 +5. 膜料、颜色和包装定制 +6. 工厂证明与可选工厂参观视频 +7. 品质管控环节 +8. 从打样到发货的项目流程 +9. 典型采购方项目案例 +10. 文档与出口支持 +11. 起订量、打样、包装和文件常见问题 +12. 合格询价表单 + +## 自定义器板块 + +**B2B 企业首页** 面板管理: + +- 首屏定位、按钮和图片 +- 四个信任/证明点 +- 四个 OEM/ODM 服务卡片 +- 七个工厂生产产品参考卡片及图片 +- 八个定制选项 +- 工厂说明、证明点和四张图片 +- 工厂参观视频链接和封面 +- 六个品质管控环节 +- 八个项目流程步骤 +- 三个项目案例 +- 四个文档卡片 +- 八条 B2B 常见问题 +- 询价标题和提交按钮文字 +- 询价收件邮箱、WhatsApp 和社交链接 + +指标、认证、起订量、交期、产能、出口市场和可用文件必须在工厂验证后方可发布。 + +## 询价表单 + +精简的询价表单仅收集启动对话所需的信息: + +- 采购方姓名和企业邮箱 +- 可选的公司名称和 WhatsApp/电话 +- 所需产品或服务 +- 简要需求描述 + +表单处理器验证 WordPress nonce,拒绝隐藏反垃圾字段,校验四个必填项,应用隐私保护的速率限制,并通过 `wp_mail()` 发送询价邮件。 + +生产环境请配置认证 SMTP 或事务性邮件插件。上线前请测试有效提交、无效邮箱和重复提交。 + +## 工厂内容清单 + +上线前请准备并验证以下内容: + +- 公司法定名称和工厂地址 +- 成立年份、占地面积、员工人数和产能 +- 支持的膜料类型、颜色和表面工艺 +- 起订量、样品政策和生产交期 +- 工厂、涂布、分切、质检和仓库照片 +- 品质管控流程和批次记录 +- 认证及每份证书上的确切实体名称 +- 各目的地市场的可用文件 +- 出口市场和可披露的项目案例 + +如某项数字或证书无法验证,请保留主题的安全通用文案,不要发布未经支持声明的内容。 + +## 前端行为 + +- Bootstrap 提供响应式栅格、offcanvas 导航、手风琴和表单控件。 +- WordPress 提供 jQuery;主题不另行打包。 +- AOS 和 Colorbox 仅在其 API 可用时初始化。 +- 本地 CSS 和 JavaScript 使用文件修改时间版本号防止浏览器缓存过期。 +- 产品参考按钮预填询价表单中的产品字段。 +- 七个附带的参考产品使用 SVG 占位图,上线前请替换为实拍产品图。 +- 工厂流程封面为通用示意图,非特定车间实拍;有实拍素材时请替换。 +- 布局包含显式的 `min-width: 0` 栅格边界和移动端水平溢出防护。 + +## 生产验证 + +部署后请验证: + +1. 首页清晰标识公司为汽车贴膜制造商而非零售品牌。 +2. 所有工厂指标、照片、品质声明和文件真实有效。 +3. 导航可达服务、产品、工厂、品质、流程和询价。 +4. 产品参考按钮正确预填询价产品字段。 +5. 精简询价邮件成功送达。 +6. 移动端无水平滚动,所有表单字段适配视口。 +7. 键盘焦点、跳转链接、标签、手风琴控件和图片替代文本保持可用。 +8. 常规文章、页面、归档、搜索和 404 路由正常渲染。 + +## 许可证 + +B2B Trade 基于 GNU General Public License v2 or later 许可。打包的第三方前端资源保留其各自许可证。 diff --git a/archive-case.php b/archive-case.php new file mode 100644 index 0000000..6a3df31 --- /dev/null +++ b/archive-case.php @@ -0,0 +1,52 @@ + +
+ +
+ 'case_type', + 'hide_empty' => false, + ) + ); + if ( ! empty( $case_terms ) && ! is_wp_error( $case_terms ) ) : + $current_type = isset( $_GET['case_type'] ) ? sanitize_text_field( wp_unslash( $_GET['case_type'] ) ) : ''; + ?> +
+ + + name ); ?> + +
+ + + + + + +

+ +
+
+ diff --git a/archive-service.php b/archive-service.php new file mode 100644 index 0000000..3d5be11 --- /dev/null +++ b/archive-service.php @@ -0,0 +1,35 @@ + +
+ +
+
+ + +
+
<?php the_title_attribute(); ?>
+
+

+

+

+ +
+
+ +
+ +
+
+ diff --git a/archive.php b/archive.php new file mode 100644 index 0000000..30b7785 --- /dev/null +++ b/archive.php @@ -0,0 +1,18 @@ + +
+ + +
+ +
+ +
+ + + + +
+ diff --git a/assets/css/normalize.css b/assets/css/normalize.css new file mode 100644 index 0000000..c859e20 --- /dev/null +++ b/assets/css/normalize.css @@ -0,0 +1,355 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + + +[data-aos][data-aos][data-aos-duration="50"],body[data-aos-duration="50"] [data-aos]{transition-duration:50ms}[data-aos][data-aos][data-aos-delay="50"],body[data-aos-delay="50"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="50"].aos-animate,body[data-aos-delay="50"] [data-aos].aos-animate{transition-delay:50ms}[data-aos][data-aos][data-aos-duration="100"],body[data-aos-duration="100"] [data-aos]{transition-duration:.1s}[data-aos][data-aos][data-aos-delay="100"],body[data-aos-delay="100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="100"].aos-animate,body[data-aos-delay="100"] [data-aos].aos-animate{transition-delay:.1s}[data-aos][data-aos][data-aos-duration="150"],body[data-aos-duration="150"] [data-aos]{transition-duration:.15s}[data-aos][data-aos][data-aos-delay="150"],body[data-aos-delay="150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="150"].aos-animate,body[data-aos-delay="150"] [data-aos].aos-animate{transition-delay:.15s}[data-aos][data-aos][data-aos-duration="200"],body[data-aos-duration="200"] [data-aos]{transition-duration:.2s}[data-aos][data-aos][data-aos-delay="200"],body[data-aos-delay="200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="200"].aos-animate,body[data-aos-delay="200"] [data-aos].aos-animate{transition-delay:.2s}[data-aos][data-aos][data-aos-duration="250"],body[data-aos-duration="250"] [data-aos]{transition-duration:.25s}[data-aos][data-aos][data-aos-delay="250"],body[data-aos-delay="250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="250"].aos-animate,body[data-aos-delay="250"] [data-aos].aos-animate{transition-delay:.25s}[data-aos][data-aos][data-aos-duration="300"],body[data-aos-duration="300"] [data-aos]{transition-duration:.3s}[data-aos][data-aos][data-aos-delay="300"],body[data-aos-delay="300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="300"].aos-animate,body[data-aos-delay="300"] [data-aos].aos-animate{transition-delay:.3s}[data-aos][data-aos][data-aos-duration="350"],body[data-aos-duration="350"] [data-aos]{transition-duration:.35s}[data-aos][data-aos][data-aos-delay="350"],body[data-aos-delay="350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="350"].aos-animate,body[data-aos-delay="350"] [data-aos].aos-animate{transition-delay:.35s}[data-aos][data-aos][data-aos-duration="400"],body[data-aos-duration="400"] [data-aos]{transition-duration:.4s}[data-aos][data-aos][data-aos-delay="400"],body[data-aos-delay="400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="400"].aos-animate,body[data-aos-delay="400"] [data-aos].aos-animate{transition-delay:.4s}[data-aos][data-aos][data-aos-duration="450"],body[data-aos-duration="450"] [data-aos]{transition-duration:.45s}[data-aos][data-aos][data-aos-delay="450"],body[data-aos-delay="450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="450"].aos-animate,body[data-aos-delay="450"] [data-aos].aos-animate{transition-delay:.45s}[data-aos][data-aos][data-aos-duration="500"],body[data-aos-duration="500"] [data-aos]{transition-duration:.5s}[data-aos][data-aos][data-aos-delay="500"],body[data-aos-delay="500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="500"].aos-animate,body[data-aos-delay="500"] [data-aos].aos-animate{transition-delay:.5s}[data-aos][data-aos][data-aos-duration="550"],body[data-aos-duration="550"] [data-aos]{transition-duration:.55s}[data-aos][data-aos][data-aos-delay="550"],body[data-aos-delay="550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="550"].aos-animate,body[data-aos-delay="550"] [data-aos].aos-animate{transition-delay:.55s}[data-aos][data-aos][data-aos-duration="600"],body[data-aos-duration="600"] [data-aos]{transition-duration:.6s}[data-aos][data-aos][data-aos-delay="600"],body[data-aos-delay="600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="600"].aos-animate,body[data-aos-delay="600"] [data-aos].aos-animate{transition-delay:.6s}[data-aos][data-aos][data-aos-duration="650"],body[data-aos-duration="650"] [data-aos]{transition-duration:.65s}[data-aos][data-aos][data-aos-delay="650"],body[data-aos-delay="650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="650"].aos-animate,body[data-aos-delay="650"] [data-aos].aos-animate{transition-delay:.65s}[data-aos][data-aos][data-aos-duration="700"],body[data-aos-duration="700"] [data-aos]{transition-duration:.7s}[data-aos][data-aos][data-aos-delay="700"],body[data-aos-delay="700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="700"].aos-animate,body[data-aos-delay="700"] [data-aos].aos-animate{transition-delay:.7s}[data-aos][data-aos][data-aos-duration="750"],body[data-aos-duration="750"] [data-aos]{transition-duration:.75s}[data-aos][data-aos][data-aos-delay="750"],body[data-aos-delay="750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="750"].aos-animate,body[data-aos-delay="750"] [data-aos].aos-animate{transition-delay:.75s}[data-aos][data-aos][data-aos-duration="800"],body[data-aos-duration="800"] [data-aos]{transition-duration:.8s}[data-aos][data-aos][data-aos-delay="800"],body[data-aos-delay="800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="800"].aos-animate,body[data-aos-delay="800"] [data-aos].aos-animate{transition-delay:.8s}[data-aos][data-aos][data-aos-duration="850"],body[data-aos-duration="850"] [data-aos]{transition-duration:.85s}[data-aos][data-aos][data-aos-delay="850"],body[data-aos-delay="850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="850"].aos-animate,body[data-aos-delay="850"] [data-aos].aos-animate{transition-delay:.85s}[data-aos][data-aos][data-aos-duration="900"],body[data-aos-duration="900"] [data-aos]{transition-duration:.9s}[data-aos][data-aos][data-aos-delay="900"],body[data-aos-delay="900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="900"].aos-animate,body[data-aos-delay="900"] [data-aos].aos-animate{transition-delay:.9s}[data-aos][data-aos][data-aos-duration="950"],body[data-aos-duration="950"] [data-aos]{transition-duration:.95s}[data-aos][data-aos][data-aos-delay="950"],body[data-aos-delay="950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="950"].aos-animate,body[data-aos-delay="950"] [data-aos].aos-animate{transition-delay:.95s}[data-aos][data-aos][data-aos-duration="1000"],body[data-aos-duration="1000"] [data-aos]{transition-duration:1s}[data-aos][data-aos][data-aos-delay="1000"],body[data-aos-delay="1000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1000"].aos-animate,body[data-aos-delay="1000"] [data-aos].aos-animate{transition-delay:1s}[data-aos][data-aos][data-aos-duration="1050"],body[data-aos-duration="1050"] [data-aos]{transition-duration:1.05s}[data-aos][data-aos][data-aos-delay="1050"],body[data-aos-delay="1050"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1050"].aos-animate,body[data-aos-delay="1050"] [data-aos].aos-animate{transition-delay:1.05s}[data-aos][data-aos][data-aos-duration="1100"],body[data-aos-duration="1100"] [data-aos]{transition-duration:1.1s}[data-aos][data-aos][data-aos-delay="1100"],body[data-aos-delay="1100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1100"].aos-animate,body[data-aos-delay="1100"] [data-aos].aos-animate{transition-delay:1.1s}[data-aos][data-aos][data-aos-duration="1150"],body[data-aos-duration="1150"] [data-aos]{transition-duration:1.15s}[data-aos][data-aos][data-aos-delay="1150"],body[data-aos-delay="1150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1150"].aos-animate,body[data-aos-delay="1150"] [data-aos].aos-animate{transition-delay:1.15s}[data-aos][data-aos][data-aos-duration="1200"],body[data-aos-duration="1200"] [data-aos]{transition-duration:1.2s}[data-aos][data-aos][data-aos-delay="1200"],body[data-aos-delay="1200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1200"].aos-animate,body[data-aos-delay="1200"] [data-aos].aos-animate{transition-delay:1.2s}[data-aos][data-aos][data-aos-duration="1250"],body[data-aos-duration="1250"] [data-aos]{transition-duration:1.25s}[data-aos][data-aos][data-aos-delay="1250"],body[data-aos-delay="1250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1250"].aos-animate,body[data-aos-delay="1250"] [data-aos].aos-animate{transition-delay:1.25s}[data-aos][data-aos][data-aos-duration="1300"],body[data-aos-duration="1300"] [data-aos]{transition-duration:1.3s}[data-aos][data-aos][data-aos-delay="1300"],body[data-aos-delay="1300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1300"].aos-animate,body[data-aos-delay="1300"] [data-aos].aos-animate{transition-delay:1.3s}[data-aos][data-aos][data-aos-duration="1350"],body[data-aos-duration="1350"] [data-aos]{transition-duration:1.35s}[data-aos][data-aos][data-aos-delay="1350"],body[data-aos-delay="1350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1350"].aos-animate,body[data-aos-delay="1350"] [data-aos].aos-animate{transition-delay:1.35s}[data-aos][data-aos][data-aos-duration="1400"],body[data-aos-duration="1400"] [data-aos]{transition-duration:1.4s}[data-aos][data-aos][data-aos-delay="1400"],body[data-aos-delay="1400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1400"].aos-animate,body[data-aos-delay="1400"] [data-aos].aos-animate{transition-delay:1.4s}[data-aos][data-aos][data-aos-duration="1450"],body[data-aos-duration="1450"] [data-aos]{transition-duration:1.45s}[data-aos][data-aos][data-aos-delay="1450"],body[data-aos-delay="1450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1450"].aos-animate,body[data-aos-delay="1450"] [data-aos].aos-animate{transition-delay:1.45s}[data-aos][data-aos][data-aos-duration="1500"],body[data-aos-duration="1500"] [data-aos]{transition-duration:1.5s}[data-aos][data-aos][data-aos-delay="1500"],body[data-aos-delay="1500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1500"].aos-animate,body[data-aos-delay="1500"] [data-aos].aos-animate{transition-delay:1.5s}[data-aos][data-aos][data-aos-duration="1550"],body[data-aos-duration="1550"] [data-aos]{transition-duration:1.55s}[data-aos][data-aos][data-aos-delay="1550"],body[data-aos-delay="1550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1550"].aos-animate,body[data-aos-delay="1550"] [data-aos].aos-animate{transition-delay:1.55s}[data-aos][data-aos][data-aos-duration="1600"],body[data-aos-duration="1600"] [data-aos]{transition-duration:1.6s}[data-aos][data-aos][data-aos-delay="1600"],body[data-aos-delay="1600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1600"].aos-animate,body[data-aos-delay="1600"] [data-aos].aos-animate{transition-delay:1.6s}[data-aos][data-aos][data-aos-duration="1650"],body[data-aos-duration="1650"] [data-aos]{transition-duration:1.65s}[data-aos][data-aos][data-aos-delay="1650"],body[data-aos-delay="1650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1650"].aos-animate,body[data-aos-delay="1650"] [data-aos].aos-animate{transition-delay:1.65s}[data-aos][data-aos][data-aos-duration="1700"],body[data-aos-duration="1700"] [data-aos]{transition-duration:1.7s}[data-aos][data-aos][data-aos-delay="1700"],body[data-aos-delay="1700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1700"].aos-animate,body[data-aos-delay="1700"] [data-aos].aos-animate{transition-delay:1.7s}[data-aos][data-aos][data-aos-duration="1750"],body[data-aos-duration="1750"] [data-aos]{transition-duration:1.75s}[data-aos][data-aos][data-aos-delay="1750"],body[data-aos-delay="1750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1750"].aos-animate,body[data-aos-delay="1750"] [data-aos].aos-animate{transition-delay:1.75s}[data-aos][data-aos][data-aos-duration="1800"],body[data-aos-duration="1800"] [data-aos]{transition-duration:1.8s}[data-aos][data-aos][data-aos-delay="1800"],body[data-aos-delay="1800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1800"].aos-animate,body[data-aos-delay="1800"] [data-aos].aos-animate{transition-delay:1.8s}[data-aos][data-aos][data-aos-duration="1850"],body[data-aos-duration="1850"] [data-aos]{transition-duration:1.85s}[data-aos][data-aos][data-aos-delay="1850"],body[data-aos-delay="1850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1850"].aos-animate,body[data-aos-delay="1850"] [data-aos].aos-animate{transition-delay:1.85s}[data-aos][data-aos][data-aos-duration="1900"],body[data-aos-duration="1900"] [data-aos]{transition-duration:1.9s}[data-aos][data-aos][data-aos-delay="1900"],body[data-aos-delay="1900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1900"].aos-animate,body[data-aos-delay="1900"] [data-aos].aos-animate{transition-delay:1.9s}[data-aos][data-aos][data-aos-duration="1950"],body[data-aos-duration="1950"] [data-aos]{transition-duration:1.95s}[data-aos][data-aos][data-aos-delay="1950"],body[data-aos-delay="1950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1950"].aos-animate,body[data-aos-delay="1950"] [data-aos].aos-animate{transition-delay:1.95s}[data-aos][data-aos][data-aos-duration="2000"],body[data-aos-duration="2000"] [data-aos]{transition-duration:2s}[data-aos][data-aos][data-aos-delay="2000"],body[data-aos-delay="2000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2000"].aos-animate,body[data-aos-delay="2000"] [data-aos].aos-animate{transition-delay:2s}[data-aos][data-aos][data-aos-duration="2050"],body[data-aos-duration="2050"] [data-aos]{transition-duration:2.05s}[data-aos][data-aos][data-aos-delay="2050"],body[data-aos-delay="2050"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2050"].aos-animate,body[data-aos-delay="2050"] [data-aos].aos-animate{transition-delay:2.05s}[data-aos][data-aos][data-aos-duration="2100"],body[data-aos-duration="2100"] [data-aos]{transition-duration:2.1s}[data-aos][data-aos][data-aos-delay="2100"],body[data-aos-delay="2100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2100"].aos-animate,body[data-aos-delay="2100"] [data-aos].aos-animate{transition-delay:2.1s}[data-aos][data-aos][data-aos-duration="2150"],body[data-aos-duration="2150"] [data-aos]{transition-duration:2.15s}[data-aos][data-aos][data-aos-delay="2150"],body[data-aos-delay="2150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2150"].aos-animate,body[data-aos-delay="2150"] [data-aos].aos-animate{transition-delay:2.15s}[data-aos][data-aos][data-aos-duration="2200"],body[data-aos-duration="2200"] [data-aos]{transition-duration:2.2s}[data-aos][data-aos][data-aos-delay="2200"],body[data-aos-delay="2200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2200"].aos-animate,body[data-aos-delay="2200"] [data-aos].aos-animate{transition-delay:2.2s}[data-aos][data-aos][data-aos-duration="2250"],body[data-aos-duration="2250"] [data-aos]{transition-duration:2.25s}[data-aos][data-aos][data-aos-delay="2250"],body[data-aos-delay="2250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2250"].aos-animate,body[data-aos-delay="2250"] [data-aos].aos-animate{transition-delay:2.25s}[data-aos][data-aos][data-aos-duration="2300"],body[data-aos-duration="2300"] [data-aos]{transition-duration:2.3s}[data-aos][data-aos][data-aos-delay="2300"],body[data-aos-delay="2300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2300"].aos-animate,body[data-aos-delay="2300"] [data-aos].aos-animate{transition-delay:2.3s}[data-aos][data-aos][data-aos-duration="2350"],body[data-aos-duration="2350"] [data-aos]{transition-duration:2.35s}[data-aos][data-aos][data-aos-delay="2350"],body[data-aos-delay="2350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2350"].aos-animate,body[data-aos-delay="2350"] [data-aos].aos-animate{transition-delay:2.35s}[data-aos][data-aos][data-aos-duration="2400"],body[data-aos-duration="2400"] [data-aos]{transition-duration:2.4s}[data-aos][data-aos][data-aos-delay="2400"],body[data-aos-delay="2400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2400"].aos-animate,body[data-aos-delay="2400"] [data-aos].aos-animate{transition-delay:2.4s}[data-aos][data-aos][data-aos-duration="2450"],body[data-aos-duration="2450"] [data-aos]{transition-duration:2.45s}[data-aos][data-aos][data-aos-delay="2450"],body[data-aos-delay="2450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2450"].aos-animate,body[data-aos-delay="2450"] [data-aos].aos-animate{transition-delay:2.45s}[data-aos][data-aos][data-aos-duration="2500"],body[data-aos-duration="2500"] [data-aos]{transition-duration:2.5s}[data-aos][data-aos][data-aos-delay="2500"],body[data-aos-delay="2500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2500"].aos-animate,body[data-aos-delay="2500"] [data-aos].aos-animate{transition-delay:2.5s}[data-aos][data-aos][data-aos-duration="2550"],body[data-aos-duration="2550"] [data-aos]{transition-duration:2.55s}[data-aos][data-aos][data-aos-delay="2550"],body[data-aos-delay="2550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2550"].aos-animate,body[data-aos-delay="2550"] [data-aos].aos-animate{transition-delay:2.55s}[data-aos][data-aos][data-aos-duration="2600"],body[data-aos-duration="2600"] [data-aos]{transition-duration:2.6s}[data-aos][data-aos][data-aos-delay="2600"],body[data-aos-delay="2600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2600"].aos-animate,body[data-aos-delay="2600"] [data-aos].aos-animate{transition-delay:2.6s}[data-aos][data-aos][data-aos-duration="2650"],body[data-aos-duration="2650"] [data-aos]{transition-duration:2.65s}[data-aos][data-aos][data-aos-delay="2650"],body[data-aos-delay="2650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2650"].aos-animate,body[data-aos-delay="2650"] [data-aos].aos-animate{transition-delay:2.65s}[data-aos][data-aos][data-aos-duration="2700"],body[data-aos-duration="2700"] [data-aos]{transition-duration:2.7s}[data-aos][data-aos][data-aos-delay="2700"],body[data-aos-delay="2700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2700"].aos-animate,body[data-aos-delay="2700"] [data-aos].aos-animate{transition-delay:2.7s}[data-aos][data-aos][data-aos-duration="2750"],body[data-aos-duration="2750"] [data-aos]{transition-duration:2.75s}[data-aos][data-aos][data-aos-delay="2750"],body[data-aos-delay="2750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2750"].aos-animate,body[data-aos-delay="2750"] [data-aos].aos-animate{transition-delay:2.75s}[data-aos][data-aos][data-aos-duration="2800"],body[data-aos-duration="2800"] [data-aos]{transition-duration:2.8s}[data-aos][data-aos][data-aos-delay="2800"],body[data-aos-delay="2800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2800"].aos-animate,body[data-aos-delay="2800"] [data-aos].aos-animate{transition-delay:2.8s}[data-aos][data-aos][data-aos-duration="2850"],body[data-aos-duration="2850"] [data-aos]{transition-duration:2.85s}[data-aos][data-aos][data-aos-delay="2850"],body[data-aos-delay="2850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2850"].aos-animate,body[data-aos-delay="2850"] [data-aos].aos-animate{transition-delay:2.85s}[data-aos][data-aos][data-aos-duration="2900"],body[data-aos-duration="2900"] [data-aos]{transition-duration:2.9s}[data-aos][data-aos][data-aos-delay="2900"],body[data-aos-delay="2900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2900"].aos-animate,body[data-aos-delay="2900"] [data-aos].aos-animate{transition-delay:2.9s}[data-aos][data-aos][data-aos-duration="2950"],body[data-aos-duration="2950"] [data-aos]{transition-duration:2.95s}[data-aos][data-aos][data-aos-delay="2950"],body[data-aos-delay="2950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2950"].aos-animate,body[data-aos-delay="2950"] [data-aos].aos-animate{transition-delay:2.95s}[data-aos][data-aos][data-aos-duration="3000"],body[data-aos-duration="3000"] [data-aos]{transition-duration:3s}[data-aos][data-aos][data-aos-delay="3000"],body[data-aos-delay="3000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="3000"].aos-animate,body[data-aos-delay="3000"] [data-aos].aos-animate{transition-delay:3s}[data-aos][data-aos][data-aos-easing=linear],body[data-aos-easing=linear] [data-aos]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos][data-aos][data-aos-easing=ease],body[data-aos-easing=ease] [data-aos]{transition-timing-function:ease}[data-aos][data-aos][data-aos-easing=ease-in],body[data-aos-easing=ease-in] [data-aos]{transition-timing-function:ease-in}[data-aos][data-aos][data-aos-easing=ease-out],body[data-aos-easing=ease-out] [data-aos]{transition-timing-function:ease-out}[data-aos][data-aos][data-aos-easing=ease-in-out],body[data-aos-easing=ease-in-out] [data-aos]{transition-timing-function:ease-in-out}[data-aos][data-aos][data-aos-easing=ease-in-back],body[data-aos-easing=ease-in-back] [data-aos]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos][data-aos][data-aos-easing=ease-out-back],body[data-aos-easing=ease-out-back] [data-aos]{transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[data-aos][data-aos][data-aos-easing=ease-in-out-back],body[data-aos-easing=ease-in-out-back] [data-aos]{transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[data-aos][data-aos][data-aos-easing=ease-in-sine],body[data-aos-easing=ease-in-sine] [data-aos]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos][data-aos][data-aos-easing=ease-out-sine],body[data-aos-easing=ease-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos][data-aos][data-aos-easing=ease-in-out-sine],body[data-aos-easing=ease-in-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos][data-aos][data-aos-easing=ease-in-quad],body[data-aos-easing=ease-in-quad] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quad],body[data-aos-easing=ease-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quad],body[data-aos-easing=ease-in-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-cubic],body[data-aos-easing=ease-in-cubic] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-cubic],body[data-aos-easing=ease-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-cubic],body[data-aos-easing=ease-in-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-quart],body[data-aos-easing=ease-in-quart] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quart],body[data-aos-easing=ease-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quart],body[data-aos-easing=ease-in-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos^=fade][data-aos^=fade]{opacity:0;transition-property:opacity,transform}[data-aos^=fade][data-aos^=fade].aos-animate{opacity:1;transform:translateZ(0)}[data-aos=fade-up]{transform:translate3d(0,100px,0)}[data-aos=fade-down]{transform:translate3d(0,-100px,0)}[data-aos=fade-right]{transform:translate3d(-100px,0,0)}[data-aos=fade-left]{transform:translate3d(100px,0,0)}[data-aos=fade-up-right]{transform:translate3d(-100px,100px,0)}[data-aos=fade-up-left]{transform:translate3d(100px,100px,0)}[data-aos=fade-down-right]{transform:translate3d(-100px,-100px,0)}[data-aos=fade-down-left]{transform:translate3d(100px,-100px,0)}[data-aos^=zoom][data-aos^=zoom]{opacity:0;transition-property:opacity,transform}[data-aos^=zoom][data-aos^=zoom].aos-animate{opacity:1;transform:translateZ(0) scale(1)}[data-aos=zoom-in]{transform:scale(.6)}[data-aos=zoom-in-up]{transform:translate3d(0,100px,0) scale(.6)}[data-aos=zoom-in-down]{transform:translate3d(0,-100px,0) scale(.6)}[data-aos=zoom-in-right]{transform:translate3d(-100px,0,0) scale(.6)}[data-aos=zoom-in-left]{transform:translate3d(100px,0,0) scale(.6)}[data-aos=zoom-out]{transform:scale(1.2)}[data-aos=zoom-out-up]{transform:translate3d(0,100px,0) scale(1.2)}[data-aos=zoom-out-down]{transform:translate3d(0,-100px,0) scale(1.2)}[data-aos=zoom-out-right]{transform:translate3d(-100px,0,0) scale(1.2)}[data-aos=zoom-out-left]{transform:translate3d(100px,0,0) scale(1.2)}[data-aos^=slide][data-aos^=slide]{transition-property:transform}[data-aos^=slide][data-aos^=slide].aos-animate{transform:translateZ(0)}[data-aos=slide-up]{transform:translate3d(0,100%,0)}[data-aos=slide-down]{transform:translate3d(0,-100%,0)}[data-aos=slide-right]{transform:translate3d(-100%,0,0)}[data-aos=slide-left]{transform:translate3d(100%,0,0)}[data-aos^=flip][data-aos^=flip]{backface-visibility:hidden;transition-property:transform}[data-aos=flip-left]{transform:perspective(2500px) rotateY(-100deg)}[data-aos=flip-left].aos-animate{transform:perspective(2500px) rotateY(0)}[data-aos=flip-right]{transform:perspective(2500px) rotateY(100deg)}[data-aos=flip-right].aos-animate{transform:perspective(2500px) rotateY(0)}[data-aos=flip-up]{transform:perspective(2500px) rotateX(-100deg)}[data-aos=flip-up].aos-animate{transform:perspective(2500px) rotateX(0)}[data-aos=flip-down]{transform:perspective(2500px) rotateX(100deg)}[data-aos=flip-down].aos-animate{transform:perspective(2500px) rotateX(0)} + + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type='button']::-moz-focus-inner, +[type='reset']::-moz-focus-inner, +[type='submit']::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type='button']:-moz-focusring, +[type='reset']:-moz-focusring, +[type='submit']:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type='checkbox'], +[type='radio'] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type='number']::-webkit-inner-spin-button, +[type='number']::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type='search'] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type='search']::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} \ No newline at end of file diff --git a/assets/css/theme.css b/assets/css/theme.css new file mode 100644 index 0000000..5fcdd35 --- /dev/null +++ b/assets/css/theme.css @@ -0,0 +1,1031 @@ +:root { + --b2b-ink: #19343d; + --b2b-ink-soft: #526a72; + --b2b-blue: #6f929f; + --b2b-blue-dark: #426874; + --b2b-mist: #e8f1f4; + --b2b-mist-light: #f5f9fa; + --b2b-sand: #f2eee8; + --b2b-line: #d9e2e5; + --b2b-white: #ffffff; + --b2b-shadow: 0 20px 55px rgba(25, 52, 61, 0.1); +} + +html { + scroll-behavior: smooth; + scroll-padding-top: 92px; + overflow-x: clip; +} + +body { + margin: 0; + color: var(--b2b-ink-soft); + background: var(--b2b-white); + font-family: "Josefin Sans", "Noto Sans SC", Arial, sans-serif; + font-size: 17px; + line-height: 1.65; + overflow-x: clip; +} + +body, +button, +input, +select, +textarea { + letter-spacing: 0.015em; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + color: var(--b2b-ink); + font-family: "Jost", "Noto Sans SC", Arial, sans-serif; + font-weight: 400; + line-height: 1.15; +} + +p:last-child { + margin-bottom: 0; +} + +a { + color: var(--b2b-blue-dark); + text-decoration-thickness: 1px; + text-underline-offset: 0.2em; +} + +img { + max-width: 100%; + height: auto; +} + +.fragrance-symbols { + position: absolute; + width: 0; + height: 0; + overflow: hidden; +} + +.b2b-section { + position: relative; + padding: 110px 0; +} + +.section-heading { + max-width: 860px; +} + +.section-heading.text-center { + max-width: 820px; +} + +.section-heading h2, +.factory-proof h2, +.customization-section h2, +.documents-section h2, +.faq-section h2, +.rfq-section h2 { + margin-bottom: 22px; + font-size: clamp(2.25rem, 4vw, 4rem); + letter-spacing: -0.025em; +} + +.section-heading p, +.section-lead { + font-size: 1.1rem; +} + +.section-eyebrow { + margin-bottom: 16px; + color: var(--b2b-blue-dark); + font-size: 0.78rem; + font-weight: 700; + letter-spacing: 0.2em; + text-transform: uppercase; +} + +.btn { + border-radius: 0; + font-size: 0.86rem; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + transition: transform 180ms ease, background-color 180ms ease, color 180ms ease, border-color 180ms ease; +} + +.btn:hover { + transform: translateY(-2px); +} + +.btn-b2b-primary { + padding: 15px 24px; + color: var(--b2b-white); + background: var(--b2b-ink); + border: 1px solid var(--b2b-ink); +} + +.btn-b2b-primary:hover, +.btn-b2b-primary:focus { + color: var(--b2b-white); + background: var(--b2b-blue-dark); + border-color: var(--b2b-blue-dark); +} + +.btn-b2b-secondary, +.btn-b2b-outline { + padding: 15px 24px; + color: var(--b2b-ink); + background: transparent; + border: 1px solid var(--b2b-ink); +} + +.btn-b2b-secondary:hover, +.btn-b2b-outline:hover { + color: var(--b2b-white); + background: var(--b2b-ink); +} + +.btn-b2b-light { + padding: 14px 22px; + color: var(--b2b-ink); + background: var(--b2b-white); + border: 1px solid var(--b2b-white); +} + +.text-link { + display: inline-flex; + align-items: center; + gap: 8px; + color: var(--b2b-ink); + font-size: 0.83rem; + font-weight: 700; + letter-spacing: 0.06em; + text-decoration: none; + text-transform: uppercase; +} + +.text-link:hover { + color: var(--b2b-blue-dark); +} + +/* Header */ +.b2b-header { + color: var(--b2b-ink); + background: rgba(255, 255, 255, 0.96); + border-bottom: 1px solid rgba(25, 52, 61, 0.08); + backdrop-filter: blur(14px); + transition: box-shadow 180ms ease, background-color 180ms ease; +} + +.b2b-header.sticky { + background: rgba(255, 255, 255, 0.99); + box-shadow: 0 8px 28px rgba(25, 52, 61, 0.09); +} + +.b2b-header .navbar { + min-height: 86px; +} + +.b2b-wordmark { + color: var(--b2b-ink); + font-family: "Jost", "Noto Sans SC", Arial, sans-serif; + font-size: 1.45rem; + letter-spacing: 0.12em; + text-decoration: none; + text-transform: uppercase; +} + +.custom-logo, +.custom-logo-link img { + width: auto; + max-width: 220px; + max-height: 62px; +} + +.b2b-header .nav-link { + color: var(--b2b-ink); + font-size: 0.84rem; + font-weight: 600; + letter-spacing: 0.04em; +} + +.b2b-header .nav-link:hover, +.b2b-header .nav-link:focus { + color: var(--b2b-blue-dark); +} + +.b2b-header-cta { + padding: 11px 17px; + color: var(--b2b-white); + background: var(--b2b-ink); + border: 1px solid var(--b2b-ink); + white-space: nowrap; +} + +.admin-bar .site-header { + top: 32px; +} + +/* Hero */ +.b2b-hero { + display: flex; + min-height: 780px; + padding: 160px 0 90px; + align-items: center; + background: + radial-gradient(circle at 84% 12%, rgba(111, 146, 159, 0.18), transparent 30%), + linear-gradient(135deg, var(--b2b-mist-light), var(--b2b-mist)); +} + +.b2b-hero h1 { + max-width: 900px; + margin-bottom: 28px; + font-size: clamp(3rem, 6.4vw, 6.4rem); + letter-spacing: -0.04em; +} + +.b2b-hero-lead { + max-width: 760px; + font-size: clamp(1.08rem, 1.7vw, 1.35rem); +} + +.hero-proof-list li { + position: relative; + padding-left: 18px; + color: var(--b2b-ink); + font-size: 0.82rem; + font-weight: 700; + letter-spacing: 0.05em; + text-transform: uppercase; +} + +.hero-proof-list li::before { + position: absolute; + top: 0.72em; + left: 0; + width: 7px; + height: 7px; + content: ""; + background: var(--b2b-blue); + border-radius: 50%; +} + +/* Trust strip */ +.trust-strip { + color: var(--b2b-white); + background: var(--b2b-ink); +} + +.trust-metric { + min-height: 145px; + padding: 30px 24px; + border-right: 1px solid rgba(255, 255, 255, 0.14); +} + +.trust-metric:last-child { + border-right: 0; +} + +.trust-metric strong, +.trust-metric span { + display: block; +} + +.trust-metric strong { + margin-bottom: 7px; + color: var(--b2b-white); + font-family: "Jost", "Noto Sans SC", Arial, sans-serif; + font-size: clamp(1.45rem, 2.7vw, 2.25rem); + font-weight: 400; +} + +.trust-metric span { + color: rgba(255, 255, 255, 0.72); + font-size: 0.82rem; + letter-spacing: 0.06em; + text-transform: uppercase; +} + +/* Services */ +.services-section { + background: var(--b2b-white); +} + +.service-card { + display: flex; + min-height: 360px; + padding: 32px; + flex-direction: column; + background: var(--b2b-mist-light); + border: 1px solid var(--b2b-line); + transition: transform 180ms ease, box-shadow 180ms ease; +} + +.service-card:hover { + transform: translateY(-6px); + box-shadow: var(--b2b-shadow); +} + +.card-index { + margin-bottom: 46px; + color: var(--b2b-blue); + font-family: "Jost", "Noto Sans SC", Arial, sans-serif; + font-size: 1.1rem; +} + +.service-card h3 { + margin-bottom: 18px; + font-size: 1.55rem; +} + +.service-card p { + margin-bottom: 28px; +} + +.service-card .text-link { + margin-top: auto; +} + +/* Capability grid */ +.capabilities-section { + background: var(--b2b-mist-light); +} + +.capability-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 28px; +} + +.capability-card { + display: grid; + min-width: 0; + overflow: hidden; + grid-template-rows: auto 1fr; + background: var(--b2b-white); + border: 1px solid var(--b2b-line); +} + +.capability-image { + aspect-ratio: 1; + overflow: hidden; + background: var(--b2b-mist); +} + +.capability-image img { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform 400ms ease; +} + +.capability-card:hover .capability-image img { + transform: scale(1.035); +} + +.capability-body { + display: flex; + min-width: 0; + padding: 28px; + flex-direction: column; +} + +.capability-label { + color: var(--b2b-blue-dark); + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.12em; + text-transform: uppercase; +} + +.capability-body h3 { + font-size: clamp(1.4rem, 2vw, 1.85rem); +} + +.capability-specs { + padding-top: 18px; + margin-bottom: 22px; + color: var(--b2b-ink); + border-top: 1px solid var(--b2b-line); + font-size: 0.88rem; + font-weight: 600; +} + +.capability-body .btn { + margin-top: auto; + align-self: flex-start; +} + +/* Customization */ +.customization-section { + color: rgba(255, 255, 255, 0.74); + background: var(--b2b-ink); +} + +.customization-section h2, +.customization-section .section-eyebrow { + color: var(--b2b-white); +} + +.customization-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + border-top: 1px solid rgba(255, 255, 255, 0.16); + border-left: 1px solid rgba(255, 255, 255, 0.16); +} + +.customization-item { + min-width: 0; + padding: 27px; + border-right: 1px solid rgba(255, 255, 255, 0.16); + border-bottom: 1px solid rgba(255, 255, 255, 0.16); +} + +.customization-item span { + display: block; + margin-bottom: 20px; + color: var(--b2b-blue); + font-size: 0.8rem; +} + +.customization-item h3 { + margin: 0; + color: var(--b2b-white); + font-size: 1.2rem; +} + +/* Factory proof */ +.factory-proof { + background: var(--b2b-white); +} + +.factory-points li { + display: flex; + margin-bottom: 14px; + gap: 12px; + color: var(--b2b-ink); +} + +.factory-points span { + color: var(--b2b-blue-dark); + font-weight: 700; +} + +.factory-gallery { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + grid-template-rows: repeat(2, 250px); + gap: 16px; +} + +.factory-gallery figure { + margin: 0; + overflow: hidden; + background: var(--b2b-mist); +} + +.factory-gallery figure:first-child { + grid-row: span 2; +} + +.factory-gallery img { + width: 100%; + height: 100%; + object-fit: cover; +} + +/* Factory video */ +.factory-video-section { + padding-bottom: 110px; +} + +.factory-video-card { + position: relative; + min-height: 560px; + overflow: hidden; + background: var(--b2b-ink); +} + +.factory-video-card > img { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + object-fit: cover; + opacity: 0.68; +} + +.factory-video-overlay { + position: relative; + z-index: 1; + display: flex; + max-width: 760px; + min-height: 560px; + padding: 70px; + flex-direction: column; + justify-content: center; + color: rgba(255, 255, 255, 0.82); +} + +.factory-video-overlay h2, +.factory-video-overlay .section-eyebrow { + color: var(--b2b-white); +} + +.factory-video-overlay h2 { + font-size: clamp(2.2rem, 4.6vw, 4.6rem); +} + +.factory-video-disclosure { + max-width: 620px; + margin-top: 8px; + color: rgba(255, 255, 255, 0.68); + font-size: 0.78rem; + font-weight: 600; + letter-spacing: 0.04em; +} + +.video-play-link { + display: inline-flex; + margin-top: 24px; + align-items: center; + gap: 16px; + color: var(--b2b-white); + font-weight: 700; + text-decoration: none; +} + +/* Quality */ +.quality-section { + background: var(--b2b-sand); +} + +.quality-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 1px; + background: rgba(25, 52, 61, 0.14); + border: 1px solid rgba(25, 52, 61, 0.14); +} + +.quality-card { + min-width: 0; + min-height: 285px; + padding: 34px; + background: var(--b2b-sand); +} + +.quality-number { + display: block; + margin-bottom: 45px; + color: var(--b2b-blue-dark); + font-size: 0.82rem; + font-weight: 700; +} + +.quality-card h3 { + font-size: 1.35rem; +} + +/* Process */ +.process-section { + background: var(--b2b-white); +} + +.process-grid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 22px; +} + +.process-step { + position: relative; + min-width: 0; + min-height: 285px; + padding: 30px 26px; + background: var(--b2b-mist-light); + border-top: 4px solid var(--b2b-blue); +} + +.process-step span { + display: block; + margin-bottom: 35px; + color: var(--b2b-blue-dark); + font-weight: 700; +} + +.process-step h3 { + font-size: 1.28rem; +} + +/* Project scenarios */ +.projects-section { + background: var(--b2b-mist); +} + +.project-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 24px; +} + +.project-card { + display: flex; + min-width: 0; + min-height: 360px; + padding: 36px; + flex-direction: column; + background: var(--b2b-white); +} + +.project-meta { + color: var(--b2b-blue-dark); + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.12em; +} + +.project-card h3 { + margin: 22px 0; + font-size: 1.75rem; +} + +.project-card .text-link { + margin-top: auto; +} + +/* Documents */ +.documents-section { + color: rgba(255, 255, 255, 0.72); + background: var(--b2b-blue-dark); +} + +.documents-section h2, +.documents-section h3, +.documents-section .section-eyebrow { + color: var(--b2b-white); +} + +.document-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 18px; +} + +.document-grid article { + display: flex; + min-width: 0; + padding: 26px; + gap: 16px; + border: 1px solid rgba(255, 255, 255, 0.18); +} + +.document-grid article > span { + color: var(--b2b-white); + font-weight: 700; +} + +.document-grid h3 { + font-size: 1.18rem; +} + +.document-grid p { + font-size: 0.94rem; +} + +/* FAQ */ +.faq-section { + background: var(--b2b-white); +} + +.faq-section .accordion-item { + border: 0; + border-bottom: 1px solid var(--b2b-line); +} + +.faq-section .accordion-button { + padding: 24px 0; + color: var(--b2b-ink); + background: transparent; + box-shadow: none; + font-family: "Jost", "Noto Sans SC", Arial, sans-serif; + font-size: 1.15rem; +} + +.faq-section .accordion-button:not(.collapsed) { + color: var(--b2b-blue-dark); +} + +.faq-section .accordion-body { + padding: 0 0 25px; +} + +/* RFQ */ +.rfq-section { + background: var(--b2b-mist-light); +} + +.rfq-direct { + margin-top: 40px; + padding: 24px; + background: var(--b2b-white); + border-left: 4px solid var(--b2b-blue); +} + +.rfq-direct h3 { + font-size: 1.1rem; +} + +.rfq-form-card { + padding: 34px; + background: var(--b2b-white); + box-shadow: var(--b2b-shadow); +} + +.rfq-form-card label { + display: block; + margin-bottom: 7px; + color: var(--b2b-ink); + font-size: 0.82rem; + font-weight: 700; +} + +.rfq-form-card .form-control, +.rfq-form-card .form-select { + min-height: 46px; + color: var(--b2b-ink); + background-color: var(--b2b-mist-light); + border: 1px solid var(--b2b-line); + border-radius: 0; +} + +.rfq-form-card textarea.form-control { + min-height: auto; +} + +.rfq-form-card .form-control:focus, +.rfq-form-card .form-select:focus { + border-color: var(--b2b-blue-dark); + box-shadow: 0 0 0 3px rgba(111, 146, 159, 0.16); +} + +.rfq-privacy-note { + margin: 18px 0 14px; + color: var(--b2b-muted); + font-size: 0.78rem; +} + +.fragrance-form-status p { + margin-bottom: 24px; + padding: 14px 16px; + color: var(--b2b-ink); + background: var(--b2b-mist); + border-left: 4px solid var(--b2b-blue-dark); +} + +.fragrance-honeypot { + position: absolute !important; + left: -10000px !important; + width: 1px; + height: 1px; + overflow: hidden; +} + +/* Footer */ +.b2b-footer { + color: rgba(255, 255, 255, 0.68); + background: #11282f; +} + +.b2b-footer a { + color: rgba(255, 255, 255, 0.8); +} + +.b2b-footer a:hover { + color: var(--b2b-white); +} + +.footer-positioning { + max-width: 520px; + font-size: 1.08rem; +} + +.footer-kicker { + color: var(--b2b-white); + font-size: 0.78rem; + letter-spacing: 0.14em; + text-transform: uppercase; +} + +.footer-links li { + margin-bottom: 10px; +} + +.footer-bottom { + border-color: rgba(255, 255, 255, 0.14) !important; + font-size: 0.8rem; +} + +/* WordPress content and accessibility */ +.fragrance-content-area { + min-height: 65vh; + padding-top: 135px !important; + padding-bottom: 80px !important; +} + +.fragrance-entry { + max-width: 920px; + margin: 0 auto; +} + +.entry-title { + font-size: clamp(2.2rem, 4vw, 4rem); +} + +.screen-reader-text { + position: absolute !important; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(50%); + border: 0; +} + +.screen-reader-text:focus, +.skip-link:focus { + top: 12px; + left: 12px; + z-index: 100000; + width: auto; + height: auto; + padding: 12px 16px; + clip: auto !important; + clip-path: none; + color: var(--b2b-ink); + background: var(--b2b-white); + box-shadow: 0 0 0 3px rgba(25, 52, 61, 0.25); +} + +a:focus-visible, +button:focus-visible, +input:focus-visible, +select:focus-visible, +textarea:focus-visible { + outline: 3px solid var(--b2b-blue-dark); + outline-offset: 3px; +} + +.alignleft { float: left; margin: 0 1.5rem 1rem 0; } +.alignright { float: right; margin: 0 0 1rem 1.5rem; } +.aligncenter { display: block; margin-right: auto; margin-left: auto; } +.alignwide { width: 90vw; max-width: 90vw; margin-left: calc(50% - 45vw); } +.wp-caption, .gallery-caption { max-width: 100%; } + +@media (max-width: 1199px) { + .b2b-header .offcanvas-body { + display: block; + padding: 36px; + } + + .b2b-header .navbar-nav { + gap: 22px; + margin-bottom: 28px; + } + + .capability-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .process-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} + +@media (max-width: 991px) { + .b2b-section { + padding: 82px 0; + } + + .b2b-hero { + min-height: 0; + padding: 150px 0 80px; + } + + .project-grid { + grid-template-columns: 1fr; + } + + .quality-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .factory-gallery { + margin-top: 20px; + } + + .factory-video-section { + padding-bottom: 82px; + } +} + +@media (max-width: 782px) { + .admin-bar .site-header { + top: 46px; + } +} + +@media (max-width: 768px) { + body { + font-size: 16px; + } + + .b2b-section { + padding: 66px 0; + } + + .b2b-hero { + padding-top: 132px; + } + + .b2b-hero h1 { + font-size: clamp(2.6rem, 12vw, 4rem); + } + + .hero-proof-list { + display: grid !important; + grid-template-columns: 1fr; + } + + .trust-metric { + min-height: 130px; + padding: 24px 17px; + border-right: 1px solid rgba(255, 255, 255, 0.14); + border-bottom: 1px solid rgba(255, 255, 255, 0.14); + } + + .capability-grid, + .customization-grid, + .quality-grid, + .process-grid, + .document-grid { + grid-template-columns: 1fr; + } + + .factory-gallery { + grid-template-rows: repeat(2, 180px); + } + + .factory-video-card, + .factory-video-overlay { + min-height: 480px; + } + + .factory-video-overlay, + .rfq-form-card { + padding: 30px 24px; + } + + .project-card, + .service-card { + min-height: 0; + } +} + +@media (max-width: 480px) { + .b2b-hero .btn { + width: 100%; + } + + .factory-gallery { + display: grid; + grid-template-columns: 1fr; + grid-template-rows: repeat(4, 220px); + } + + .factory-gallery figure:first-child { + grid-row: auto; + } + + .capability-body, + .service-card, + .quality-card, + .project-card { + padding: 26px 22px; + } +} + +@media (prefers-reduced-motion: reduce) { + html { scroll-behavior: auto !important; } + *, *::before, *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } +} diff --git a/assets/css/vendor.css b/assets/css/vendor.css new file mode 100644 index 0000000..6160698 --- /dev/null +++ b/assets/css/vendor.css @@ -0,0 +1,92 @@ +/* +- Jarallax +- Chocolat +*/ + +/*-------------------------------------------------------------- +/** Jarallax +--------------------------------------------------------------*/ +.jarallax { + position: relative; + z-index: 0; + min-height: 420px; +} + +.jarallax>.jarallax-img { + position: absolute; + object-fit: cover; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: -1; +} + +.jarallax-keep-img { + position: relative; + z-index: 0; +} + +.jarallax-keep-img>.jarallax-img { + position: relative; + display: block; + max-width: 100%; + height: auto; + z-index: -100; +} + + +/*-------------------------------------------------------------- +/** Colorbox Lightbox +--------------------------------------------------------------*/ +/* + Colorbox Core Style: + The following CSS is consistent between example themes and should not be altered. +*/ +#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden; -webkit-transform: translate3d(0,0,0);} +#cboxWrapper {max-width:none;} +#cboxOverlay{position:fixed; width:100%; height:100%;} +#cboxMiddleLeft, #cboxBottomLeft{clear:left;} +#cboxContent{position:relative;} +#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;} +#cboxTitle{margin:0;} +#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;} +#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;} +.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;} +.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;} +#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;} + +/* + User Style: + Change the following styles to modify the appearance of Colorbox. They are + ordered & tabbed in a way that represents the nesting of the generated HTML. +*/ +#cboxOverlay{background:#000;} +#colorbox{outline:0;} +#cboxContent{margin-top:20px;background:#000;} +.cboxIframe{background:#fff;} +#cboxError{padding:50px; border:1px solid #ccc;} +#cboxLoadedContent{border:5px solid #000; background:#fff;} +#cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;} +#cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;} +#cboxLoadingGraphic{background:url(../images/colorbox/loading.gif) no-repeat center center;} + +/* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */ +#cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; } + +/* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */ +#cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;} + +#cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;} +#cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(../images/colorbox/controls.png) no-repeat top left; width:28px; height:65px; text-indent:-9999px;} +#cboxPrevious:hover{background-position:bottom left;} +#cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(../images/colorbox/controls.png) no-repeat top right; width:28px; height:65px; text-indent:-9999px;} +#cboxNext:hover{background-position:bottom right;} +#cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(../images/colorbox/controls.png) no-repeat top center; width:38px; height:19px; text-indent:-9999px;} +#cboxClose:hover{background-position:bottom center;} + + +/* AOS */ + +[data-aos][data-aos][data-aos-duration="50"],body[data-aos-duration="50"] [data-aos]{transition-duration:50ms}[data-aos][data-aos][data-aos-delay="50"],body[data-aos-delay="50"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="50"].aos-animate,body[data-aos-delay="50"] [data-aos].aos-animate{transition-delay:50ms}[data-aos][data-aos][data-aos-duration="100"],body[data-aos-duration="100"] [data-aos]{transition-duration:.1s}[data-aos][data-aos][data-aos-delay="100"],body[data-aos-delay="100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="100"].aos-animate,body[data-aos-delay="100"] [data-aos].aos-animate{transition-delay:.1s}[data-aos][data-aos][data-aos-duration="150"],body[data-aos-duration="150"] [data-aos]{transition-duration:.15s}[data-aos][data-aos][data-aos-delay="150"],body[data-aos-delay="150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="150"].aos-animate,body[data-aos-delay="150"] [data-aos].aos-animate{transition-delay:.15s}[data-aos][data-aos][data-aos-duration="200"],body[data-aos-duration="200"] [data-aos]{transition-duration:.2s}[data-aos][data-aos][data-aos-delay="200"],body[data-aos-delay="200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="200"].aos-animate,body[data-aos-delay="200"] [data-aos].aos-animate{transition-delay:.2s}[data-aos][data-aos][data-aos-duration="250"],body[data-aos-duration="250"] [data-aos]{transition-duration:.25s}[data-aos][data-aos][data-aos-delay="250"],body[data-aos-delay="250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="250"].aos-animate,body[data-aos-delay="250"] [data-aos].aos-animate{transition-delay:.25s}[data-aos][data-aos][data-aos-duration="300"],body[data-aos-duration="300"] [data-aos]{transition-duration:.3s}[data-aos][data-aos][data-aos-delay="300"],body[data-aos-delay="300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="300"].aos-animate,body[data-aos-delay="300"] [data-aos].aos-animate{transition-delay:.3s}[data-aos][data-aos][data-aos-duration="350"],body[data-aos-duration="350"] [data-aos]{transition-duration:.35s}[data-aos][data-aos][data-aos-delay="350"],body[data-aos-delay="350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="350"].aos-animate,body[data-aos-delay="350"] [data-aos].aos-animate{transition-delay:.35s}[data-aos][data-aos][data-aos-duration="400"],body[data-aos-duration="400"] [data-aos]{transition-duration:.4s}[data-aos][data-aos][data-aos-delay="400"],body[data-aos-delay="400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="400"].aos-animate,body[data-aos-delay="400"] [data-aos].aos-animate{transition-delay:.4s}[data-aos][data-aos][data-aos-duration="450"],body[data-aos-duration="450"] [data-aos]{transition-duration:.45s}[data-aos][data-aos][data-aos-delay="450"],body[data-aos-delay="450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="450"].aos-animate,body[data-aos-delay="450"] [data-aos].aos-animate{transition-delay:.45s}[data-aos][data-aos][data-aos-duration="500"],body[data-aos-duration="500"] [data-aos]{transition-duration:.5s}[data-aos][data-aos][data-aos-delay="500"],body[data-aos-delay="500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="500"].aos-animate,body[data-aos-delay="500"] [data-aos].aos-animate{transition-delay:.5s}[data-aos][data-aos][data-aos-duration="550"],body[data-aos-duration="550"] [data-aos]{transition-duration:.55s}[data-aos][data-aos][data-aos-delay="550"],body[data-aos-delay="550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="550"].aos-animate,body[data-aos-delay="550"] [data-aos].aos-animate{transition-delay:.55s}[data-aos][data-aos][data-aos-duration="600"],body[data-aos-duration="600"] [data-aos]{transition-duration:.6s}[data-aos][data-aos][data-aos-delay="600"],body[data-aos-delay="600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="600"].aos-animate,body[data-aos-delay="600"] [data-aos].aos-animate{transition-delay:.6s}[data-aos][data-aos][data-aos-duration="650"],body[data-aos-duration="650"] [data-aos]{transition-duration:.65s}[data-aos][data-aos][data-aos-delay="650"],body[data-aos-delay="650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="650"].aos-animate,body[data-aos-delay="650"] [data-aos].aos-animate{transition-delay:.65s}[data-aos][data-aos][data-aos-duration="700"],body[data-aos-duration="700"] [data-aos]{transition-duration:.7s}[data-aos][data-aos][data-aos-delay="700"],body[data-aos-delay="700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="700"].aos-animate,body[data-aos-delay="700"] [data-aos].aos-animate{transition-delay:.7s}[data-aos][data-aos][data-aos-duration="750"],body[data-aos-duration="750"] [data-aos]{transition-duration:.75s}[data-aos][data-aos][data-aos-delay="750"],body[data-aos-delay="750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="750"].aos-animate,body[data-aos-delay="750"] [data-aos].aos-animate{transition-delay:.75s}[data-aos][data-aos][data-aos-duration="800"],body[data-aos-duration="800"] [data-aos]{transition-duration:.8s}[data-aos][data-aos][data-aos-delay="800"],body[data-aos-delay="800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="800"].aos-animate,body[data-aos-delay="800"] [data-aos].aos-animate{transition-delay:.8s}[data-aos][data-aos][data-aos-duration="850"],body[data-aos-duration="850"] [data-aos]{transition-duration:.85s}[data-aos][data-aos][data-aos-delay="850"],body[data-aos-delay="850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="850"].aos-animate,body[data-aos-delay="850"] [data-aos].aos-animate{transition-delay:.85s}[data-aos][data-aos][data-aos-duration="900"],body[data-aos-duration="900"] [data-aos]{transition-duration:.9s}[data-aos][data-aos][data-aos-delay="900"],body[data-aos-delay="900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="900"].aos-animate,body[data-aos-delay="900"] [data-aos].aos-animate{transition-delay:.9s}[data-aos][data-aos][data-aos-duration="950"],body[data-aos-duration="950"] [data-aos]{transition-duration:.95s}[data-aos][data-aos][data-aos-delay="950"],body[data-aos-delay="950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="950"].aos-animate,body[data-aos-delay="950"] [data-aos].aos-animate{transition-delay:.95s}[data-aos][data-aos][data-aos-duration="1000"],body[data-aos-duration="1000"] [data-aos]{transition-duration:1s}[data-aos][data-aos][data-aos-delay="1000"],body[data-aos-delay="1000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1000"].aos-animate,body[data-aos-delay="1000"] [data-aos].aos-animate{transition-delay:1s}[data-aos][data-aos][data-aos-duration="1050"],body[data-aos-duration="1050"] [data-aos]{transition-duration:1.05s}[data-aos][data-aos][data-aos-delay="1050"],body[data-aos-delay="1050"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1050"].aos-animate,body[data-aos-delay="1050"] [data-aos].aos-animate{transition-delay:1.05s}[data-aos][data-aos][data-aos-duration="1100"],body[data-aos-duration="1100"] [data-aos]{transition-duration:1.1s}[data-aos][data-aos][data-aos-delay="1100"],body[data-aos-delay="1100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1100"].aos-animate,body[data-aos-delay="1100"] [data-aos].aos-animate{transition-delay:1.1s}[data-aos][data-aos][data-aos-duration="1150"],body[data-aos-duration="1150"] [data-aos]{transition-duration:1.15s}[data-aos][data-aos][data-aos-delay="1150"],body[data-aos-delay="1150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1150"].aos-animate,body[data-aos-delay="1150"] [data-aos].aos-animate{transition-delay:1.15s}[data-aos][data-aos][data-aos-duration="1200"],body[data-aos-duration="1200"] [data-aos]{transition-duration:1.2s}[data-aos][data-aos][data-aos-delay="1200"],body[data-aos-delay="1200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1200"].aos-animate,body[data-aos-delay="1200"] [data-aos].aos-animate{transition-delay:1.2s}[data-aos][data-aos][data-aos-duration="1250"],body[data-aos-duration="1250"] [data-aos]{transition-duration:1.25s}[data-aos][data-aos][data-aos-delay="1250"],body[data-aos-delay="1250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1250"].aos-animate,body[data-aos-delay="1250"] [data-aos].aos-animate{transition-delay:1.25s}[data-aos][data-aos][data-aos-duration="1300"],body[data-aos-duration="1300"] [data-aos]{transition-duration:1.3s}[data-aos][data-aos][data-aos-delay="1300"],body[data-aos-delay="1300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1300"].aos-animate,body[data-aos-delay="1300"] [data-aos].aos-animate{transition-delay:1.3s}[data-aos][data-aos][data-aos-duration="1350"],body[data-aos-duration="1350"] [data-aos]{transition-duration:1.35s}[data-aos][data-aos][data-aos-delay="1350"],body[data-aos-delay="1350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1350"].aos-animate,body[data-aos-delay="1350"] [data-aos].aos-animate{transition-delay:1.35s}[data-aos][data-aos][data-aos-duration="1400"],body[data-aos-duration="1400"] [data-aos]{transition-duration:1.4s}[data-aos][data-aos][data-aos-delay="1400"],body[data-aos-delay="1400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1400"].aos-animate,body[data-aos-delay="1400"] [data-aos].aos-animate{transition-delay:1.4s}[data-aos][data-aos][data-aos-duration="1450"],body[data-aos-duration="1450"] [data-aos]{transition-duration:1.45s}[data-aos][data-aos][data-aos-delay="1450"],body[data-aos-delay="1450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1450"].aos-animate,body[data-aos-delay="1450"] [data-aos].aos-animate{transition-delay:1.45s}[data-aos][data-aos][data-aos-duration="1500"],body[data-aos-duration="1500"] [data-aos]{transition-duration:1.5s}[data-aos][data-aos][data-aos-delay="1500"],body[data-aos-delay="1500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1500"].aos-animate,body[data-aos-delay="1500"] [data-aos].aos-animate{transition-delay:1.5s}[data-aos][data-aos][data-aos-duration="1550"],body[data-aos-duration="1550"] [data-aos]{transition-duration:1.55s}[data-aos][data-aos][data-aos-delay="1550"],body[data-aos-delay="1550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1550"].aos-animate,body[data-aos-delay="1550"] [data-aos].aos-animate{transition-delay:1.55s}[data-aos][data-aos][data-aos-duration="1600"],body[data-aos-duration="1600"] [data-aos]{transition-duration:1.6s}[data-aos][data-aos][data-aos-delay="1600"],body[data-aos-delay="1600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1600"].aos-animate,body[data-aos-delay="1600"] [data-aos].aos-animate{transition-delay:1.6s}[data-aos][data-aos][data-aos-duration="1650"],body[data-aos-duration="1650"] [data-aos]{transition-duration:1.65s}[data-aos][data-aos][data-aos-delay="1650"],body[data-aos-delay="1650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1650"].aos-animate,body[data-aos-delay="1650"] [data-aos].aos-animate{transition-delay:1.65s}[data-aos][data-aos][data-aos-duration="1700"],body[data-aos-duration="1700"] [data-aos]{transition-duration:1.7s}[data-aos][data-aos][data-aos-delay="1700"],body[data-aos-delay="1700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1700"].aos-animate,body[data-aos-delay="1700"] [data-aos].aos-animate{transition-delay:1.7s}[data-aos][data-aos][data-aos-duration="1750"],body[data-aos-duration="1750"] [data-aos]{transition-duration:1.75s}[data-aos][data-aos][data-aos-delay="1750"],body[data-aos-delay="1750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1750"].aos-animate,body[data-aos-delay="1750"] [data-aos].aos-animate{transition-delay:1.75s}[data-aos][data-aos][data-aos-duration="1800"],body[data-aos-duration="1800"] [data-aos]{transition-duration:1.8s}[data-aos][data-aos][data-aos-delay="1800"],body[data-aos-delay="1800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1800"].aos-animate,body[data-aos-delay="1800"] [data-aos].aos-animate{transition-delay:1.8s}[data-aos][data-aos][data-aos-duration="1850"],body[data-aos-duration="1850"] [data-aos]{transition-duration:1.85s}[data-aos][data-aos][data-aos-delay="1850"],body[data-aos-delay="1850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1850"].aos-animate,body[data-aos-delay="1850"] [data-aos].aos-animate{transition-delay:1.85s}[data-aos][data-aos][data-aos-duration="1900"],body[data-aos-duration="1900"] [data-aos]{transition-duration:1.9s}[data-aos][data-aos][data-aos-delay="1900"],body[data-aos-delay="1900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1900"].aos-animate,body[data-aos-delay="1900"] [data-aos].aos-animate{transition-delay:1.9s}[data-aos][data-aos][data-aos-duration="1950"],body[data-aos-duration="1950"] [data-aos]{transition-duration:1.95s}[data-aos][data-aos][data-aos-delay="1950"],body[data-aos-delay="1950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="1950"].aos-animate,body[data-aos-delay="1950"] [data-aos].aos-animate{transition-delay:1.95s}[data-aos][data-aos][data-aos-duration="2000"],body[data-aos-duration="2000"] [data-aos]{transition-duration:2s}[data-aos][data-aos][data-aos-delay="2000"],body[data-aos-delay="2000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2000"].aos-animate,body[data-aos-delay="2000"] [data-aos].aos-animate{transition-delay:2s}[data-aos][data-aos][data-aos-duration="2050"],body[data-aos-duration="2050"] [data-aos]{transition-duration:2.05s}[data-aos][data-aos][data-aos-delay="2050"],body[data-aos-delay="2050"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2050"].aos-animate,body[data-aos-delay="2050"] [data-aos].aos-animate{transition-delay:2.05s}[data-aos][data-aos][data-aos-duration="2100"],body[data-aos-duration="2100"] [data-aos]{transition-duration:2.1s}[data-aos][data-aos][data-aos-delay="2100"],body[data-aos-delay="2100"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2100"].aos-animate,body[data-aos-delay="2100"] [data-aos].aos-animate{transition-delay:2.1s}[data-aos][data-aos][data-aos-duration="2150"],body[data-aos-duration="2150"] [data-aos]{transition-duration:2.15s}[data-aos][data-aos][data-aos-delay="2150"],body[data-aos-delay="2150"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2150"].aos-animate,body[data-aos-delay="2150"] [data-aos].aos-animate{transition-delay:2.15s}[data-aos][data-aos][data-aos-duration="2200"],body[data-aos-duration="2200"] [data-aos]{transition-duration:2.2s}[data-aos][data-aos][data-aos-delay="2200"],body[data-aos-delay="2200"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2200"].aos-animate,body[data-aos-delay="2200"] [data-aos].aos-animate{transition-delay:2.2s}[data-aos][data-aos][data-aos-duration="2250"],body[data-aos-duration="2250"] [data-aos]{transition-duration:2.25s}[data-aos][data-aos][data-aos-delay="2250"],body[data-aos-delay="2250"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2250"].aos-animate,body[data-aos-delay="2250"] [data-aos].aos-animate{transition-delay:2.25s}[data-aos][data-aos][data-aos-duration="2300"],body[data-aos-duration="2300"] [data-aos]{transition-duration:2.3s}[data-aos][data-aos][data-aos-delay="2300"],body[data-aos-delay="2300"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2300"].aos-animate,body[data-aos-delay="2300"] [data-aos].aos-animate{transition-delay:2.3s}[data-aos][data-aos][data-aos-duration="2350"],body[data-aos-duration="2350"] [data-aos]{transition-duration:2.35s}[data-aos][data-aos][data-aos-delay="2350"],body[data-aos-delay="2350"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2350"].aos-animate,body[data-aos-delay="2350"] [data-aos].aos-animate{transition-delay:2.35s}[data-aos][data-aos][data-aos-duration="2400"],body[data-aos-duration="2400"] [data-aos]{transition-duration:2.4s}[data-aos][data-aos][data-aos-delay="2400"],body[data-aos-delay="2400"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2400"].aos-animate,body[data-aos-delay="2400"] [data-aos].aos-animate{transition-delay:2.4s}[data-aos][data-aos][data-aos-duration="2450"],body[data-aos-duration="2450"] [data-aos]{transition-duration:2.45s}[data-aos][data-aos][data-aos-delay="2450"],body[data-aos-delay="2450"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2450"].aos-animate,body[data-aos-delay="2450"] [data-aos].aos-animate{transition-delay:2.45s}[data-aos][data-aos][data-aos-duration="2500"],body[data-aos-duration="2500"] [data-aos]{transition-duration:2.5s}[data-aos][data-aos][data-aos-delay="2500"],body[data-aos-delay="2500"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2500"].aos-animate,body[data-aos-delay="2500"] [data-aos].aos-animate{transition-delay:2.5s}[data-aos][data-aos][data-aos-duration="2550"],body[data-aos-duration="2550"] [data-aos]{transition-duration:2.55s}[data-aos][data-aos][data-aos-delay="2550"],body[data-aos-delay="2550"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2550"].aos-animate,body[data-aos-delay="2550"] [data-aos].aos-animate{transition-delay:2.55s}[data-aos][data-aos][data-aos-duration="2600"],body[data-aos-duration="2600"] [data-aos]{transition-duration:2.6s}[data-aos][data-aos][data-aos-delay="2600"],body[data-aos-delay="2600"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2600"].aos-animate,body[data-aos-delay="2600"] [data-aos].aos-animate{transition-delay:2.6s}[data-aos][data-aos][data-aos-duration="2650"],body[data-aos-duration="2650"] [data-aos]{transition-duration:2.65s}[data-aos][data-aos][data-aos-delay="2650"],body[data-aos-delay="2650"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2650"].aos-animate,body[data-aos-delay="2650"] [data-aos].aos-animate{transition-delay:2.65s}[data-aos][data-aos][data-aos-duration="2700"],body[data-aos-duration="2700"] [data-aos]{transition-duration:2.7s}[data-aos][data-aos][data-aos-delay="2700"],body[data-aos-delay="2700"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2700"].aos-animate,body[data-aos-delay="2700"] [data-aos].aos-animate{transition-delay:2.7s}[data-aos][data-aos][data-aos-duration="2750"],body[data-aos-duration="2750"] [data-aos]{transition-duration:2.75s}[data-aos][data-aos][data-aos-delay="2750"],body[data-aos-delay="2750"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2750"].aos-animate,body[data-aos-delay="2750"] [data-aos].aos-animate{transition-delay:2.75s}[data-aos][data-aos][data-aos-duration="2800"],body[data-aos-duration="2800"] [data-aos]{transition-duration:2.8s}[data-aos][data-aos][data-aos-delay="2800"],body[data-aos-delay="2800"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2800"].aos-animate,body[data-aos-delay="2800"] [data-aos].aos-animate{transition-delay:2.8s}[data-aos][data-aos][data-aos-duration="2850"],body[data-aos-duration="2850"] [data-aos]{transition-duration:2.85s}[data-aos][data-aos][data-aos-delay="2850"],body[data-aos-delay="2850"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2850"].aos-animate,body[data-aos-delay="2850"] [data-aos].aos-animate{transition-delay:2.85s}[data-aos][data-aos][data-aos-duration="2900"],body[data-aos-duration="2900"] [data-aos]{transition-duration:2.9s}[data-aos][data-aos][data-aos-delay="2900"],body[data-aos-delay="2900"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2900"].aos-animate,body[data-aos-delay="2900"] [data-aos].aos-animate{transition-delay:2.9s}[data-aos][data-aos][data-aos-duration="2950"],body[data-aos-duration="2950"] [data-aos]{transition-duration:2.95s}[data-aos][data-aos][data-aos-delay="2950"],body[data-aos-delay="2950"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="2950"].aos-animate,body[data-aos-delay="2950"] [data-aos].aos-animate{transition-delay:2.95s}[data-aos][data-aos][data-aos-duration="3000"],body[data-aos-duration="3000"] [data-aos]{transition-duration:3s}[data-aos][data-aos][data-aos-delay="3000"],body[data-aos-delay="3000"] [data-aos]{transition-delay:0}[data-aos][data-aos][data-aos-delay="3000"].aos-animate,body[data-aos-delay="3000"] [data-aos].aos-animate{transition-delay:3s}[data-aos][data-aos][data-aos-easing=linear],body[data-aos-easing=linear] [data-aos]{transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[data-aos][data-aos][data-aos-easing=ease],body[data-aos-easing=ease] [data-aos]{transition-timing-function:ease}[data-aos][data-aos][data-aos-easing=ease-in],body[data-aos-easing=ease-in] [data-aos]{transition-timing-function:ease-in}[data-aos][data-aos][data-aos-easing=ease-out],body[data-aos-easing=ease-out] [data-aos]{transition-timing-function:ease-out}[data-aos][data-aos][data-aos-easing=ease-in-out],body[data-aos-easing=ease-in-out] [data-aos]{transition-timing-function:ease-in-out}[data-aos][data-aos][data-aos-easing=ease-in-back],body[data-aos-easing=ease-in-back] [data-aos]{transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[data-aos][data-aos][data-aos-easing=ease-out-back],body[data-aos-easing=ease-out-back] [data-aos]{transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[data-aos][data-aos][data-aos-easing=ease-in-out-back],body[data-aos-easing=ease-in-out-back] [data-aos]{transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[data-aos][data-aos][data-aos-easing=ease-in-sine],body[data-aos-easing=ease-in-sine] [data-aos]{transition-timing-function:cubic-bezier(.47,0,.745,.715)}[data-aos][data-aos][data-aos-easing=ease-out-sine],body[data-aos-easing=ease-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.39,.575,.565,1)}[data-aos][data-aos][data-aos-easing=ease-in-out-sine],body[data-aos-easing=ease-in-out-sine] [data-aos]{transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[data-aos][data-aos][data-aos-easing=ease-in-quad],body[data-aos-easing=ease-in-quad] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quad],body[data-aos-easing=ease-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quad],body[data-aos-easing=ease-in-out-quad] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-cubic],body[data-aos-easing=ease-in-cubic] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-cubic],body[data-aos-easing=ease-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-cubic],body[data-aos-easing=ease-in-out-cubic] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos][data-aos][data-aos-easing=ease-in-quart],body[data-aos-easing=ease-in-quart] [data-aos]{transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[data-aos][data-aos][data-aos-easing=ease-out-quart],body[data-aos-easing=ease-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[data-aos][data-aos][data-aos-easing=ease-in-out-quart],body[data-aos-easing=ease-in-out-quart] [data-aos]{transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[data-aos^=fade][data-aos^=fade]{opacity:0;transition-property:opacity,transform}[data-aos^=fade][data-aos^=fade].aos-animate{opacity:1;transform:translateZ(0)}[data-aos=fade-up]{transform:translate3d(0,100px,0)}[data-aos=fade-down]{transform:translate3d(0,-100px,0)}[data-aos=fade-right]{transform:translate3d(-100px,0,0)}[data-aos=fade-left]{transform:translate3d(100px,0,0)}[data-aos=fade-up-right]{transform:translate3d(-100px,100px,0)}[data-aos=fade-up-left]{transform:translate3d(100px,100px,0)}[data-aos=fade-down-right]{transform:translate3d(-100px,-100px,0)}[data-aos=fade-down-left]{transform:translate3d(100px,-100px,0)}[data-aos^=zoom][data-aos^=zoom]{opacity:0;transition-property:opacity,transform}[data-aos^=zoom][data-aos^=zoom].aos-animate{opacity:1;transform:translateZ(0) scale(1)}[data-aos=zoom-in]{transform:scale(.6)}[data-aos=zoom-in-up]{transform:translate3d(0,100px,0) scale(.6)}[data-aos=zoom-in-down]{transform:translate3d(0,-100px,0) scale(.6)}[data-aos=zoom-in-right]{transform:translate3d(-100px,0,0) scale(.6)}[data-aos=zoom-in-left]{transform:translate3d(100px,0,0) scale(.6)}[data-aos=zoom-out]{transform:scale(1.2)}[data-aos=zoom-out-up]{transform:translate3d(0,100px,0) scale(1.2)}[data-aos=zoom-out-down]{transform:translate3d(0,-100px,0) scale(1.2)}[data-aos=zoom-out-right]{transform:translate3d(-100px,0,0) scale(1.2)}[data-aos=zoom-out-left]{transform:translate3d(100px,0,0) scale(1.2)}[data-aos^=slide][data-aos^=slide]{transition-property:transform}[data-aos^=slide][data-aos^=slide].aos-animate{transform:translateZ(0)}[data-aos=slide-up]{transform:translate3d(0,100%,0)}[data-aos=slide-down]{transform:translate3d(0,-100%,0)}[data-aos=slide-right]{transform:translate3d(-100%,0,0)}[data-aos=slide-left]{transform:translate3d(100%,0,0)}[data-aos^=flip][data-aos^=flip]{backface-visibility:hidden;transition-property:transform}[data-aos=flip-left]{transform:perspective(2500px) rotateY(-100deg)}[data-aos=flip-left].aos-animate{transform:perspective(2500px) rotateY(0)}[data-aos=flip-right]{transform:perspective(2500px) rotateY(100deg)}[data-aos=flip-right].aos-animate{transform:perspective(2500px) rotateY(0)}[data-aos=flip-up]{transform:perspective(2500px) rotateX(-100deg)}[data-aos=flip-up].aos-animate{transform:perspective(2500px) rotateX(0)}[data-aos=flip-down]{transform:perspective(2500px) rotateX(100deg)}[data-aos=flip-down].aos-animate{transform:perspective(2500px) rotateX(0)} + diff --git a/assets/images/factory-workflow-illustration.webp b/assets/images/factory-workflow-illustration.webp new file mode 100644 index 0000000..ae9c9c4 Binary files /dev/null and b/assets/images/factory-workflow-illustration.webp differ diff --git a/assets/images/insta-item1.jpg b/assets/images/insta-item1.jpg new file mode 100644 index 0000000..da5e7f4 Binary files /dev/null and b/assets/images/insta-item1.jpg differ diff --git a/assets/images/insta-item2.jpg b/assets/images/insta-item2.jpg new file mode 100644 index 0000000..ae0bd27 Binary files /dev/null and b/assets/images/insta-item2.jpg differ diff --git a/assets/images/insta-item3.jpg b/assets/images/insta-item3.jpg new file mode 100644 index 0000000..80ca89f Binary files /dev/null and b/assets/images/insta-item3.jpg differ diff --git a/assets/images/insta-item4.jpg b/assets/images/insta-item4.jpg new file mode 100644 index 0000000..5604b66 Binary files /dev/null and b/assets/images/insta-item4.jpg differ diff --git a/assets/images/insta-item5.jpg b/assets/images/insta-item5.jpg new file mode 100644 index 0000000..ba42279 Binary files /dev/null and b/assets/images/insta-item5.jpg differ diff --git a/assets/images/insta-item6.jpg b/assets/images/insta-item6.jpg new file mode 100644 index 0000000..a84a38b Binary files /dev/null and b/assets/images/insta-item6.jpg differ diff --git a/assets/images/main-logo.png b/assets/images/main-logo.png new file mode 100644 index 0000000..2aa49f5 Binary files /dev/null and b/assets/images/main-logo.png differ diff --git a/assets/images/placeholder-factory-01.svg b/assets/images/placeholder-factory-01.svg new file mode 100644 index 0000000..3c3deb1 --- /dev/null +++ b/assets/images/placeholder-factory-01.svg @@ -0,0 +1,7 @@ + + + + 工厂实景 1 + \ No newline at end of file diff --git a/assets/images/placeholder-factory-02.svg b/assets/images/placeholder-factory-02.svg new file mode 100644 index 0000000..41ff43c --- /dev/null +++ b/assets/images/placeholder-factory-02.svg @@ -0,0 +1,7 @@ + + + + 工厂实景 2 + \ No newline at end of file diff --git a/assets/images/placeholder-factory-03.svg b/assets/images/placeholder-factory-03.svg new file mode 100644 index 0000000..c4a1ef6 --- /dev/null +++ b/assets/images/placeholder-factory-03.svg @@ -0,0 +1,7 @@ + + + + 工厂实景 3 + \ No newline at end of file diff --git a/assets/images/placeholder-factory-04.svg b/assets/images/placeholder-factory-04.svg new file mode 100644 index 0000000..515e765 --- /dev/null +++ b/assets/images/placeholder-factory-04.svg @@ -0,0 +1,7 @@ + + + + 工厂实景 4 + \ No newline at end of file diff --git a/assets/images/placeholder-logo.svg b/assets/images/placeholder-logo.svg new file mode 100644 index 0000000..3f4655c --- /dev/null +++ b/assets/images/placeholder-logo.svg @@ -0,0 +1,7 @@ + + + + LOGO + \ No newline at end of file diff --git a/assets/images/placeholder-video.svg b/assets/images/placeholder-video.svg new file mode 100644 index 0000000..f327b4d --- /dev/null +++ b/assets/images/placeholder-video.svg @@ -0,0 +1,7 @@ + + + + 视频封面 + \ No newline at end of file diff --git a/assets/images/product-item1.jpg b/assets/images/product-item1.jpg new file mode 100644 index 0000000..ec1d0be Binary files /dev/null and b/assets/images/product-item1.jpg differ diff --git a/assets/images/product-item2.jpg b/assets/images/product-item2.jpg new file mode 100644 index 0000000..3820e2c Binary files /dev/null and b/assets/images/product-item2.jpg differ diff --git a/assets/images/product-item3.jpg b/assets/images/product-item3.jpg new file mode 100644 index 0000000..d8a9583 Binary files /dev/null and b/assets/images/product-item3.jpg differ diff --git a/assets/images/products/factory-product-01.webp b/assets/images/products/factory-product-01.webp new file mode 100644 index 0000000..144afc3 Binary files /dev/null and b/assets/images/products/factory-product-01.webp differ diff --git a/assets/images/products/factory-product-02.webp b/assets/images/products/factory-product-02.webp new file mode 100644 index 0000000..9af8b3f Binary files /dev/null and b/assets/images/products/factory-product-02.webp differ diff --git a/assets/images/products/factory-product-03.webp b/assets/images/products/factory-product-03.webp new file mode 100644 index 0000000..ec03b7b Binary files /dev/null and b/assets/images/products/factory-product-03.webp differ diff --git a/assets/images/products/factory-product-04.webp b/assets/images/products/factory-product-04.webp new file mode 100644 index 0000000..2c2ec18 Binary files /dev/null and b/assets/images/products/factory-product-04.webp differ diff --git a/assets/images/products/factory-product-05.webp b/assets/images/products/factory-product-05.webp new file mode 100644 index 0000000..b689d85 Binary files /dev/null and b/assets/images/products/factory-product-05.webp differ diff --git a/assets/images/products/factory-product-06.webp b/assets/images/products/factory-product-06.webp new file mode 100644 index 0000000..ef40c7d Binary files /dev/null and b/assets/images/products/factory-product-06.webp differ diff --git a/assets/images/products/factory-product-07.webp b/assets/images/products/factory-product-07.webp new file mode 100644 index 0000000..64d6c46 Binary files /dev/null and b/assets/images/products/factory-product-07.webp differ diff --git a/assets/images/products/placeholder-01.svg b/assets/images/products/placeholder-01.svg new file mode 100644 index 0000000..b961138 --- /dev/null +++ b/assets/images/products/placeholder-01.svg @@ -0,0 +1,7 @@ + + + + 产品图 1 + \ No newline at end of file diff --git a/assets/images/products/placeholder-02.svg b/assets/images/products/placeholder-02.svg new file mode 100644 index 0000000..3336873 --- /dev/null +++ b/assets/images/products/placeholder-02.svg @@ -0,0 +1,7 @@ + + + + 产品图 2 + \ No newline at end of file diff --git a/assets/images/products/placeholder-03.svg b/assets/images/products/placeholder-03.svg new file mode 100644 index 0000000..913a8b3 --- /dev/null +++ b/assets/images/products/placeholder-03.svg @@ -0,0 +1,7 @@ + + + + 产品图 3 + \ No newline at end of file diff --git a/assets/images/products/placeholder-04.svg b/assets/images/products/placeholder-04.svg new file mode 100644 index 0000000..154f858 --- /dev/null +++ b/assets/images/products/placeholder-04.svg @@ -0,0 +1,7 @@ + + + + 产品图 4 + \ No newline at end of file diff --git a/assets/images/products/placeholder-05.svg b/assets/images/products/placeholder-05.svg new file mode 100644 index 0000000..360a0b2 --- /dev/null +++ b/assets/images/products/placeholder-05.svg @@ -0,0 +1,7 @@ + + + + 产品图 5 + \ No newline at end of file diff --git a/assets/images/products/placeholder-06.svg b/assets/images/products/placeholder-06.svg new file mode 100644 index 0000000..777f04d --- /dev/null +++ b/assets/images/products/placeholder-06.svg @@ -0,0 +1,7 @@ + + + + 产品图 6 + \ No newline at end of file diff --git a/assets/images/products/placeholder-07.svg b/assets/images/products/placeholder-07.svg new file mode 100644 index 0000000..58ddc7f --- /dev/null +++ b/assets/images/products/placeholder-07.svg @@ -0,0 +1,7 @@ + + + + 产品图 7 + \ No newline at end of file diff --git a/assets/images/single-image1.png b/assets/images/single-image1.png new file mode 100644 index 0000000..43c07e1 Binary files /dev/null and b/assets/images/single-image1.png differ diff --git a/assets/js/plugins.js b/assets/js/plugins.js new file mode 100644 index 0000000..e085675 --- /dev/null +++ b/assets/js/plugins.js @@ -0,0 +1,84 @@ + /*------------------------------------*\ + Plugins - Table of contents + \*------------------------------------*/ + /* + - jQuery Easing + - Color Box + - AOS + - anime.js + */ + + //-------------------------------- + // - jQuery Easing + //-------------------------------- + /* + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ + * + * Copyright © 2008 George McGinley Smith + * All rights reserved. + * + */ +jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g + * Licensed under MIT (https://github.com/nk-o/jarallax/blob/master/LICENSE) + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).jarallax=t()}(this,(function(){"use strict";function e(e){"complete"===document.readyState||"interactive"===document.readyState?e():document.addEventListener("DOMContentLoaded",e,{capture:!0,once:!0,passive:!0})}let t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var i=t;const{navigator:o}=i,n=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(o.userAgent);let a,s;function l(){n?(!a&&document.body&&(a=document.createElement("div"),a.style.cssText="position: fixed; top: -9999px; left: 0; height: 100vh; width: 0;",document.body.appendChild(a)),s=(a?a.clientHeight:0)||i.innerHeight||document.documentElement.clientHeight):s=i.innerHeight||document.documentElement.clientHeight}l(),i.addEventListener("resize",l),i.addEventListener("orientationchange",l),i.addEventListener("load",l),e((()=>{l()}));const r=[];function m(){r.length&&(r.forEach(((e,t)=>{const{instance:o,oldData:n}=e,a=o.$item.getBoundingClientRect(),l={width:a.width,height:a.height,top:a.top,bottom:a.bottom,wndW:i.innerWidth,wndH:s},m=!n||n.wndW!==l.wndW||n.wndH!==l.wndH||n.width!==l.width||n.height!==l.height,c=m||!n||n.top!==l.top||n.bottom!==l.bottom;r[t].oldData=l,m&&o.onResize(),c&&o.onScroll()})),i.requestAnimationFrame(m))}let c=0;class p{constructor(e,t){const i=this;i.instanceID=c,c+=1,i.$item=e,i.defaults={type:"scroll",speed:.5,imgSrc:null,imgElement:".jarallax-img",imgSize:"cover",imgPosition:"50% 50%",imgRepeat:"no-repeat",keepImg:!1,elementInViewport:null,zIndex:-100,disableParallax:!1,disableVideo:!1,videoSrc:null,videoStartTime:0,videoEndTime:0,videoVolume:0,videoLoop:!0,videoPlayOnlyVisible:!0,videoLazyLoading:!0,onScroll:null,onInit:null,onDestroy:null,onCoverImage:null};const n=i.$item.dataset||{},a={};if(Object.keys(n).forEach((e=>{const t=e.substr(0,1).toLowerCase()+e.substr(1);t&&void 0!==i.defaults[t]&&(a[t]=n[e])})),i.options=i.extend({},i.defaults,a,t),i.pureOptions=i.extend({},i.options),Object.keys(i.options).forEach((e=>{"true"===i.options[e]?i.options[e]=!0:"false"===i.options[e]&&(i.options[e]=!1)})),i.options.speed=Math.min(2,Math.max(-1,parseFloat(i.options.speed))),"string"==typeof i.options.disableParallax&&(i.options.disableParallax=new RegExp(i.options.disableParallax)),i.options.disableParallax instanceof RegExp){const e=i.options.disableParallax;i.options.disableParallax=()=>e.test(o.userAgent)}if("function"!=typeof i.options.disableParallax&&(i.options.disableParallax=()=>!1),"string"==typeof i.options.disableVideo&&(i.options.disableVideo=new RegExp(i.options.disableVideo)),i.options.disableVideo instanceof RegExp){const e=i.options.disableVideo;i.options.disableVideo=()=>e.test(o.userAgent)}"function"!=typeof i.options.disableVideo&&(i.options.disableVideo=()=>!1);let s=i.options.elementInViewport;s&&"object"==typeof s&&void 0!==s.length&&([s]=s),s instanceof Element||(s=null),i.options.elementInViewport=s,i.image={src:i.options.imgSrc||null,$container:null,useImgTag:!1,position:"fixed"},i.initImg()&&i.canInitParallax()&&i.init()}css(e,t){return"string"==typeof t?i.getComputedStyle(e).getPropertyValue(t):(Object.keys(t).forEach((i=>{e.style[i]=t[i]})),e)}extend(e,...t){return e=e||{},Object.keys(t).forEach((i=>{t[i]&&Object.keys(t[i]).forEach((o=>{e[o]=t[i][o]}))})),e}getWindowData(){return{width:i.innerWidth||document.documentElement.clientWidth,height:s,y:document.documentElement.scrollTop}}initImg(){const e=this;let t=e.options.imgElement;return t&&"string"==typeof t&&(t=e.$item.querySelector(t)),t instanceof Element||(e.options.imgSrc?(t=new Image,t.src=e.options.imgSrc):t=null),t&&(e.options.keepImg?e.image.$item=t.cloneNode(!0):(e.image.$item=t,e.image.$itemParent=t.parentNode),e.image.useImgTag=!0),!!e.image.$item||(null===e.image.src&&(e.image.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",e.image.bgImage=e.css(e.$item,"background-image")),!(!e.image.bgImage||"none"===e.image.bgImage))}canInitParallax(){return!this.options.disableParallax()}init(){const e=this,t={position:"absolute",top:0,left:0,width:"100%",height:"100%",overflow:"hidden"};let o={pointerEvents:"none",transformStyle:"preserve-3d",backfaceVisibility:"hidden",willChange:"transform,opacity"};if(!e.options.keepImg){const t=e.$item.getAttribute("style");if(t&&e.$item.setAttribute("data-jarallax-original-styles",t),e.image.useImgTag){const t=e.image.$item.getAttribute("style");t&&e.image.$item.setAttribute("data-jarallax-original-styles",t)}}if("static"===e.css(e.$item,"position")&&e.css(e.$item,{position:"relative"}),"auto"===e.css(e.$item,"z-index")&&e.css(e.$item,{zIndex:0}),e.image.$container=document.createElement("div"),e.css(e.image.$container,t),e.css(e.image.$container,{"z-index":e.options.zIndex}),"fixed"===this.image.position&&e.css(e.image.$container,{"-webkit-clip-path":"polygon(0 0, 100% 0, 100% 100%, 0 100%)","clip-path":"polygon(0 0, 100% 0, 100% 100%, 0 100%)"}),e.image.$container.setAttribute("id",`jarallax-container-${e.instanceID}`),e.$item.appendChild(e.image.$container),e.image.useImgTag?o=e.extend({"object-fit":e.options.imgSize,"object-position":e.options.imgPosition,"max-width":"none"},t,o):(e.image.$item=document.createElement("div"),e.image.src&&(o=e.extend({"background-position":e.options.imgPosition,"background-size":e.options.imgSize,"background-repeat":e.options.imgRepeat,"background-image":e.image.bgImage||`url("${e.image.src}")`},t,o))),"opacity"!==e.options.type&&"scale"!==e.options.type&&"scale-opacity"!==e.options.type&&1!==e.options.speed||(e.image.position="absolute"),"fixed"===e.image.position){const t=function(e){const t=[];for(;null!==e.parentElement;)1===(e=e.parentElement).nodeType&&t.push(e);return t}(e.$item).filter((e=>{const t=i.getComputedStyle(e),o=t["-webkit-transform"]||t["-moz-transform"]||t.transform;return o&&"none"!==o||/(auto|scroll)/.test(t.overflow+t["overflow-y"]+t["overflow-x"])}));e.image.position=t.length?"absolute":"fixed"}o.position=e.image.position,e.css(e.image.$item,o),e.image.$container.appendChild(e.image.$item),e.onResize(),e.onScroll(!0),e.options.onInit&&e.options.onInit.call(e),"none"!==e.css(e.$item,"background-image")&&e.css(e.$item,{"background-image":"none"}),e.addToParallaxList()}addToParallaxList(){r.push({instance:this}),1===r.length&&i.requestAnimationFrame(m)}removeFromParallaxList(){const e=this;r.forEach(((t,i)=>{t.instance.instanceID===e.instanceID&&r.splice(i,1)}))}destroy(){const e=this;e.removeFromParallaxList();const t=e.$item.getAttribute("data-jarallax-original-styles");if(e.$item.removeAttribute("data-jarallax-original-styles"),t?e.$item.setAttribute("style",t):e.$item.removeAttribute("style"),e.image.useImgTag){const i=e.image.$item.getAttribute("data-jarallax-original-styles");e.image.$item.removeAttribute("data-jarallax-original-styles"),i?e.image.$item.setAttribute("style",t):e.image.$item.removeAttribute("style"),e.image.$itemParent&&e.image.$itemParent.appendChild(e.image.$item)}e.image.$container&&e.image.$container.parentNode.removeChild(e.image.$container),e.options.onDestroy&&e.options.onDestroy.call(e),delete e.$item.jarallax}clipContainer(){}coverImage(){const e=this,t=e.image.$container.getBoundingClientRect(),i=t.height,{speed:o}=e.options,n="scroll"===e.options.type||"scroll-opacity"===e.options.type;let a=0,l=i,r=0;return n&&(0>o?(a=o*Math.max(i,s),so?l=a/o+Math.abs(a):l+=(s-i)*(1-o),a/=2),e.parallaxScrollDistance=a,r=n?(s-l)/2:(i-l)/2,e.css(e.image.$item,{height:`${l}px`,marginTop:`${r}px`,left:"fixed"===e.image.position?`${t.left}px`:"0",width:`${t.width}px`}),e.options.onCoverImage&&e.options.onCoverImage.call(e),{image:{height:l,marginTop:r},container:t}}isVisible(){return this.isElementInViewport||!1}onScroll(e){const t=this,o=t.$item.getBoundingClientRect(),n=o.top,a=o.height,l={};let r=o;if(t.options.elementInViewport&&(r=t.options.elementInViewport.getBoundingClientRect()),t.isElementInViewport=0<=r.bottom&&0<=r.right&&r.top<=s&&r.left<=i.innerWidth,!e&&!t.isElementInViewport)return;const m=Math.max(0,n),c=Math.max(0,a+n),p=Math.max(0,-n),d=Math.max(0,n+a-s),g=Math.max(0,a-(n+a-s)),u=Math.max(0,-n+s-a),f=1-(s-n)/(s+a)*2;let h=1;if(at.options.speed?e-=t.options.speed*h:e+=t.options.speed*(1-h),l.transform=`scale(${e}) translate3d(0,0,0)`}if("scroll"===t.options.type||"scroll-opacity"===t.options.type){let e=t.parallaxScrollDistance*f;"absolute"===t.image.position&&(e-=n),l.transform=`translate3d(0,${e}px,0)`}t.css(t.image.$item,l),t.options.onScroll&&t.options.onScroll.call(t,{section:o,beforeTop:m,beforeTopEnd:c,afterTop:p,beforeBottom:d,beforeBottomEnd:g,afterBottom:u,visiblePercent:h,fromViewportCenter:f})}onResize(){this.coverImage()}}const d=function(e,t,...i){("object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName)&&(e=[e]);const o=e.length;let n,a=0;for(;a{d(document.querySelectorAll("[data-jarallax]"))})),d})); +//# sourceMappingURL=jarallax.min.js.map + + /*! + Colorbox 1.6.4 + license: MIT + http://www.jacklmoore.com/colorbox +*/ +(function(t,e,i){function n(i,n,o){var r=e.createElement(i);return n&&(r.id=Z+n),o&&(r.style.cssText=o),t(r)}function o(){return i.innerHeight?i.innerHeight:t(i).height()}function r(e,i){i!==Object(i)&&(i={}),this.cache={},this.el=e,this.value=function(e){var n;return void 0===this.cache[e]&&(n=t(this.el).attr("data-cbox-"+e),void 0!==n?this.cache[e]=n:void 0!==i[e]?this.cache[e]=i[e]:void 0!==X[e]&&(this.cache[e]=X[e])),this.cache[e]},this.get=function(e){var i=this.value(e);return t.isFunction(i)?i.call(this.el,this):i}}function h(t){var e=W.length,i=(A+t)%e;return 0>i?e+i:i}function a(t,e){return Math.round((/%/.test(t)?("x"===e?E.width():o())/100:1)*parseInt(t,10))}function s(t,e){return t.get("photo")||t.get("photoRegex").test(e)}function l(t,e){return t.get("retinaUrl")&&i.devicePixelRatio>1?e.replace(t.get("photoRegex"),t.get("retinaSuffix")):e}function d(t){"contains"in x[0]&&!x[0].contains(t.target)&&t.target!==v[0]&&(t.stopPropagation(),x.focus())}function c(t){c.str!==t&&(x.add(v).removeClass(c.str).addClass(t),c.str=t)}function g(e){A=0,e&&e!==!1&&"nofollow"!==e?(W=t("."+te).filter(function(){var i=t.data(this,Y),n=new r(this,i);return n.get("rel")===e}),A=W.index(_.el),-1===A&&(W=W.add(_.el),A=W.length-1)):W=t(_.el)}function u(i){t(e).trigger(i),ae.triggerHandler(i)}function f(i){var o;if(!G){if(o=t(i).data(Y),_=new r(i,o),g(_.get("rel")),!U){U=$=!0,c(_.get("className")),x.css({visibility:"hidden",display:"block",opacity:""}),I=n(se,"LoadedContent","width:0; height:0; overflow:hidden; visibility:hidden"),b.css({width:"",height:""}).append(I),j=T.height()+k.height()+b.outerHeight(!0)-b.height(),D=C.width()+H.width()+b.outerWidth(!0)-b.width(),N=I.outerHeight(!0),z=I.outerWidth(!0);var h=a(_.get("initialWidth"),"x"),s=a(_.get("initialHeight"),"y"),l=_.get("maxWidth"),f=_.get("maxHeight");_.w=Math.max((l!==!1?Math.min(h,a(l,"x")):h)-z-D,0),_.h=Math.max((f!==!1?Math.min(s,a(f,"y")):s)-N-j,0),I.css({width:"",height:_.h}),J.position(),u(ee),_.get("onOpen"),O.add(F).hide(),x.focus(),_.get("trapFocus")&&e.addEventListener&&(e.addEventListener("focus",d,!0),ae.one(re,function(){e.removeEventListener("focus",d,!0)})),_.get("returnFocus")&&ae.one(re,function(){t(_.el).focus()})}var p=parseFloat(_.get("opacity"));v.css({opacity:p===p?p:"",cursor:_.get("overlayClose")?"pointer":"",visibility:"visible"}).show(),_.get("closeButton")?B.html(_.get("close")).appendTo(b):B.appendTo("
"),w()}}function p(){x||(V=!1,E=t(i),x=n(se).attr({id:Y,"class":t.support.opacity===!1?Z+"IE":"",role:"dialog",tabindex:"-1"}).hide(),v=n(se,"Overlay").hide(),L=t([n(se,"LoadingOverlay")[0],n(se,"LoadingGraphic")[0]]),y=n(se,"Wrapper"),b=n(se,"Content").append(F=n(se,"Title"),R=n(se,"Current"),P=t(' +
+
+ + +
+
+ 'primary', 'menu_class' => 'navbar-nav justify-content-end flex-grow-1 gap-xl-4 pe-xl-3', 'container' => false, 'fallback_cb' => 'fragrance_trade_fallback_menu' ) ); ?> + +
+
+
+ + diff --git a/inc/cpt.php b/inc/cpt.php new file mode 100644 index 0000000..47845d2 --- /dev/null +++ b/inc/cpt.php @@ -0,0 +1,154 @@ + array( + 'name' => __( '服务项目', 'fragrance-trade' ), + 'singular_name' => __( '服务项目', 'fragrance-trade' ), + 'add_new' => __( '添加服务项目', 'fragrance-trade' ), + 'edit_item' => __( '编辑服务项目', 'fragrance-trade' ), + 'all_items' => __( '全部服务项目', 'fragrance-trade' ), + ), + 'public' => true, + 'has_archive' => 'services', + 'rewrite' => array( 'slug' => 'services' ), + 'menu_position' => 20, + 'menu_icon' => 'dashicons-admin-customizer', + 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ), + 'show_in_rest' => true, + ) + ); + + register_post_type( + 'case', + array( + 'labels' => array( + 'name' => __( '案例作品', 'fragrance-trade' ), + 'singular_name' => __( '案例', 'fragrance-trade' ), + 'add_new' => __( '添加案例', 'fragrance-trade' ), + 'edit_item' => __( '编辑案例', 'fragrance-trade' ), + 'all_items' => __( '全部案例', 'fragrance-trade' ), + ), + 'public' => true, + 'has_archive' => 'cases', + 'rewrite' => array( 'slug' => 'cases' ), + 'menu_position' => 21, + 'menu_icon' => 'dashicons-format-gallery', + 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ), + 'show_in_rest' => true, + ) + ); + + register_taxonomy( + 'case_type', + 'case', + array( + 'labels' => array( + 'name' => __( '案例分类', 'fragrance-trade' ), + 'singular_name' => __( '案例分类', 'fragrance-trade' ), + ), + 'public' => true, + 'hierarchical' => false, + 'show_in_rest' => true, + 'rewrite' => array( 'slug' => 'case-type' ), + ) + ); +} +add_action( 'init', 'fragrance_trade_register_post_types' ); + +/** Filter the case archive by the case_type query argument. */ +function fragrance_trade_filter_cases_archive( $query ) { + if ( is_admin() || ! $query->is_main_query() ) { + return; + } + if ( $query->is_post_type_archive( 'case' ) && ! empty( $_GET['case_type'] ) ) { + $query->set( 'case_type', sanitize_text_field( wp_unslash( $_GET['case_type'] ) ) ); + } +} +add_action( 'pre_get_posts', 'fragrance_trade_filter_cases_archive' ); + +/** One-time setup on theme activation: migrate products and create pages. */ +function fragrance_trade_setup_site_on_activation() { + if ( get_option( 'fragrance_trade_setup_done' ) ) { + return; + } + + $product_fallbacks = array( + 'products/placeholder-01.svg', + 'products/placeholder-02.svg', + 'products/placeholder-03.svg', + 'products/placeholder-04.svg', + 'products/placeholder-05.svg', + 'products/placeholder-06.svg', + 'products/placeholder-07.svg', + ); + for ( $index = 1; $index <= count( $product_fallbacks ); $index++ ) { + $title = fragrance_trade_get_mod( 'b2b_product_' . $index . '_title' ); + if ( ! $title ) { + continue; + } + $post_id = wp_insert_post( + array( + 'post_type' => 'service', + 'post_title' => $title, + 'post_content' => fragrance_trade_get_mod( 'b2b_product_' . $index . '_text' ), + 'post_excerpt' => fragrance_trade_get_mod( 'b2b_product_' . $index . '_specs' ), + 'post_status' => 'publish', + ) + ); + if ( $post_id && ! is_wp_error( $post_id ) ) { + $image = fragrance_trade_get_mod( 'b2b_product_' . $index . '_image', '' ); + if ( $image ) { + update_post_meta( $post_id, '_service_image', $image ); + } + } + } + + $pages = array( + 'home' => array( 'post_title' => __( '首页', 'fragrance-trade' ), 'template' => '' ), + 'about' => array( 'post_title' => __( '关于门店', 'fragrance-trade' ), 'template' => 'page-about.php' ), + 'faq' => array( 'post_title' => __( '常见问题', 'fragrance-trade' ), 'template' => 'page-faq.php' ), + 'contact' => array( 'post_title' => __( '预约/联系', 'fragrance-trade' ), 'template' => 'page-contact.php' ), + ); + $created = array(); + foreach ( $pages as $slug => $data ) { + $existing = get_page_by_path( $slug ); + if ( $existing ) { + $created[ $slug ] = $existing->ID; + continue; + } + $id = wp_insert_post( + array( + 'post_type' => 'page', + 'post_name' => $slug, + 'post_title' => $data['post_title'], + 'post_status' => 'publish', + 'page_template' => $data['template'], + ) + ); + if ( $id && ! is_wp_error( $id ) ) { + $created[ $slug ] = $id; + } + } + + if ( ! empty( $created['home'] ) ) { + update_option( 'page_on_front', $created['home'] ); + update_option( 'show_on_front', 'page' ); + } + + update_option( 'fragrance_trade_setup_done', 1 ); +} +add_action( 'after_switch_theme', 'fragrance_trade_setup_site_on_activation' ); diff --git a/inc/customizer.php b/inc/customizer.php new file mode 100644 index 0000000..07ec4a7 --- /dev/null +++ b/inc/customizer.php @@ -0,0 +1,158 @@ + 'sanitize_text_field', + 'textarea' => 'sanitize_textarea_field', + 'url' => 'esc_url_raw', + 'email' => 'sanitize_email', + 'checkbox' => 'fragrance_trade_sanitize_checkbox', + 'image' => 'esc_url_raw', + ); + $wp_customize->add_setting( + $id, + array( + 'default' => fragrance_trade_get_default( $id ), + 'sanitize_callback' => $sanitizers[ $type ], + 'transport' => 'refresh', + ) + ); + if ( 'image' === $type ) { + $wp_customize->add_control( + new WP_Customize_Image_Control( + $wp_customize, + $id, + array( 'label' => $label, 'section' => $section, 'priority' => $priority ) + ) + ); + return; + } + $wp_customize->add_control( $id, array( 'label' => $label, 'section' => $section, 'type' => $type, 'priority' => $priority ) ); +} + +function fragrance_trade_customize_register( $wp_customize ) { + $wp_customize->add_panel( + 'fragrance_b2b_homepage', + array( + 'title' => __( 'B2B 企业首页', 'fragrance-trade' ), + 'description' => __( '编辑固定布局的 OEM/ODM 汽车贴膜企业首页。上线前请将所有演示文案替换为经验证的工厂信息。', 'fragrance-trade' ), + 'priority' => 30, + ) + ); + + $sections = array( + 'fragrance_b2b_hero' => __( '首屏定位', 'fragrance-trade' ), + 'fragrance_b2b_trust' => __( '信任栏', 'fragrance-trade' ), + 'fragrance_b2b_services' => __( '服务项目', 'fragrance-trade' ), + 'fragrance_b2b_products' => __( '产品能力', 'fragrance-trade' ), + 'fragrance_b2b_customization' => __( '定制选项', 'fragrance-trade' ), + 'fragrance_b2b_factory' => __( '工厂证明与参观', 'fragrance-trade' ), + 'fragrance_b2b_quality' => __( '品质管控', 'fragrance-trade' ), + 'fragrance_b2b_process' => __( '项目流程', 'fragrance-trade' ), + 'fragrance_b2b_projects' => __( '项目案例', 'fragrance-trade' ), + 'fragrance_b2b_documents' => __( '文档支持', 'fragrance-trade' ), + 'fragrance_b2b_faq' => __( '常见问题', 'fragrance-trade' ), + 'fragrance_b2b_rfq' => __( '询价表单', 'fragrance-trade' ), + 'fragrance_contact_social' => __( '联系方式与社交链接', 'fragrance-trade' ), + ); + $priority = 10; + foreach ( $sections as $id => $title ) { + $wp_customize->add_section( $id, array( 'title' => $title, 'panel' => 'fragrance_b2b_homepage', 'priority' => $priority ) ); + $priority += 10; + } + + $fields = array( + array( 'b2b_hero_eyebrow', 'fragrance_b2b_hero', __( '眉标', 'fragrance-trade' ), 'text' ), + array( 'b2b_hero_title', 'fragrance_b2b_hero', __( '主标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_hero_text', 'fragrance_b2b_hero', __( '简介文案', 'fragrance-trade' ), 'textarea' ), + array( 'b2b_hero_primary_label', 'fragrance_b2b_hero', __( '主按钮文字', 'fragrance-trade' ), 'text' ), + array( 'b2b_hero_primary_url', 'fragrance_b2b_hero', __( '主按钮链接', 'fragrance-trade' ), 'url' ), + array( 'b2b_hero_secondary_label', 'fragrance_b2b_hero', __( '次按钮文字', 'fragrance-trade' ), 'text' ), + array( 'b2b_hero_secondary_url', 'fragrance_b2b_hero', __( '次按钮链接', 'fragrance-trade' ), 'url' ), + array( 'b2b_trust_title', 'fragrance_b2b_trust', __( '信任栏标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_services_title', 'fragrance_b2b_services', __( '板块标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_services_text', 'fragrance_b2b_services', __( '板块简介', 'fragrance-trade' ), 'textarea' ), + array( 'b2b_products_title', 'fragrance_b2b_products', __( '板块标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_products_text', 'fragrance_b2b_products', __( '板块简介', 'fragrance-trade' ), 'textarea' ), + array( 'b2b_custom_title', 'fragrance_b2b_customization', __( '板块标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_custom_text', 'fragrance_b2b_customization', __( '板块简介', 'fragrance-trade' ), 'textarea' ), + array( 'b2b_factory_eyebrow', 'fragrance_b2b_factory', __( '眉标', 'fragrance-trade' ), 'text' ), + array( 'b2b_factory_title', 'fragrance_b2b_factory', __( '板块标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_factory_text', 'fragrance_b2b_factory', __( '工厂简介', 'fragrance-trade' ), 'textarea' ), + array( 'b2b_show_video', 'fragrance_b2b_factory', __( '显示工厂视频', 'fragrance-trade' ), 'checkbox' ), + array( 'b2b_video_title', 'fragrance_b2b_factory', __( '视频标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_video_text', 'fragrance_b2b_factory', __( '视频描述', 'fragrance-trade' ), 'textarea' ), + array( 'b2b_video_url', 'fragrance_b2b_factory', __( 'YouTube、Vimeo 或视频链接', 'fragrance-trade' ), 'url' ), + array( 'b2b_video_image', 'fragrance_b2b_factory', __( '视频封面图', 'fragrance-trade' ), 'image' ), + array( 'b2b_quality_title', 'fragrance_b2b_quality', __( '板块标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_quality_text', 'fragrance_b2b_quality', __( '板块简介', 'fragrance-trade' ), 'textarea' ), + array( 'b2b_process_title', 'fragrance_b2b_process', __( '板块标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_process_text', 'fragrance_b2b_process', __( '板块简介', 'fragrance-trade' ), 'textarea' ), + array( 'b2b_show_projects', 'fragrance_b2b_projects', __( '显示项目案例', 'fragrance-trade' ), 'checkbox' ), + array( 'b2b_projects_title', 'fragrance_b2b_projects', __( '板块标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_projects_text', 'fragrance_b2b_projects', __( '板块简介', 'fragrance-trade' ), 'textarea' ), + array( 'b2b_show_documents', 'fragrance_b2b_documents', __( '显示文档板块', 'fragrance-trade' ), 'checkbox' ), + array( 'b2b_documents_title', 'fragrance_b2b_documents', __( '板块标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_documents_text', 'fragrance_b2b_documents', __( '板块简介', 'fragrance-trade' ), 'textarea' ), + array( 'b2b_show_faq', 'fragrance_b2b_faq', __( '显示常见问题', 'fragrance-trade' ), 'checkbox' ), + array( 'b2b_faq_title', 'fragrance_b2b_faq', __( '常见问题标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_rfq_title', 'fragrance_b2b_rfq', __( '询价标题', 'fragrance-trade' ), 'text' ), + array( 'b2b_rfq_text', 'fragrance_b2b_rfq', __( '询价简介', 'fragrance-trade' ), 'textarea' ), + array( 'b2b_rfq_button_label', 'fragrance_b2b_rfq', __( '提交按钮文字', 'fragrance-trade' ), 'text' ), + array( 'inquiry_email', 'fragrance_contact_social', __( '询价收件邮箱', 'fragrance-trade' ), 'email' ), + array( 'whatsapp', 'fragrance_contact_social', __( 'WhatsApp 号码(含国家代码)', 'fragrance-trade' ), 'text' ), + array( 'facebook_url', 'fragrance_contact_social', __( 'Facebook 链接', 'fragrance-trade' ), 'url' ), + array( 'twitter_url', 'fragrance_contact_social', __( 'X / Twitter 链接', 'fragrance-trade' ), 'url' ), + array( 'youtube_url', 'fragrance_contact_social', __( 'YouTube 链接', 'fragrance-trade' ), 'url' ), + array( 'linkedin_url', 'fragrance_contact_social', __( 'LinkedIn 链接', 'fragrance-trade' ), 'url' ), + array( 'instagram_social_url', 'fragrance_contact_social', __( 'Instagram 链接', 'fragrance-trade' ), 'url' ), + array( 'footer_text', 'fragrance_contact_social', __( '页脚定位文案', 'fragrance-trade' ), 'text' ), + ); + + for ( $index = 1; $index <= 4; $index++ ) { + $fields[] = array( 'b2b_metric_' . $index . '_value', 'fragrance_b2b_trust', sprintf( __( '信任点 %d 数值', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_metric_' . $index . '_label', 'fragrance_b2b_trust', sprintf( __( '信任点 %d 标签', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_service_' . $index . '_title', 'fragrance_b2b_services', sprintf( __( '服务 %d 标题', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_service_' . $index . '_text', 'fragrance_b2b_services', sprintf( __( '服务 %d 描述', 'fragrance-trade' ), $index ), 'textarea' ); + $fields[] = array( 'b2b_factory_point_' . $index, 'fragrance_b2b_factory', sprintf( __( '工厂证明点 %d', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_factory_image_' . $index, 'fragrance_b2b_factory', sprintf( __( '工厂图片 %d', 'fragrance-trade' ), $index ), 'image' ); + $fields[] = array( 'b2b_document_' . $index . '_title', 'fragrance_b2b_documents', sprintf( __( '文档卡片 %d 标题', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_document_' . $index . '_text', 'fragrance_b2b_documents', sprintf( __( '文档卡片 %d 描述', 'fragrance-trade' ), $index ), 'textarea' ); + } + for ( $index = 1; $index <= 7; $index++ ) { + $fields[] = array( 'b2b_product_' . $index . '_title', 'fragrance_b2b_products', sprintf( __( '产品参考 %d 标题', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_product_' . $index . '_text', 'fragrance_b2b_products', sprintf( __( '产品参考 %d 描述', 'fragrance-trade' ), $index ), 'textarea' ); + $fields[] = array( 'b2b_product_' . $index . '_specs', 'fragrance_b2b_products', sprintf( __( '产品参考 %d 规格行', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_product_' . $index . '_image', 'fragrance_b2b_products', sprintf( __( '产品参考 %d 图片', 'fragrance-trade' ), $index ), 'image' ); + } + for ( $index = 1; $index <= 8; $index++ ) { + $fields[] = array( 'b2b_custom_' . $index . '_title', 'fragrance_b2b_customization', sprintf( __( '定制项 %d', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_process_' . $index . '_title', 'fragrance_b2b_process', sprintf( __( '流程步骤 %d 标题', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_process_' . $index . '_text', 'fragrance_b2b_process', sprintf( __( '流程步骤 %d 描述', 'fragrance-trade' ), $index ), 'textarea' ); + $fields[] = array( 'b2b_faq_' . $index . '_question', 'fragrance_b2b_faq', sprintf( __( '问题 %d', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_faq_' . $index . '_answer', 'fragrance_b2b_faq', sprintf( __( '回答 %d', 'fragrance-trade' ), $index ), 'textarea' ); + } + for ( $index = 1; $index <= 6; $index++ ) { + $fields[] = array( 'b2b_quality_' . $index . '_title', 'fragrance_b2b_quality', sprintf( __( '品质步骤 %d 标题', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_quality_' . $index . '_text', 'fragrance_b2b_quality', sprintf( __( '品质步骤 %d 描述', 'fragrance-trade' ), $index ), 'textarea' ); + } + for ( $index = 1; $index <= 3; $index++ ) { + $fields[] = array( 'b2b_project_' . $index . '_title', 'fragrance_b2b_projects', sprintf( __( '项目案例 %d 标题', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_project_' . $index . '_meta', 'fragrance_b2b_projects', sprintf( __( '项目案例 %d 标签', 'fragrance-trade' ), $index ), 'text' ); + $fields[] = array( 'b2b_project_' . $index . '_text', 'fragrance_b2b_projects', sprintf( __( '项目案例 %d 描述', 'fragrance-trade' ), $index ), 'textarea' ); + } + + foreach ( $fields as $field ) { + fragrance_trade_customize_add_field( $wp_customize, $field[0], $field[1], $field[2], $field[3] ); + } +} +add_action( 'customize_register', 'fragrance_trade_customize_register' ); diff --git a/inc/defaults.php b/inc/defaults.php new file mode 100644 index 0000000..5a0e4c5 --- /dev/null +++ b/inc/defaults.php @@ -0,0 +1,182 @@ + __( '汽车贴膜 · 专业制造', 'fragrance-trade' ), + 'b2b_hero_title' => __( '专业汽车贴膜制造商,为品牌提供一站式贴膜解决方案', 'fragrance-trade' ), + 'b2b_hero_text' => __( '从膜料研发、色彩定制到裁切包装和出口支持,我们帮助客户将概念转化为市场领先的汽车贴膜产品。', 'fragrance-trade' ), + 'b2b_hero_primary_label' => __( '获取报价', 'fragrance-trade' ), + 'b2b_hero_primary_url' => '#rfq', + 'b2b_hero_secondary_label' => __( '了解生产能力', 'fragrance-trade' ), + 'b2b_hero_secondary_url' => '#capabilities', + 'b2b_trust_title' => __( '从概念到交付的专业制造伙伴', 'fragrance-trade' ), + 'b2b_metric_1_value' => __( 'OEM / ODM', 'fragrance-trade' ), + 'b2b_metric_1_label' => __( '灵活合作模式', 'fragrance-trade' ), + 'b2b_metric_2_value' => __( '一站式', 'fragrance-trade' ), + 'b2b_metric_2_label' => __( '从膜料到成品包装', 'fragrance-trade' ), + 'b2b_metric_3_value' => __( '批次质检', 'fragrance-trade' ), + 'b2b_metric_3_label' => __( '出货前品质检验', 'fragrance-trade' ), + 'b2b_metric_4_value' => __( '全球覆盖', 'fragrance-trade' ), + 'b2b_metric_4_label' => __( '出口项目支持', 'fragrance-trade' ), + 'b2b_services_title' => __( '围绕您的项目定制的贴膜服务', 'fragrance-trade' ), + 'b2b_services_text' => __( '选择与您的品牌、产品和上市计划匹配的合作起点。', 'fragrance-trade' ), + 'b2b_service_1_title' => __( '品牌贴膜定制', 'fragrance-trade' ), + 'b2b_service_1_text' => __( '从现有膜料、颜色和规格中选择,打造您的品牌贴膜系列。', 'fragrance-trade' ), + 'b2b_service_2_title' => __( 'OEM 代工生产', 'fragrance-trade' ), + 'b2b_service_2_text' => __( '根据您认可的配方、参考样品或产品规格进行生产制造。', 'fragrance-trade' ), + 'b2b_service_3_title' => __( 'ODM 产品开发', 'fragrance-trade' ), + 'b2b_service_3_text' => __( '涵盖膜料选型、颜色开发、样品制作和量产准备的全程项目支持。', 'fragrance-trade' ), + 'b2b_service_4_title' => __( '包装与定制', 'fragrance-trade' ), + 'b2b_service_4_text' => __( '协调卷芯、外包装、标签和运输包装,贴合您的品牌定位。', 'fragrance-trade' ), + 'b2b_products_title' => __( '工厂生产的贴膜产品参考', 'fragrance-trade' ), + 'b2b_products_text' => __( '以下为我们工厂生产的部分产品。客户品牌信息已做模糊处理以保护保密性,产品质感和工艺细节完整可见。', 'fragrance-trade' ), + 'b2b_product_1_title' => __( '隐形车衣(TPU 保护膜)', 'fragrance-trade' ), + 'b2b_product_1_text' => __( '高透明度 TPU 材质,具备自修复功能,有效保护车漆免受石子划伤和紫外线损伤。', 'fragrance-trade' ), + 'b2b_product_1_specs' => __( 'TPU 材质 · 自修复 · 高透光 · 抗黄变', 'fragrance-trade' ), + 'b2b_product_1_image' => '', + 'b2b_product_2_title' => __( '彩色改色膜', 'fragrance-trade' ), + 'b2b_product_2_text' => __( '丰富色彩选择,高分子 PVC 材质,贴合度高,可实现哑光、亮面、珠光等多种表面效果。', 'fragrance-trade' ), + 'b2b_product_2_specs' => __( 'PVC 材质 · 多色可选 · 哑光/亮面 · 高贴合', 'fragrance-trade' ), + 'b2b_product_2_image' => '', + 'b2b_product_3_title' => __( '隔热防爆膜', 'fragrance-trade' ), + 'b2b_product_3_text' => __( '高效隔热阻紫外线,提升车内舒适度,多层金属镀膜工艺确保清晰视野与安全性。', 'fragrance-trade' ), + 'b2b_product_3_specs' => __( '多层金属 · 隔热阻紫 · 高透光 · 防爆', 'fragrance-trade' ), + 'b2b_product_3_image' => '', + 'b2b_product_4_title' => __( '陶瓷隔热膜', 'fragrance-trade' ), + 'b2b_product_4_text' => __( '纳米陶瓷技术,不屏蔽信号,隔热性能卓越,适合高端车型及电子设备密集车辆。', 'fragrance-trade' ), + 'b2b_product_4_specs' => __( '纳米陶瓷 · 不挡信号 · 超强隔热 · 持久耐用', 'fragrance-trade' ), + 'b2b_product_4_image' => '', + 'b2b_product_5_title' => __( '天窗冰甲', 'fragrance-trade' ), + 'b2b_product_5_text' => __( '专为全景天窗设计,高隔热率搭配防爆功能,降低车内温度同时提升安全性。', 'fragrance-trade' ), + 'b2b_product_5_specs' => __( '天窗专用 · 高隔热 · 防爆 · 降噪', 'fragrance-trade' ), + 'b2b_product_5_image' => '', + 'b2b_product_6_title' => __( '前挡专用膜', 'fragrance-trade' ), + 'b2b_product_6_text' => __( '前挡风玻璃专用配方,高透光率符合国家标准,兼顾隔热性能与驾驶视野。', 'fragrance-trade' ), + 'b2b_product_6_specs' => __( '前挡专用 · 高透光 · 符合国标 · 隔热', 'fragrance-trade' ), + 'b2b_product_6_image' => '', + 'b2b_product_7_title' => __( '个性定制彩绘膜', 'fragrance-trade' ), + 'b2b_product_7_text' => __( '支持图案定制、品牌 LOGO 印刷,适用于商业车队包装和个性化改装需求。', 'fragrance-trade' ), + 'b2b_product_7_specs' => __( '图案定制 · LOGO 印刷 · 车队包装 · 个性改装', 'fragrance-trade' ), + 'b2b_product_7_image' => '', + 'b2b_custom_title' => __( '定制产品的每一个细节', 'fragrance-trade' ), + 'b2b_custom_text' => __( '选择并确认影响产品性能、外观和成本的关键要素。', 'fragrance-trade' ), + 'b2b_custom_1_title' => __( '膜料选型', 'fragrance-trade' ), + 'b2b_custom_2_title' => __( '颜色定制', 'fragrance-trade' ), + 'b2b_custom_3_title' => __( '厚度规格', 'fragrance-trade' ), + 'b2b_custom_4_title' => __( '宽度规格', 'fragrance-trade' ), + 'b2b_custom_5_title' => __( '表面工艺', 'fragrance-trade' ), + 'b2b_custom_6_title' => __( '图案定制', 'fragrance-trade' ), + 'b2b_custom_7_title' => __( '包装设计', 'fragrance-trade' ), + 'b2b_custom_8_title' => __( '出口标识', 'fragrance-trade' ), + 'b2b_factory_eyebrow' => __( '工厂与生产', 'fragrance-trade' ), + 'b2b_factory_title' => __( '可验证的生产实力', 'fragrance-trade' ), + 'b2b_factory_text' => __( '在正式上线前,请用经过验证的工厂数据、生产照片和能力说明替换以下演示内容。', 'fragrance-trade' ), + 'b2b_factory_point_1' => __( '自有涂布与分切生产线', 'fragrance-trade' ), + 'b2b_factory_point_2' => __( '量产前样品确认制度', 'fragrance-trade' ), + 'b2b_factory_point_3' => __( '原材料与包装协调管理', 'fragrance-trade' ), + 'b2b_factory_point_4' => __( '生产与发货进度透明沟通', 'fragrance-trade' ), + 'b2b_factory_image_1' => '', + 'b2b_factory_image_2' => '', + 'b2b_factory_image_3' => '', + 'b2b_factory_image_4' => '', + 'b2b_show_video' => true, + 'b2b_video_title' => __( '汽车贴膜生产流程', 'fragrance-trade' ), + 'b2b_video_text' => __( '了解涂布、分切、质检和包装如何在一条生产线上协同完成。', 'fragrance-trade' ), + 'b2b_video_url' => '', + 'b2b_video_image' => '', + 'b2b_quality_title' => __( '每个生产环节的品质管控', 'fragrance-trade' ), + 'b2b_quality_text' => __( '具体检验方案根据每份已确认的产品规格和目的地要求制定。', 'fragrance-trade' ), + 'b2b_quality_1_title' => __( '来料检验', 'fragrance-trade' ), + 'b2b_quality_1_text' => __( '生产前对原材料、基膜和包装材料进行验收。', 'fragrance-trade' ), + 'b2b_quality_2_title' => __( '样品确认', 'fragrance-trade' ), + 'b2b_quality_2_text' => __( '以已确认的样品和规格作为生产基准。', 'fragrance-trade' ), + 'b2b_quality_3_title' => __( '生产过程检验', 'fragrance-trade' ), + 'b2b_quality_3_text' => __( '监控涂布厚度、贴合度和工艺一致性。', 'fragrance-trade' ), + 'b2b_quality_4_title' => __( '色差检测', 'fragrance-trade' ), + 'b2b_quality_4_text' => __( '使用分光仪对颜色一致性进行检测。', 'fragrance-trade' ), + 'b2b_quality_5_title' => __( '成品外观检验', 'fragrance-trade' ), + 'b2b_quality_5_text' => __( '检查膜面瑕疵、分切边缘和包装外观。', 'fragrance-trade' ), + 'b2b_quality_6_title' => __( '出货前复查', 'fragrance-trade' ), + 'b2b_quality_6_text' => __( '发货前复核成品、包装和运输标识。', 'fragrance-trade' ), + 'b2b_process_title' => __( '清晰的 OEM/ODM 项目流程', 'fragrance-trade' ), + 'b2b_process_text' => __( '每个阶段都有明确的客户输入和工厂输出,确保决策过程透明。', 'fragrance-trade' ), + 'b2b_process_1_title' => __( '提交需求', 'fragrance-trade' ), + 'b2b_process_1_text' => __( '提供市场定位、产品类型、数量、包装和上市计划。', 'fragrance-trade' ), + 'b2b_process_2_title' => __( '项目评估', 'fragrance-trade' ), + 'b2b_process_2_text' => __( '确认可行性、信息缺口和报价所需资料。', 'fragrance-trade' ), + 'b2b_process_3_title' => __( '选择膜料与规格', 'fragrance-trade' ), + 'b2b_process_3_text' => __( '确定膜料类型、颜色、厚度、宽度和包装方案。', 'fragrance-trade' ), + 'b2b_process_4_title' => __( '打样', 'fragrance-trade' ), + 'b2b_process_4_text' => __( '按需制备膜料和包装样品供评审。', 'fragrance-trade' ), + 'b2b_process_5_title' => __( '样品确认', 'fragrance-trade' ), + 'b2b_process_5_text' => __( '锁定已确认的参考样和生产规格。', 'fragrance-trade' ), + 'b2b_process_6_title' => __( '订单确认', 'fragrance-trade' ), + 'b2b_process_6_text' => __( '确认商务条款、数量、图案和交期。', 'fragrance-trade' ), + 'b2b_process_7_title' => __( '生产与质检', 'fragrance-trade' ), + 'b2b_process_7_text' => __( '按计划生产、检验并同步关键节点。', 'fragrance-trade' ), + 'b2b_process_8_title' => __( '发货与售后', 'fragrance-trade' ), + 'b2b_process_8_text' => __( '准备发货资料,保留已确认的项目档案。', 'fragrance-trade' ), + 'b2b_show_projects' => true, + 'b2b_projects_title' => __( '典型项目案例', 'fragrance-trade' ), + 'b2b_projects_text' => __( '以下卡片说明不同类型的客户如何与工厂合作,不代表已验证的客户业绩。', 'fragrance-trade' ), + 'b2b_project_1_title' => __( '新品牌首批产品', 'fragrance-trade' ), + 'b2b_project_1_meta' => __( '从概念到首批产品', 'fragrance-trade' ), + 'b2b_project_1_text' => __( '协调膜料选型、规格确定、样品制作和上市包装。', 'fragrance-trade' ), + 'b2b_project_2_title' => __( '经销商贴牌定制', 'fragrance-trade' ), + 'b2b_project_2_meta' => __( '规格驱动的定制开发', 'fragrance-trade' ), + 'b2b_project_2_text' => __( '将渠道定位、目标成本和货架需求转化为可控的产品方案。', 'fragrance-trade' ), + 'b2b_project_3_title' => __( '定制礼品装项目', 'fragrance-trade' ), + 'b2b_project_3_meta' => __( '产品与包装协调', 'fragrance-trade' ), + 'b2b_project_3_text' => __( '围绕交付窗口协调膜料、套装配置和礼品包装。', 'fragrance-trade' ), + 'b2b_show_documents' => true, + 'b2b_documents_title' => __( '文档与出口支持', 'fragrance-trade' ), + 'b2b_documents_text' => __( '可提供的文件视产品、目的地和项目而定。下单前请确认所需文件清单。', 'fragrance-trade' ), + 'b2b_document_1_title' => __( '产品规格书', 'fragrance-trade' ), + 'b2b_document_1_text' => __( '已确认的膜料、规格和包装参考文件。', 'fragrance-trade' ), + 'b2b_document_2_title' => __( '批次质检报告', 'fragrance-trade' ), + 'b2b_document_2_text' => __( '按约定的项目要求维护的生产和检验记录。', 'fragrance-trade' ), + 'b2b_document_3_title' => __( '材料证明文件', 'fragrance-trade' ), + 'b2b_document_3_text' => __( '如适用且可提供,包括 MSDS 或 COA 等支持性文件。', 'fragrance-trade' ), + 'b2b_document_4_title' => __( '出口贸易文件', 'fragrance-trade' ), + 'b2b_document_4_text' => __( '按目的地需求协调装箱单、运输标识和出口信息。', 'fragrance-trade' ), + 'b2b_show_faq' => true, + 'b2b_faq_title' => __( '常见问题', 'fragrance-trade' ), + 'b2b_faq_1_question' => __( '最低起订量是多少?', 'fragrance-trade' ), + 'b2b_faq_1_answer' => __( '起订量取决于膜料、颜色、厚度和包装方案。请提交目标配置以获取准确答复。', 'fragrance-trade' ), + 'b2b_faq_2_question' => __( '可以从现有颜色中选择吗?', 'fragrance-trade' ), + 'b2b_faq_2_answer' => __( '现有颜色可缩短开发周期。所选膜料和颜色通过打样确认后进入量产。', 'fragrance-trade' ), + 'b2b_faq_3_question' => __( '可以按我的参考样品生产吗?', 'fragrance-trade' ), + 'b2b_faq_3_answer' => __( '参考样品可用于评估开发方向。精确匹配的可行性需评审后确认。', 'fragrance-trade' ), + 'b2b_faq_4_question' => __( '打样需要多长时间?', 'fragrance-trade' ), + 'b2b_faq_4_answer' => __( '时间取决于膜料调配、颜色开发和包装复杂度。评审需求后会提供项目时间表。', 'fragrance-trade' ), + 'b2b_faq_5_question' => __( '膜料和包装可以定制吗?', 'fragrance-trade' ), + 'b2b_faq_5_answer' => __( '项目可包含膜料选型、颜色、厚度、图案、标签和外包装选项,具体取决于数量和供应商可行性。', 'fragrance-trade' ), + 'b2b_faq_6_question' => __( '量产前可以申请样品吗?', 'fragrance-trade' ), + 'b2b_faq_6_answer' => __( '可以。打样范围、费用和交付方式按项目需求确认。', 'fragrance-trade' ), + 'b2b_faq_7_question' => __( '报价需要提供哪些信息?', 'fragrance-trade' ), + 'b2b_faq_7_answer' => __( '请提供联系方式、所需产品或服务及简要需求说明,其余规格可在后续跟进中补充。', 'fragrance-trade' ), + 'b2b_faq_8_question' => __( '出口可以提供哪些文件?', 'fragrance-trade' ), + 'b2b_faq_8_answer' => __( '文件清单取决于产品和目的地。请告知进口市场,以便下单前确认可提供的支持文件。', 'fragrance-trade' ), + 'b2b_rfq_title' => __( '提交简单询价', 'fragrance-trade' ), + 'b2b_rfq_text' => __( '提供一些基本信息,我们的项目团队将跟进详细规格、数量和包装需求。', 'fragrance-trade' ), + 'b2b_rfq_button_label' => __( '发送询价', 'fragrance-trade' ), + 'inquiry_email' => '', + 'whatsapp' => '', + 'facebook_url' => '', + 'twitter_url' => '', + 'youtube_url' => '', + 'linkedin_url' => '', + 'instagram_social_url' => '', + 'footer_text' => __( '为全球品牌和采购商提供汽车贴膜定制制造服务。', 'fragrance-trade' ), + ); +} diff --git a/inc/helpers.php b/inc/helpers.php new file mode 100644 index 0000000..1374d23 --- /dev/null +++ b/inc/helpers.php @@ -0,0 +1,85 @@ + __( '首页', 'fragrance-trade' ), + '#services' => __( '服务', 'fragrance-trade' ), + '#capabilities' => __( '产品', 'fragrance-trade' ), + '#factory' => __( '工厂', 'fragrance-trade' ), + '#quality' => __( '品质', 'fragrance-trade' ), + '#process' => __( '流程', 'fragrance-trade' ), + '#rfq' => __( '获取报价', 'fragrance-trade' ), + ); + $class = isset( $args['menu_class'] ) ? $args['menu_class'] : 'navbar-nav'; + echo '
    '; + foreach ( $items as $anchor => $label ) { + $url = is_front_page() ? $anchor : home_url( '/' ) . $anchor; + echo ''; + } + echo '
'; +} + +function fragrance_trade_whatsapp_number() { + return preg_replace( '/[^0-9]/', '', (string) fragrance_trade_get_mod( 'whatsapp', '' ) ); +} + +function fragrance_trade_inquiry_email() { + $email = sanitize_email( fragrance_trade_get_mod( 'inquiry_email', '' ) ); + return is_email( $email ) ? $email : sanitize_email( get_option( 'admin_email' ) ); +} + +function fragrance_trade_get_inquiry_url( $project = '' ) { + $message = $project + ? sprintf( __( '您好,我想咨询 %s 的 OEM/ODM 项目。', 'fragrance-trade' ), $project ) + : __( '您好,我想咨询汽车贴膜定制项目。', 'fragrance-trade' ); + $number = fragrance_trade_whatsapp_number(); + if ( $number ) { + return add_query_arg( 'text', $message, 'https://wa.me/' . $number ); + } + return 'mailto:' . antispambot( fragrance_trade_inquiry_email() ) . '?subject=' . rawurlencode( __( '汽车贴膜项目询价', 'fragrance-trade' ) ) . '&body=' . rawurlencode( $message ); +} + +function fragrance_trade_get_notice() { + if ( empty( $_GET['fragrance_notice'] ) ) { + return ''; + } + return sanitize_key( wp_unslash( $_GET['fragrance_notice'] ) ); +} + +function fragrance_trade_notice_message( $code ) { + $messages = array( + 'success' => __( '感谢您的提交,项目需求已发送。', 'fragrance-trade' ), + 'invalid' => __( '请检查必填项后重新提交。', 'fragrance-trade' ), + 'rate_limited' => __( '请稍候片刻再重新提交。', 'fragrance-trade' ), + 'mail_failed' => __( '发送失败,请通过邮件或 WhatsApp 联系我们。', 'fragrance-trade' ), + ); + return isset( $messages[ $code ] ) ? $messages[ $code ] : ''; +} diff --git a/inc/inquiry.php b/inc/inquiry.php new file mode 100644 index 0000000..2d6eb8a --- /dev/null +++ b/inc/inquiry.php @@ -0,0 +1,87 @@ + fragrance_trade_limit_text( sanitize_text_field( fragrance_trade_post_value( 'name' ) ), 100 ), + 'email' => fragrance_trade_limit_text( sanitize_email( fragrance_trade_post_value( 'email' ) ), 190 ), + 'company' => fragrance_trade_limit_text( sanitize_text_field( fragrance_trade_post_value( 'company' ) ), 150 ), + 'whatsapp' => fragrance_trade_limit_text( sanitize_text_field( fragrance_trade_post_value( 'whatsapp' ) ), 100 ), + 'product_type' => fragrance_trade_limit_text( sanitize_text_field( fragrance_trade_post_value( 'product_type' ) ), 150 ), + 'message' => fragrance_trade_limit_text( sanitize_textarea_field( fragrance_trade_post_value( 'message' ) ), 2000 ), + ); + if ( ! $fields['name'] || ! is_email( $fields['email'] ) || ! $fields['product_type'] || ! $fields['message'] ) { + fragrance_trade_redirect_notice( 'invalid' ); + } + + $labels = array( + 'name' => __( '姓名', 'fragrance-trade' ), 'email' => __( '企业邮箱', 'fragrance-trade' ), + 'company' => __( '公司名称', 'fragrance-trade' ), 'whatsapp' => __( 'WhatsApp 或电话', 'fragrance-trade' ), + 'product_type' => __( '需求产品或服务', 'fragrance-trade' ), 'message' => __( '简要需求描述', 'fragrance-trade' ), + ); + $body_lines = array(); + foreach ( $labels as $key => $label ) { + $body_lines[] = $label . ': ' . ( $fields[ $key ] ? $fields[ $key ] : __( '未提供', 'fragrance-trade' ) ); + } + + $site_name = wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ); + $safe_name = str_replace( array( "\r", "\n" ), ' ', $fields['name'] ); + $safe_email = str_replace( array( "\r", "\n" ), '', $fields['email'] ); + $context = $fields['company'] ? $fields['company'] : $fields['product_type']; + $subject = sprintf( '[%s] %s - %s', $site_name, __( '汽车贴膜项目询价', 'fragrance-trade' ), $context ); + $headers = array( 'Content-Type: text/plain; charset=UTF-8', 'Reply-To: ' . $safe_name . ' <' . $safe_email . '>' ); + $sent = wp_mail( fragrance_trade_inquiry_email(), $subject, implode( "\n\n", $body_lines ), $headers ); + fragrance_trade_redirect_notice( $sent ? 'success' : 'mail_failed' ); +} +add_action( 'admin_post_fragrance_rfq', 'fragrance_trade_handle_rfq' ); +add_action( 'admin_post_nopriv_fragrance_rfq', 'fragrance_trade_handle_rfq' ); diff --git a/inc/setup.php b/inc/setup.php new file mode 100644 index 0000000..9a1c3f6 --- /dev/null +++ b/inc/setup.php @@ -0,0 +1,65 @@ + 96, 'width' => 260, 'flex-height' => true, 'flex-width' => true ) ); + add_theme_support( 'post-thumbnails' ); + add_theme_support( 'automatic-feed-links' ); + add_theme_support( 'responsive-embeds' ); + add_theme_support( 'html5', array( 'comment-list', 'comment-form', 'search-form', 'gallery', 'caption', 'style', 'script' ) ); + add_image_size( 'fragrance-capability', 760, 720, true ); + + register_nav_menus( + array( + 'primary' => __( '主导航', 'fragrance-trade' ), + ) + ); +} +add_action( 'after_setup_theme', 'fragrance_trade_setup' ); + +/** + * Return a cache-busting version for a local theme asset. + * + * @param string $relative_path Path relative to the theme root. + * @param string $fallback Version used when the file cannot be read. + * @return string + */ +function fragrance_trade_asset_version( $relative_path, $fallback ) { + $file = get_theme_file_path( '/' . ltrim( $relative_path, '/' ) ); + return file_exists( $file ) ? (string) filemtime( $file ) : $fallback; +} + +/** Load theme styles and scripts through the WordPress dependency system. */ +function fragrance_trade_enqueue_assets() { + $version = wp_get_theme()->get( 'Version' ); + + wp_enqueue_style( 'fragrance-bootstrap', 'https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0-alpha3/css/bootstrap.min.css', array(), '5.3.0-alpha3' ); + wp_enqueue_style( 'fragrance-fonts', 'https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@200;300;400;500;600;700&family=Jost:wght@200;300;400;500&family=Noto+Sans+SC:wght@300;400;500;700&display=swap', array(), null ); + wp_enqueue_style( 'fragrance-normalize', get_template_directory_uri() . '/assets/css/normalize.css', array(), fragrance_trade_asset_version( 'assets/css/normalize.css', $version ) ); + wp_enqueue_style( 'fragrance-vendor', get_template_directory_uri() . '/assets/css/vendor.css', array(), fragrance_trade_asset_version( 'assets/css/vendor.css', $version ) ); + wp_enqueue_style( 'fragrance-base', get_stylesheet_uri(), array( 'fragrance-bootstrap', 'fragrance-vendor' ), fragrance_trade_asset_version( 'style.css', $version ) ); + wp_enqueue_style( 'fragrance-theme', get_template_directory_uri() . '/assets/css/theme.css', array( 'fragrance-base' ), fragrance_trade_asset_version( 'assets/css/theme.css', $version ) ); + + wp_enqueue_script( 'fragrance-bootstrap', 'https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.3.0-alpha3/js/bootstrap.bundle.min.js', array(), '5.3.0-alpha3', true ); + wp_enqueue_script( 'fragrance-plugins', get_template_directory_uri() . '/assets/js/plugins.js', array( 'jquery' ), fragrance_trade_asset_version( 'assets/js/plugins.js', $version ), true ); + wp_enqueue_script( 'fragrance-theme', get_template_directory_uri() . '/assets/js/theme.js', array( 'jquery', 'fragrance-bootstrap', 'fragrance-plugins' ), fragrance_trade_asset_version( 'assets/js/theme.js', $version ), true ); + wp_localize_script( + 'fragrance-theme', + 'fragranceTrade', + array( + 'motionQuery' => '(prefers-reduced-motion: reduce)', + ) + ); +} +add_action( 'wp_enqueue_scripts', 'fragrance_trade_enqueue_assets' ); diff --git a/index.php b/index.php new file mode 100644 index 0000000..02bb067 --- /dev/null +++ b/index.php @@ -0,0 +1,17 @@ + +
+ +
+ +
+ +
+ + + + +
+ diff --git a/page-about.php b/page-about.php new file mode 100644 index 0000000..e5e00c3 --- /dev/null +++ b/page-about.php @@ -0,0 +1,22 @@ + +
+ +
+
+

+
+
+
+ +
+
+ +
+ diff --git a/page-contact.php b/page-contact.php new file mode 100644 index 0000000..28db25a --- /dev/null +++ b/page-contact.php @@ -0,0 +1,50 @@ + +
+
+
+
+
+

+

+

+
+

+ +
+
+
+
+
+

+
+
+ + +
+
+
+
+
+
+
+
+ +

+ +
+
+
+
+
+
+
+ diff --git a/page-faq.php b/page-faq.php new file mode 100644 index 0000000..4059a97 --- /dev/null +++ b/page-faq.php @@ -0,0 +1,17 @@ + +
+ +
+ +
+
+ diff --git a/page.php b/page.php new file mode 100644 index 0000000..9f4213c --- /dev/null +++ b/page.php @@ -0,0 +1,10 @@ + +
+ + + +
+ diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000..2dcbaf0 Binary files /dev/null and b/screenshot.png differ diff --git a/single-case.php b/single-case.php new file mode 100644 index 0000000..b633e67 --- /dev/null +++ b/single-case.php @@ -0,0 +1,34 @@ + +
+ +
+ + +
'img-fluid rounded' ) ); ?>
+ +
+

+ +

+ +
+
+ +
+ +
+ diff --git a/single-service.php b/single-service.php new file mode 100644 index 0000000..9b0704d --- /dev/null +++ b/single-service.php @@ -0,0 +1,34 @@ + +
+ + +
+ +
+
+ <?php the_title_attribute(); ?> +
+
+

+
+ +
+
+
+ +
+ diff --git a/single.php b/single.php new file mode 100644 index 0000000..56da7f1 --- /dev/null +++ b/single.php @@ -0,0 +1,12 @@ + +
+ + + + + +
+ diff --git a/style.css b/style.css new file mode 100644 index 0000000..53ca776 --- /dev/null +++ b/style.css @@ -0,0 +1,14 @@ +/* +Theme Name: B2B Trade +Theme URI: https://example.com/b2b-trade/ +Author: B2B Trade +Description: A responsive OEM/ODM private-label car film manufacturer B2B theme focused on manufacturing capabilities, quality proof and qualified RFQ conversion. +Version: 2.0.0 +Requires at least: 6.5 +Tested up to: 6.6 +Requires PHP: 7.4 +License: GNU General Public License v2 or later +License URI: https://www.gnu.org/licenses/gpl-2.0.html +Text Domain: fragrance-trade +Tags: custom-logo, custom-menu, featured-images, translation-ready, one-column +*/ diff --git a/template-parts/content-none.php b/template-parts/content-none.php new file mode 100644 index 0000000..45faba5 --- /dev/null +++ b/template-parts/content-none.php @@ -0,0 +1,8 @@ + +
+

+

+ +
diff --git a/template-parts/content-page.php b/template-parts/content-page.php new file mode 100644 index 0000000..e9e0a48 --- /dev/null +++ b/template-parts/content-page.php @@ -0,0 +1,3 @@ + +
> +
+ + ', '' ); ?> + + ', '' ); ?> + + + + +
+ +
'img-fluid' ) ); ?>
+ +
+ + +
+
diff --git a/template-parts/home/case-teaser.php b/template-parts/home/case-teaser.php new file mode 100644 index 0000000..73beecb --- /dev/null +++ b/template-parts/home/case-teaser.php @@ -0,0 +1,38 @@ + 'case', + 'posts_per_page' => 6, + 'post_status' => 'publish', + ) +); +?> +
+
+
+

+

+

+
+ have_posts() ) : ?> +
+ have_posts() ) : $case_query->the_post(); ?> + + + 'img-fluid' ) ); ?> + + <?php the_title_attribute(); ?> + + + + +
+
+ +
+ +

+ +
+
diff --git a/template-parts/home/cta.php b/template-parts/home/cta.php new file mode 100644 index 0000000..80648ce --- /dev/null +++ b/template-parts/home/cta.php @@ -0,0 +1,10 @@ + +
+
+

+

+ +
+
diff --git a/template-parts/home/customization.php b/template-parts/home/customization.php new file mode 100644 index 0000000..82f8027 --- /dev/null +++ b/template-parts/home/customization.php @@ -0,0 +1,7 @@ + +
+
+

+

+
+
diff --git a/template-parts/home/documents.php b/template-parts/home/documents.php new file mode 100644 index 0000000..5f8a214 --- /dev/null +++ b/template-parts/home/documents.php @@ -0,0 +1,4 @@ + +
+

+
diff --git a/template-parts/home/factory.php b/template-parts/home/factory.php new file mode 100644 index 0000000..91c9d38 --- /dev/null +++ b/template-parts/home/factory.php @@ -0,0 +1,12 @@ + +
+
+
+

+
+
+
+
diff --git a/template-parts/home/faq.php b/template-parts/home/faq.php new file mode 100644 index 0000000..cedd2ba --- /dev/null +++ b/template-parts/home/faq.php @@ -0,0 +1,2 @@ + +

diff --git a/template-parts/home/hero.php b/template-parts/home/hero.php new file mode 100644 index 0000000..f50b3e9 --- /dev/null +++ b/template-parts/home/hero.php @@ -0,0 +1,24 @@ + +
+
+
+
+

+

+

+
+ + +
+
    +
  • +
  • +
  • +
+
+
+
+
diff --git a/template-parts/home/process.php b/template-parts/home/process.php new file mode 100644 index 0000000..18cb810 --- /dev/null +++ b/template-parts/home/process.php @@ -0,0 +1,5 @@ + +
+

+

+
diff --git a/template-parts/home/products.php b/template-parts/home/products.php new file mode 100644 index 0000000..3772f2a --- /dev/null +++ b/template-parts/home/products.php @@ -0,0 +1,25 @@ + +
+
+

+
+ +
+
<?php echo esc_attr( $title ); ?>
+

+
+ +
+
+
diff --git a/template-parts/home/projects.php b/template-parts/home/projects.php new file mode 100644 index 0000000..3f5735c --- /dev/null +++ b/template-parts/home/projects.php @@ -0,0 +1,5 @@ + +
+ +
diff --git a/template-parts/home/quality.php b/template-parts/home/quality.php new file mode 100644 index 0000000..6b4e643 --- /dev/null +++ b/template-parts/home/quality.php @@ -0,0 +1,5 @@ + +
+

+

+
diff --git a/template-parts/home/rfq.php b/template-parts/home/rfq.php new file mode 100644 index 0000000..5ab193c --- /dev/null +++ b/template-parts/home/rfq.php @@ -0,0 +1,42 @@ + +
+
+
+
+

+

+

+
+

+ +
+
+
+
+
+

+
+
+ + +
+
+
+
+
+
+
+
+ +

+ +
+
+
+
+
+
diff --git a/template-parts/home/service-teaser.php b/template-parts/home/service-teaser.php new file mode 100644 index 0000000..af8356e --- /dev/null +++ b/template-parts/home/service-teaser.php @@ -0,0 +1,49 @@ + 'service', + 'posts_per_page' => 6, + 'post_status' => 'publish', + ) +); +if ( ! $service_query->have_posts() ) { + return; +} +?> +
+
+
+

+

+

+
+
+ have_posts() ) : + $service_query->the_post(); + $image = get_post_meta( get_the_ID(), '_service_image', true ); + $fallback = 'products/placeholder-0' . ( $count < 10 ? $count : 1 ) . '.svg'; + $img = $image ? $image : fragrance_trade_asset_uri( $fallback ); + ?> +
+
<?php the_title_attribute(); ?>
+
+

+

+

+ +
+
+ +
+
+ +
+
+
diff --git a/template-parts/home/services.php b/template-parts/home/services.php new file mode 100644 index 0000000..ac18a2a --- /dev/null +++ b/template-parts/home/services.php @@ -0,0 +1,14 @@ + +
+
+
+

+

+
+
+ + + +
+
+
diff --git a/template-parts/home/trust.php b/template-parts/home/trust.php new file mode 100644 index 0000000..b8397f3 --- /dev/null +++ b/template-parts/home/trust.php @@ -0,0 +1,14 @@ + +
+
+

+
+ +
+ + +
+ +
+
+
diff --git a/template-parts/home/video.php b/template-parts/home/video.php new file mode 100644 index 0000000..1bedc96 --- /dev/null +++ b/template-parts/home/video.php @@ -0,0 +1,9 @@ + +
+
<?php esc_attr_e( '汽车贴膜生产流程示意图', 'fragrance-trade' ); ?>

+