|
@@ -15,6 +15,10 @@ import indexBack2Url from "../assets/images/index_back2.png?url";
|
|
|
import jiaohuIconUrl from "../assets/images/jiaohu.png?url";
|
|
import jiaohuIconUrl from "../assets/images/jiaohu.png?url";
|
|
|
import planIconUrl from "../assets/images/方案.png?url";
|
|
import planIconUrl from "../assets/images/方案.png?url";
|
|
|
import caseIconUrl from "../assets/images/案例.png?url";
|
|
import caseIconUrl from "../assets/images/案例.png?url";
|
|
|
|
|
+import p1 from "../assets/images/p1.png?url";
|
|
|
|
|
+import p2 from "../assets/images/p2.png?url";
|
|
|
|
|
+// import p4 from "../assets/images/p4.png?url";
|
|
|
|
|
+import p3 from "../assets/images/p3.png?url";
|
|
|
import CountUp from "../components/motion/CountUp.vue";
|
|
import CountUp from "../components/motion/CountUp.vue";
|
|
|
import Reveal from "../components/motion/Reveal.vue";
|
|
import Reveal from "../components/motion/Reveal.vue";
|
|
|
import { computed, onBeforeUnmount, onMounted, ref } from "vue";
|
|
import { computed, onBeforeUnmount, onMounted, ref } from "vue";
|
|
@@ -23,13 +27,6 @@ import { useRouter } from "vue-router";
|
|
|
|
|
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
|
|
|
|
|
|
-const highlights = [
|
|
|
|
|
- { label: "接入井站", end: 200, suffix: "+" },
|
|
|
|
|
- { label: "生产指标", end: 500, suffix: "+" },
|
|
|
|
|
- { label: "服务单位", end: 300, suffix: "+" },
|
|
|
|
|
- { label: "区域覆盖", end: 20, suffix: "+" },
|
|
|
|
|
-];
|
|
|
|
|
-
|
|
|
|
|
const slides = [
|
|
const slides = [
|
|
|
{
|
|
{
|
|
|
bg: banner1Url,
|
|
bg: banner1Url,
|
|
@@ -181,33 +178,63 @@ const products = [
|
|
|
title: "油田数智底座(PaaS)",
|
|
title: "油田数智底座(PaaS)",
|
|
|
desc: "面向油田场景的数字底座:模型、流程、权限、消息与开放接口。",
|
|
desc: "面向油田场景的数字底座:模型、流程、权限、消息与开放接口。",
|
|
|
tags: ["组件化", "开放 API", "多租户"],
|
|
tags: ["组件化", "开放 API", "多租户"],
|
|
|
|
|
+ cover: p1,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
title: "井站物联与边缘网关",
|
|
title: "井站物联与边缘网关",
|
|
|
desc: "统一接入、监控、告警与远程运维,沉淀井站资产与运行状态。",
|
|
desc: "统一接入、监控、告警与远程运维,沉淀井站资产与运行状态。",
|
|
|
tags: ["协议适配", "边缘采集", "运行监控"],
|
|
tags: ["协议适配", "边缘采集", "运行监控"],
|
|
|
|
|
+ cover: banner2Url,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
title: "数据资产与指标中心",
|
|
title: "数据资产与指标中心",
|
|
|
desc: "从采集到治理再到分析:资产目录、血缘、质量与指标口径管理。",
|
|
desc: "从采集到治理再到分析:资产目录、血缘、质量与指标口径管理。",
|
|
|
tags: ["主数据", "质量校验", "指标中心"],
|
|
tags: ["主数据", "质量校验", "指标中心"],
|
|
|
|
|
+ cover: p2,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
title: "智能分析与预测维护",
|
|
title: "智能分析与预测维护",
|
|
|
desc: "结合油田机理与算法能力,落地工况识别、故障预警与能效优化。",
|
|
desc: "结合油田机理与算法能力,落地工况识别、故障预警与能效优化。",
|
|
|
tags: ["工况识别", "预测维护", "能效优化"],
|
|
tags: ["工况识别", "预测维护", "能效优化"],
|
|
|
|
|
+ cover: p3,
|
|
|
},
|
|
},
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
const solutions = [
|
|
const solutions = [
|
|
|
- { title: "设备管理", desc: "井场数据汇聚、施工过程可视化与风险预警。" },
|
|
|
|
|
- { title: "智能钻修井", desc: "生产运行监控、工况分析与产量波动诊断。" },
|
|
|
|
|
- { title: "智慧注气", desc: "站库管网联动监测、泄漏/压降异常识别。" },
|
|
|
|
|
- { title: "智慧压裂", desc: "注采平衡分析、配注优化与效益评估。" },
|
|
|
|
|
- { title: "停办管网", desc: "能耗在线核算、节能评估与合规披露闭环。" },
|
|
|
|
|
- { title: "场站管理", desc: "告警闭环、工单联动与知识沉淀,提升设备可靠性。" },
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ title: "设备管理",
|
|
|
|
|
+ desc: "井场数据汇聚、施工过程可视化与风险预警。",
|
|
|
|
|
+ cover: banner1Url,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: "智能钻修井",
|
|
|
|
|
+ desc: "生产运行监控、工况分析与产量波动诊断。",
|
|
|
|
|
+ cover: banner2Url,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: "智慧注气",
|
|
|
|
|
+ desc: "站库管网联动监测、泄漏/压降异常识别。",
|
|
|
|
|
+ cover: banner3Url,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: "智慧压裂",
|
|
|
|
|
+ desc: "注采平衡分析、配注优化与效益评估。",
|
|
|
|
|
+ cover: afterSalesUrl,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: "停办管网",
|
|
|
|
|
+ desc: "能耗在线核算、节能评估与合规披露闭环。",
|
|
|
|
|
+ cover: news1,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ title: "场站管理",
|
|
|
|
|
+ desc: "告警闭环、工单联动与知识沉淀,提升设备可靠性。",
|
|
|
|
|
+ cover: news3,
|
|
|
|
|
+ },
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
|
|
+const solutionsTabIndex = ref(0);
|
|
|
|
|
+
|
|
|
const cases = [
|
|
const cases = [
|
|
|
{
|
|
{
|
|
|
title: "采油厂",
|
|
title: "采油厂",
|
|
@@ -389,11 +416,11 @@ const partners = Array.from({ length: 12 }).map((_, idx) => ({
|
|
|
<div class="container">
|
|
<div class="container">
|
|
|
<Reveal as="div" class="sectionHead" :delay="0">
|
|
<Reveal as="div" class="sectionHead" :delay="0">
|
|
|
<div style="display: flex; align-items: center">
|
|
<div style="display: flex; align-items: center">
|
|
|
- <img src="../assets/images/title1.png" alt="" />
|
|
|
|
|
- <h2 class="h2" style="padding: 0 30px; color: #696969">
|
|
|
|
|
|
|
+ <!-- <img src="../assets/images/title1.png" alt="" /> -->
|
|
|
|
|
+ <h2 class="h2" style="padding: 0 30px">
|
|
|
数据驱动、形成油气价值闭环
|
|
数据驱动、形成油气价值闭环
|
|
|
</h2>
|
|
</h2>
|
|
|
- <img src="../assets/images/title2.png" alt="" />
|
|
|
|
|
|
|
+ <!-- <img src="../assets/images/title2.png" alt="" /> -->
|
|
|
</div>
|
|
</div>
|
|
|
</Reveal>
|
|
</Reveal>
|
|
|
|
|
|
|
@@ -431,16 +458,14 @@ const partners = Array.from({ length: 12 }).map((_, idx) => ({
|
|
|
</div>
|
|
</div>
|
|
|
</section>
|
|
</section>
|
|
|
|
|
|
|
|
- <section class="section">
|
|
|
|
|
|
|
+ <section class="section section--soft">
|
|
|
<div class="container">
|
|
<div class="container">
|
|
|
<Reveal as="div" class="sectionHead" :delay="0">
|
|
<Reveal as="div" class="sectionHead" :delay="0">
|
|
|
<div>
|
|
<div>
|
|
|
<div style="display: flex; align-items: center">
|
|
<div style="display: flex; align-items: center">
|
|
|
- <img src="../assets/images/title1.png" alt="" />
|
|
|
|
|
- <h2 class="h2" style="padding: 0 30px; color: #696969">
|
|
|
|
|
- 覆盖油气生产全链路
|
|
|
|
|
- </h2>
|
|
|
|
|
- <img src="../assets/images/title2.png" alt="" />
|
|
|
|
|
|
|
+ <!-- <img src="../assets/images/title1.png" alt="" /> -->
|
|
|
|
|
+ <h2 class="h2" style="padding: 0 30px">覆盖油气生产全链路</h2>
|
|
|
|
|
+ <!-- <img src="../assets/images/title2.png" alt="" /> -->
|
|
|
</div>
|
|
</div>
|
|
|
<div class="muted" style="text-align: center; padding-top: 20px">
|
|
<div class="muted" style="text-align: center; padding-top: 20px">
|
|
|
从井场到站控,从数据到应用,按需组合,快速交付。
|
|
从井场到站控,从数据到应用,按需组合,快速交付。
|
|
@@ -456,54 +481,107 @@ const partners = Array.from({ length: 12 }).map((_, idx) => ({
|
|
|
class="card card-pad productCard hover-lift"
|
|
class="card card-pad productCard hover-lift"
|
|
|
:delay="80 + idx * 70"
|
|
:delay="80 + idx * 70"
|
|
|
>
|
|
>
|
|
|
- <div class="productTitle">{{ p.title }}</div>
|
|
|
|
|
- <div class="muted productDesc">{{ p.desc }}</div>
|
|
|
|
|
- <div class="productTags">
|
|
|
|
|
- <span v-for="t in p.tags" :key="t" class="pill">{{ t }}</span>
|
|
|
|
|
|
|
+ <div class="productImageWrapper">
|
|
|
|
|
+ <img :src="p.cover" :alt="p.title" class="productImage" />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="productContent">
|
|
|
|
|
+ <div class="productTitle">{{ p.title }}</div>
|
|
|
|
|
+ <div class="muted productDesc">{{ p.desc }}</div>
|
|
|
|
|
+ <div class="productTags">
|
|
|
|
|
+ <span v-for="t in p.tags" :key="t" class="pill">{{ t }}</span>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</Reveal>
|
|
</Reveal>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</section>
|
|
</section>
|
|
|
|
|
|
|
|
- <section
|
|
|
|
|
- class="section section--soft solutionsBg"
|
|
|
|
|
- :style="{ backgroundImage: `url(${solutionsBgUrl})` }"
|
|
|
|
|
- >
|
|
|
|
|
- <div class="container">
|
|
|
|
|
|
|
+ <section class="section" style="padding-left: 0; padding-right: 0">
|
|
|
|
|
+ <div>
|
|
|
<Reveal as="div" class="sectionHead" :delay="0">
|
|
<Reveal as="div" class="sectionHead" :delay="0">
|
|
|
<div style="display: flex; align-items: center">
|
|
<div style="display: flex; align-items: center">
|
|
|
- <img src="../assets/images/title1.png" alt="" />
|
|
|
|
|
- <h2 class="h2" style="padding: 0 30px; color: #696969">
|
|
|
|
|
- 面向场景的可复制实践
|
|
|
|
|
- </h2>
|
|
|
|
|
- <img src="../assets/images/title2.png" alt="" />
|
|
|
|
|
|
|
+ <!-- <img src="../assets/images/title1.png" alt="" /> -->
|
|
|
|
|
+ <h2 class="h2" style="padding: 0 30px">面向场景的可复制实践</h2>
|
|
|
|
|
+ <!-- <img src="../assets/images/title2.png" alt="" /> -->
|
|
|
</div>
|
|
</div>
|
|
|
</Reveal>
|
|
</Reveal>
|
|
|
|
|
|
|
|
- <div class="grid grid-3">
|
|
|
|
|
- <Reveal
|
|
|
|
|
- v-for="(s, idx) in solutions"
|
|
|
|
|
- :key="s.title"
|
|
|
|
|
- as="div"
|
|
|
|
|
- class="hoverWrap"
|
|
|
|
|
- :delay="80 + idx * 60"
|
|
|
|
|
- >
|
|
|
|
|
- <RouterLink
|
|
|
|
|
- class="card card-pad solutionCard hover-lift"
|
|
|
|
|
- to="/solutions"
|
|
|
|
|
|
|
+ <div class="solutionsTabContainer">
|
|
|
|
|
+ <div class="solutionsTabs">
|
|
|
|
|
+ <button
|
|
|
|
|
+ v-for="(s, idx) in solutions"
|
|
|
|
|
+ :key="s.title"
|
|
|
|
|
+ class="solutionsTabBtn"
|
|
|
|
|
+ :class="{ active: solutionsTabIndex === idx }"
|
|
|
|
|
+ @click="solutionsTabIndex = idx"
|
|
|
>
|
|
>
|
|
|
- <div class="solutionTitle">{{ s.title }}</div>
|
|
|
|
|
- <div class="muted">{{ s.desc }}</div>
|
|
|
|
|
- <div class="solutionMore">了解更多 →</div>
|
|
|
|
|
- </RouterLink>
|
|
|
|
|
- </Reveal>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div style="display: flex; justify-content: center; padding-top: 30px">
|
|
|
|
|
- <RouterLink class="btn btn-link" to="/news"
|
|
|
|
|
- >查看全部方案
|
|
|
|
|
- <Icon icon="lucide:chevron-right" width="24" height="24"
|
|
|
|
|
- /></RouterLink>
|
|
|
|
|
|
|
+ <img
|
|
|
|
|
+ v-if="s.title === '设备管理'"
|
|
|
|
|
+ src="../assets//images/s1.png"
|
|
|
|
|
+ alt=""
|
|
|
|
|
+ style="width: 50px; height: 50px"
|
|
|
|
|
+ />
|
|
|
|
|
+ <img
|
|
|
|
|
+ v-if="s.title === '智能钻修井'"
|
|
|
|
|
+ src="../assets//images/s2.png"
|
|
|
|
|
+ alt=""
|
|
|
|
|
+ style="width: 50px; height: 50px"
|
|
|
|
|
+ />
|
|
|
|
|
+
|
|
|
|
|
+ <img
|
|
|
|
|
+ v-if="s.title === '智慧注气'"
|
|
|
|
|
+ src="../assets//images/s3.png"
|
|
|
|
|
+ alt=""
|
|
|
|
|
+ style="width: 50px; height: 50px"
|
|
|
|
|
+ />
|
|
|
|
|
+
|
|
|
|
|
+ <img
|
|
|
|
|
+ v-if="s.title === '智慧压裂'"
|
|
|
|
|
+ src="../assets//images/s4.png"
|
|
|
|
|
+ alt=""
|
|
|
|
|
+ style="width: 50px; height: 50px"
|
|
|
|
|
+ />
|
|
|
|
|
+
|
|
|
|
|
+ <img
|
|
|
|
|
+ v-if="s.title === '停办管网'"
|
|
|
|
|
+ src="../assets//images/s5.png"
|
|
|
|
|
+ alt=""
|
|
|
|
|
+ style="width: 50px; height: 50px"
|
|
|
|
|
+ />
|
|
|
|
|
+
|
|
|
|
|
+ <img
|
|
|
|
|
+ v-if="s.title === '场站管理'"
|
|
|
|
|
+ src="../assets//images/s6.png"
|
|
|
|
|
+ alt=""
|
|
|
|
|
+ style="width: 50px; height: 50px"
|
|
|
|
|
+ />
|
|
|
|
|
+ {{ s.title }}
|
|
|
|
|
+ </button>
|
|
|
|
|
+ </div>
|
|
|
|
|
+
|
|
|
|
|
+ <div class="solutionsTabContent">
|
|
|
|
|
+ <Transition name="slide-up" mode="out-in">
|
|
|
|
|
+ <div :key="solutionsTabIndex" class="solutionsTabInner">
|
|
|
|
|
+ <div class="solutionsTabText">
|
|
|
|
|
+ <div class="solutionsTabTitle">
|
|
|
|
|
+ {{ solutions[solutionsTabIndex].title }}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="solutionsTabDesc">
|
|
|
|
|
+ {{ solutions[solutionsTabIndex].desc }}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <RouterLink class="solutionsTabLink" to="/solutions">
|
|
|
|
|
+ 了解更多 →
|
|
|
|
|
+ </RouterLink>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div class="solutionsTabImage">
|
|
|
|
|
+ <img
|
|
|
|
|
+ :src="solutions[solutionsTabIndex].cover"
|
|
|
|
|
+ :alt="solutions[solutionsTabIndex].title"
|
|
|
|
|
+ />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </Transition>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</section>
|
|
</section>
|
|
@@ -512,11 +590,9 @@ const partners = Array.from({ length: 12 }).map((_, idx) => ({
|
|
|
<div class="container">
|
|
<div class="container">
|
|
|
<Reveal as="div" class="sectionHead" :delay="0">
|
|
<Reveal as="div" class="sectionHead" :delay="0">
|
|
|
<div style="display: flex; align-items: center">
|
|
<div style="display: flex; align-items: center">
|
|
|
- <img src="../assets/images/title1.png" alt="" />
|
|
|
|
|
- <h2 class="h2" style="padding: 0 10px; color: #696969">
|
|
|
|
|
- 用可量化指标呈现业务价值
|
|
|
|
|
- </h2>
|
|
|
|
|
- <img src="../assets/images/title2.png" alt="" />
|
|
|
|
|
|
|
+ <!-- <img src="../assets/images/title1.png" alt="" /> -->
|
|
|
|
|
+ <h2 class="h2" style="padding: 0 10px">用可量化指标呈现业务价值</h2>
|
|
|
|
|
+ <!-- <img src="../assets/images/title2.png" alt="" /> -->
|
|
|
</div>
|
|
</div>
|
|
|
</Reveal>
|
|
</Reveal>
|
|
|
|
|
|
|
@@ -748,6 +824,7 @@ const partners = Array.from({ length: 12 }).map((_, idx) => ({
|
|
|
position: relative;
|
|
position: relative;
|
|
|
padding: 54px 0 28px;
|
|
padding: 54px 0 28px;
|
|
|
overflow: hidden;
|
|
overflow: hidden;
|
|
|
|
|
+ height: 50vh;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.hero__bg {
|
|
.hero__bg {
|
|
@@ -1227,7 +1304,7 @@ const partners = Array.from({ length: 12 }).map((_, idx) => ({
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.productTitle {
|
|
.productTitle {
|
|
|
- font-weight: 850;
|
|
|
|
|
|
|
+ /* font-weight: 850; */
|
|
|
letter-spacing: -0.02em;
|
|
letter-spacing: -0.02em;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1987,4 +2064,254 @@ const partners = Array.from({ length: 12 }).map((_, idx) => ({
|
|
|
height: 100px;
|
|
height: 100px;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+.productCard {
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ padding: 0;
|
|
|
|
|
+ border: none;
|
|
|
|
|
+ box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.productImageWrapper {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 200px;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.productImage {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 100%;
|
|
|
|
|
+ object-fit: cover;
|
|
|
|
|
+ display: block;
|
|
|
|
|
+ transition: transform 0.3s ease;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.productCard:hover .productImage {
|
|
|
|
|
+ transform: scale(1.1);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.productContent {
|
|
|
|
|
+ padding: 20px;
|
|
|
|
|
+ background: #ffffff;
|
|
|
|
|
+ transition: background-color 0.3s ease;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.productCard:hover .productContent {
|
|
|
|
|
+ background-color: #024198;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.productCard:hover .productTitle,
|
|
|
|
|
+.productCard:hover .productDesc,
|
|
|
|
|
+.productCard:hover .pill {
|
|
|
|
|
+ color: #ffffff;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.productTitle {
|
|
|
|
|
+ letter-spacing: -0.02em;
|
|
|
|
|
+ font-size: 18px;
|
|
|
|
|
+ line-height: 1.4;
|
|
|
|
|
+ transition: color 0.3s ease;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.productDesc {
|
|
|
|
|
+ margin-top: 8px;
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ line-height: 1.6;
|
|
|
|
|
+ transition: color 0.3s ease;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.productTags {
|
|
|
|
|
+ margin-top: 12px;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-wrap: wrap;
|
|
|
|
|
+ gap: 10px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.pill {
|
|
|
|
|
+ padding: 4px 10px;
|
|
|
|
|
+ border-radius: 999px;
|
|
|
|
|
+ background: rgba(37, 99, 235, 0.1);
|
|
|
|
|
+ color: var(--brand-700);
|
|
|
|
|
+ font-size: 12px;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ transition: all 0.3s ease;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.productCard:hover .pill {
|
|
|
|
|
+ background: rgba(255, 255, 255, 0.2);
|
|
|
|
|
+ color: #ffffff;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabContainer {
|
|
|
|
|
+ margin-top: 10px;
|
|
|
|
|
+
|
|
|
|
|
+ padding: 30px;
|
|
|
|
|
+ padding-left: 0;
|
|
|
|
|
+ padding-right: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabs {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: center;
|
|
|
|
|
+ flex-wrap: wrap;
|
|
|
|
|
+ gap: 12px;
|
|
|
|
|
+
|
|
|
|
|
+ padding-bottom: 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabBtn {
|
|
|
|
|
+ padding: 12px 24px;
|
|
|
|
|
+ background: transparent;
|
|
|
|
|
+ border: none;
|
|
|
|
|
+ border-bottom: none;
|
|
|
|
|
+ font-size: 16px;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+ color: var(--slate-600);
|
|
|
|
|
+ cursor: pointer;
|
|
|
|
|
+ transition: all 0.25s ease;
|
|
|
|
|
+ position: relative;
|
|
|
|
|
+ margin-bottom: -2px;
|
|
|
|
|
+ border-top-left-radius: 10px;
|
|
|
|
|
+ border-top-right-radius: 10px;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: 10px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabBtn:hover {
|
|
|
|
|
+ color: var(--brand-700);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabBtn.active {
|
|
|
|
|
+ color: var(--brand-700);
|
|
|
|
|
+ /* border-bottom-color: var(--brand-700); */
|
|
|
|
|
+ background: rgba(37, 99, 235, 0.06);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabContent {
|
|
|
|
|
+ min-height: 420px;
|
|
|
|
|
+ margin-top: 2px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabInner {
|
|
|
|
|
+ display: grid;
|
|
|
|
|
+ grid-template-columns: 1fr 1fr;
|
|
|
|
|
+ gap: 40px;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ background-color: #f7f7fa;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabText {
|
|
|
|
|
+ padding: 20px;
|
|
|
|
|
+ padding-left: 100px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabTitle {
|
|
|
|
|
+ font-size: 32px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ letter-spacing: -0.02em;
|
|
|
|
|
+ color: #014198;
|
|
|
|
|
+ line-height: 1.3;
|
|
|
|
|
+ margin-bottom: 16px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabDesc {
|
|
|
|
|
+ font-size: 16px;
|
|
|
|
|
+ line-height: 1.8;
|
|
|
|
|
+ color: #666666;
|
|
|
|
|
+ margin-bottom: 24px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabLink {
|
|
|
|
|
+ display: inline-flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: 8px;
|
|
|
|
|
+ color: var(--brand-700);
|
|
|
|
|
+ font-size: 16px;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+ text-decoration: none;
|
|
|
|
|
+ transition: gap 0.2s ease;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabLink:hover {
|
|
|
|
|
+ gap: 12px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabImage {
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.solutionsTabImage img {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ height: 420px;
|
|
|
|
|
+ object-fit: cover;
|
|
|
|
|
+ display: block;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.slide-up-enter-active,
|
|
|
|
|
+.slide-up-leave-active {
|
|
|
|
|
+ transition: all 0.4s cubic-bezier(0.22, 1, 0.36, 1);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.slide-up-enter-from {
|
|
|
|
|
+ opacity: 0;
|
|
|
|
|
+ transform: translateY(30px);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.slide-up-leave-to {
|
|
|
|
|
+ opacity: 0;
|
|
|
|
|
+ transform: translateY(-20px);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@media (max-width: 960px) {
|
|
|
|
|
+ .solutionsTabInner {
|
|
|
|
|
+ grid-template-columns: 1fr;
|
|
|
|
|
+ gap: 24px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .solutionsTabTitle {
|
|
|
|
|
+ font-size: 26px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .solutionsTabImage img {
|
|
|
|
|
+ height: 240px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .solutionsTabs {
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ gap: 8px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .solutionsTabBtn {
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ text-align: left;
|
|
|
|
|
+ padding: 14px 20px;
|
|
|
|
|
+ border-bottom: 2px solid rgba(15, 23, 42, 0.08);
|
|
|
|
|
+ margin-bottom: 0;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .solutionsTabBtn.active {
|
|
|
|
|
+ border-bottom-color: var(--brand-700);
|
|
|
|
|
+ background: rgba(37, 99, 235, 0.08);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@media (max-width: 520px) {
|
|
|
|
|
+ .solutionsTabContainer {
|
|
|
|
|
+ padding: 20px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .solutionsTabTitle {
|
|
|
|
|
+ font-size: 22px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .solutionsTabDesc {
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .solutionsTabImage img {
|
|
|
|
|
+ height: 200px;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
</style>
|
|
</style>
|