diff --git a/.gitignore b/.gitignore index f47d438..0c23c73 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ dist/ # Local Codex agent skills and instructions .agents/ +.codex/ skills-lock.json # Local environment files diff --git a/assets/css/interior-polish.css b/assets/css/interior-polish.css index 6688e9d..851185d 100644 --- a/assets/css/interior-polish.css +++ b/assets/css/interior-polish.css @@ -1,3 +1,4 @@ +/* Shared visual system for all interior pages. Homepage styles remain untouched. */ :is( .about-page, .advantages-page, @@ -8,39 +9,24 @@ .insights-page, .article-page ) { - --interior-ink: #263c55; - --interior-copy: #5d7087; - --interior-muted: #8192a6; - --interior-line: rgba(74, 134, 204, 0.14); - --interior-blue: #207bf2; + --interior-ink: var(--color-text-strong); + --interior-copy: var(--color-text-default); + --interior-body: var(--color-text-body); + --interior-muted: #75869a; + --interior-blue: var(--color-brand-primary); + --interior-blue-bright: var(--color-brand-bright); + --interior-line: rgba(73, 139, 234, 0.14); --interior-surface: rgba(255, 255, 255, 0.88); position: relative; + width: 100%; + min-width: 0; min-height: 100dvh; overflow: clip; color: var(--interior-copy); - background: #f8fbff; + background: #fff; isolation: isolate; } -:is( - .about-page, - .advantages-page, - .services-page, - .solutions-page, - .cases-page, - .case-detail-page, - .insights-page, - .article-page -)::after { - position: fixed; - z-index: 40; - inset: 0; - content: ''; - pointer-events: none; - background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 160 160' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.82' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.18'/%3E%3C/svg%3E"); - opacity: 0.018; -} - :is( .about-page, .advantages-page, @@ -51,11 +37,52 @@ .insights-page, .article-page ) - .page-width { - width: min(1240px, calc(100% - 64px)); + *, +:is( + .about-page, + .advantages-page, + .services-page, + .solutions-page, + .cases-page, + .case-detail-page, + .insights-page, + .article-page + ) + *::before, +:is( + .about-page, + .advantages-page, + .services-page, + .solutions-page, + .cases-page, + .case-detail-page, + .insights-page, + .article-page + ) + *::after { + box-sizing: border-box; } -:is( +body + :is( + .about-page, + .advantages-page, + .services-page, + .solutions-page, + .cases-page, + .case-detail-page, + .insights-page, + .article-page + ) + .page-width { + width: min(var(--container-max), calc(100% - 48px)); + min-width: 0; + margin-right: auto; + margin-left: auto; +} + +body + :is( .about-page, .advantages-page, .services-page, @@ -67,10 +94,11 @@ ) :is(h1, h2, h3, h4, strong) { color: var(--interior-ink); - letter-spacing: 0 !important; + letter-spacing: 0; } -:is( +body + :is( .about-page, .advantages-page, .services-page, @@ -84,7 +112,8 @@ text-wrap: balance; } -:is( +body + :is( .about-page, .advantages-page, .services-page, @@ -95,10 +124,155 @@ .article-page ) p { + max-width: 65ch; + color: var(--interior-body); + line-height: 1.72; text-wrap: pretty; } -:is( +/* Page heroes share brand foundations while retaining their own visual signatures. */ +body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is(.about-hero, .advantages-hero, .services-hero, .solutions-hero, .cases-hero, .insights-hero) { + min-height: 620px; + background: linear-gradient(90deg, #f7faff 0%, #e6eefc 100%); +} + +body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .about-hero-grid, + .advantages-hero-grid, + .services-hero-grid, + .solutions-hero-grid, + .cases-hero-grid, + .insights-hero-grid + ) { + min-height: 620px; + grid-template-columns: minmax(0, 0.94fr) minmax(420px, 1.06fr); + gap: clamp(40px, 5vw, 72px); + padding-top: 48px; + padding-bottom: 56px; +} + +body + :is(.advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .advantages-hero-copy, + .services-hero-copy, + .solutions-hero-copy, + .cases-hero-copy, + .insights-hero-copy + ) + h1 { + max-width: 11.5em; + margin-top: 15px; + font-size: clamp(40px, 3.35vw, 51px); + font-weight: 700; + line-height: 1.28; +} + +body .about-page .about-hero-copy h1 { + max-width: 8em; + font-size: clamp(44px, 3.7vw, 56px); + line-height: 1.08; +} + +body .about-page .about-hero-copy h2 { + max-width: 18em; + margin-top: 22px; + font-size: clamp(25px, 2.1vw, 31px); + font-weight: 500; + line-height: 1.48; +} + +body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .about-hero-copy, + .advantages-hero-copy, + .services-hero-copy, + .solutions-hero-copy, + .cases-hero-copy, + .insights-hero-copy + ) + > p:nth-of-type(2) { + max-width: 38em; + margin-top: 22px; + color: var(--interior-copy); + font-size: 15px; + line-height: 1.75; +} + +body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is(.page-eyebrow, .section-kicker) { + display: flex; + align-items: center; + gap: 10px; + margin: 0; + color: var(--interior-blue); + font-size: 14px; + font-weight: 700; + letter-spacing: 0; +} + +body + :is( + .about-page, + .advantages-page, + .services-page, + .solutions-page, + .cases-page, + .case-detail-page, + .insights-page, + .article-page + ) + :is(.page-eyebrow, .section-kicker)::before { + width: 22px; + height: 2px; + flex: 0 0 auto; + content: ''; + background: linear-gradient(90deg, var(--interior-blue), #61c4ee); +} + +body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .about-hero-visual, + .advantage-engine, + .services-hero-visual, + .solutions-hero-visual, + .case-collage, + .editorial-index + ) { + min-width: 0; + max-width: 100%; +} + +body + :is(.about-page, .advantages-page, .services-page, .solutions-page) + :is(.about-node, .engine-node, .industry-node, .hero-data) { + border-radius: var(--radius-card); + box-shadow: var(--shadow-card); +} + +body .cases-page .collage-card { + border-radius: var(--radius-card); + box-shadow: 0 18px 42px rgba(55, 113, 184, 0.14); +} + +body .insights-page .editorial-index { + border-radius: var(--radius-panel); + background: rgba(255, 255, 255, 0.7); + box-shadow: + 0 24px 56px rgba(48, 105, 171, 0.1), + inset 0 1px 0 #fff; +} + +/* Shared section rhythm. */ +body + :is( .about-page, .advantages-page, .services-page, @@ -110,63 +284,120 @@ ) main > section { - scroll-margin-top: 78px; - box-shadow: inset 0 1px 0 rgba(92, 145, 207, 0.055); + scroll-margin-top: 76px; + box-shadow: none; } -:is( - .about-page, - .advantages-page, - .services-page, - .solutions-page, - .cases-page, - .case-detail-page, - .insights-page, - .article-page +body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .company-story-section, + .search-change-section, + .company-stats-section, + .method-section, + .timeline-section, + .team-section, + .contact-section, + .advantage-intro-section, + .advantage-system, + .comparison-section, + .value-added-section, + .proof-section, + .decision-section, + .model-deep-section, + .service-system-section, + .process-section, + .service-industries, + .difference-section, + .industry-solutions, + .more-industries-section, + .case-library-section, + .case-method-section, + .insight-library, + .whitepaper-section + ) { + padding-top: 84px; + padding-bottom: 96px; +} + +body .about-page :is(.search-change-section, .method-section, .team-section), +body .advantages-page :is(.advantage-intro-section, .comparison-section, .proof-section), +body .services-page :is(.model-deep-section, .process-section, .proof-section), +body .solutions-page :is(.difference-section, .more-industries-section), +body .cases-page .case-method-section, +body .insights-page .whitepaper-section { + background: var(--color-surface-blue); +} + +body .cases-page .case-library-section, +body .insights-page .insight-library, +body + .about-page + :is(.company-story-section, .company-stats-section, .timeline-section, .contact-section), +body .advantages-page :is(.advantage-system, .value-added-section), +body .services-page :is(.decision-section, .service-system-section, .service-industries), +body .solutions-page .industry-solutions { + background: #fff; +} + +body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .story-heading, + .change-copy, + .company-stats-grid > header, + .center-heading, + .timeline-heading, + .team-statement, + .contact-heading, + .advantage-intro-grid > header, + .advantage-story-copy, + .value-added-heading, + .proof-layout > header, + .section-intro, + .model-heading, + .service-system-heading, + .process-heading, + .industry-list > header, + .difference-heading, + .industry-intro, + .case-library-heading, + .case-method-grid > header, + .library-heading, + .whitepaper-copy ) - :is(.section-kicker, .page-eyebrow) { - display: flex; - align-items: center; - gap: 10px; - color: var(--interior-blue); - font-weight: 650; - letter-spacing: 0 !important; + h2 { + margin-top: 14px; + color: var(--interior-ink); + font-size: clamp(29px, 2.4vw, 35px); + font-weight: 700; + line-height: 1.35; } -:is( - .about-page, - .advantages-page, - .services-page, - .solutions-page, - .cases-page, - .case-detail-page, - .insights-page, - .article-page +body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .story-heading, + .change-copy, + .center-heading, + .timeline-heading, + .team-statement, + .contact-heading, + .advantage-story-copy, + .section-intro, + .industry-intro, + .case-library-heading, + .case-method-grid, + .library-heading ) - :is(.section-kicker, .page-eyebrow)::before { - width: 22px; - height: 2px; - flex: 0 0 auto; - content: ''; - background: linear-gradient(90deg, #207bf2, #72cbef); + p { + font-size: 14px; + line-height: 1.72; } -:is( - .about-page, - .advantages-page, - .services-page, - .solutions-page, - .cases-page, - .case-detail-page, - .insights-page, - .article-page - ) - :is(.center-heading, .model-heading, .process-heading) - :is(.section-kicker, .page-eyebrow) { - justify-content: center; -} - -:is( +/* Controls and interaction states. */ +body + :is( .about-page, .advantages-page, .services-page, @@ -177,16 +408,23 @@ .article-page ) :is(.primary-button, .industry-plan-button, .service-action, .story-action) { - border-radius: 5px !important; + min-height: 46px; + border-radius: var(--radius-control); + color: #fff; + background: var(--gradient-action); + box-shadow: var(--shadow-button); + font-size: 14px; + font-weight: 600; transition: - color 0.22s ease, - background 0.22s ease, - border-color 0.22s ease, - box-shadow 0.24s ease, - transform 0.24s cubic-bezier(0.22, 1, 0.36, 1) !important; + color var(--duration-fast) ease, + background var(--duration-fast) ease, + border-color var(--duration-fast) ease, + box-shadow var(--duration-fast) ease, + transform var(--duration-fast) var(--ease-standard); } -:is( +body + :is( .about-page, .advantages-page, .services-page, @@ -197,109 +435,221 @@ .article-page ) :is(button, a):focus-visible { - outline: 3px solid rgba(32, 123, 242, 0.3); + outline: 3px solid rgba(20, 120, 251, 0.34); outline-offset: 3px; } -:is( - .about-page, - .advantages-page, - .services-page, - .solutions-page, - .cases-page, - .case-detail-page, - .insights-page, - .article-page - ) - :is(table, .comparison-table, .result-table-wrap) { - font-variant-numeric: tabular-nums; +body + :is(.advantages-page, .solutions-page) + :is(.hero-advantage-links button, .hero-industry-links button), +body :is(.cases-page, .insights-page) :is(.case-filters button, .insight-filters button) { + border-radius: var(--radius-control); + font-size: 13px; + transition: + color var(--duration-fast) ease, + background var(--duration-fast) ease, + border-color var(--duration-fast) ease, + box-shadow var(--duration-fast) ease, + transform var(--duration-fast) ease; } -:is( - .about-page, - .advantages-page, - .services-page, - .solutions-page, - .cases-page, - .case-detail-page, - .insights-page, - .article-page - ) - img { - image-rendering: auto; +/* Panels use component-specific radii instead of one universal card treatment. */ +body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .featured-case, + .featured-insight, + .contact-details, + .comparison-table-wrap, + .result-table-wrap, + .comparison-table, + .objective-box + ) { + border: 1px solid var(--color-border-soft); + border-radius: var(--radius-panel); + background: rgba(255, 255, 255, 0.9); + box-shadow: var(--shadow-card); } -:is( - .about-page, - .advantages-page, - .services-page, - .solutions-page, - .cases-page, - .case-detail-page, - .insights-page, - .article-page - ) +body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) :is( .stats-row article, .method-flow article, .team-capabilities article, .intro-sequence article, - .advantage-story-visual, .proof-stats article, .decision-factor-list article, - .industry-visual, .more-industry-list button, .snapshot-grid article, .method-list article, + .article-grid article + ) { + border: 1px solid rgba(83, 145, 215, 0.12); + border-radius: var(--radius-card); + background-color: var(--interior-surface); + box-shadow: var(--shadow-card); +} + +body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is(.stats-row article, .proof-stats article, .featured-metrics strong, .hero-proof-line strong) { + font-variant-numeric: tabular-nums; +} + +body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + img { + max-width: 100%; + image-rendering: auto; +} + +/* Page-specific signatures. */ +body .services-page .services-hero-visual::after { + position: absolute; + z-index: 1; + right: 8%; + bottom: 3%; + width: 46%; + height: 1px; + content: ''; + background: linear-gradient(90deg, transparent, rgba(20, 120, 251, 0.5)); +} + +body .solutions-page .solutions-hero-mesh::after { + background-image: radial-gradient(circle, rgba(20, 120, 251, 0.17) 1px, transparent 1.5px); + background-size: 28px 28px; + opacity: 0.22; +} + +body .advantages-page .advantages-hero-mesh::after { + background-image: + linear-gradient(rgba(54, 124, 214, 0.07) 1px, transparent 1px), + linear-gradient(90deg, rgba(54, 124, 214, 0.07) 1px, transparent 1px); + background-size: 72px 72px; + transform: rotate(-4deg) scale(1.08); +} + +body .cases-page .case-collage { + transform: rotate(-0.6deg); +} + +body .cases-page .case-collage .collage-card { + transition: + transform var(--duration-normal) var(--ease-standard), + box-shadow var(--duration-normal) ease; +} + +body .insights-page .editorial-index::after { + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 4px; + content: ''; + background: linear-gradient(90deg, var(--color-brand-violet), var(--color-brand-cyan)); +} + +body .about-page .about-hero-mesh::after { + background-image: + linear-gradient( + 90deg, + transparent 0 13%, + rgba(20, 120, 251, 0.08) 13% 13.1%, + transparent 13.1% + ), + radial-gradient(circle, rgba(20, 120, 251, 0.18) 1px, transparent 1.5px); + background-size: + 100% 100%, + 36px 36px; + opacity: 0.2; +} + +/* Detail and long-form pages. */ +body :is(.case-detail-page, .article-page) { + background: #fff; +} + +body :is(.case-detail-page, .article-page) :is(.detail-hero, .article-hero) { + background: linear-gradient(90deg, #f7faff, #e6eefc); +} + +body + .case-detail-page + :is(.overview-section, .baseline-section, .solution-detail-section, .detail-summary-section), +body .article-page :is(.article-layout, .related-section) { + padding-top: 80px; + padding-bottom: 92px; +} + +body .case-detail-page :is(.baseline-section, .detail-summary-section), +body .article-page .related-section { + background: var(--color-surface-blue); +} + +body + .case-detail-page + :is( .baseline-grid article, .question-grid article, .phase-list article, .distribution-map article, .outcome-grid article, - .related-grid article, - .article-grid article + .related-grid article ) { - border: 1px solid rgba(83, 145, 215, 0.12) !important; - border-radius: 8px !important; - background-color: var(--interior-surface) !important; - box-shadow: - 0 16px 42px rgba(58, 112, 174, 0.075), - inset 0 1px 0 rgba(255, 255, 255, 0.9) !important; + border: 1px solid rgba(83, 145, 215, 0.12); + border-radius: var(--radius-card); + background-color: var(--interior-surface); + box-shadow: var(--shadow-card); } -:is( - .about-page, - .advantages-page, - .services-page, - .solutions-page, - .cases-page, - .case-detail-page, - .insights-page, - .article-page - ) - :is(.comparison-table-wrap, .result-table-wrap, .comparison-table) { - border: 1px solid rgba(83, 145, 215, 0.14) !important; - border-radius: 8px !important; - background: rgba(255, 255, 255, 0.9) !important; - box-shadow: 0 20px 50px rgba(58, 112, 174, 0.08) !important; +body .case-detail-page :is(.comparison-table-wrap, .result-table-wrap, .objective-box) { + border: 1px solid var(--color-border-soft); + border-radius: var(--radius-panel); + background: rgba(255, 255, 255, 0.92); + box-shadow: var(--shadow-card); } -:is( - .about-page, - .advantages-page, - .services-page, - .solutions-page, - .cases-page, - .case-detail-page, - .insights-page, - .article-page - ) - :is(.featured-case, .featured-insight, .contact-details, .objective-box, .article-lead) { - border: 1px solid rgba(83, 145, 215, 0.13) !important; - border-radius: 8px !important; - box-shadow: 0 24px 56px rgba(48, 105, 171, 0.09) !important; +body .case-detail-page :is(.comparison-table-wrap, .result-table-wrap), +body .article-page .comparison-table { + max-width: 100%; + overflow-x: auto; + font-variant-numeric: tabular-nums; } +body .article-page .article-hero-inner, +body .case-detail-page .detail-hero > .page-width { + padding-top: 72px; + padding-bottom: 78px; +} + +body .article-page .article-layout { + grid-template-columns: minmax(200px, 260px) minmax(0, 760px); + justify-content: center; + gap: clamp(48px, 7vw, 96px); +} + +body .article-page .article-content { + width: 100%; + max-width: 760px; +} + +body .article-page .article-content p, +body .article-page .article-content li { + color: var(--interior-copy); + font-size: 15px; + line-height: 1.85; +} + +body .article-page .article-aside { + top: 92px; +} + +body .article-page :is(.article-lead, .draft-note, .inline-cta) { + border-radius: var(--radius-card); +} + +/* Shared reveal motion. */ .interior-reveal-ready .interior-reveal { opacity: 0; transform: translateY(24px); @@ -314,7 +664,8 @@ } @media (hover: hover) and (pointer: fine) { - :is( + body + :is( .about-page, .advantages-page, .services-page, @@ -324,21 +675,13 @@ .insights-page, .article-page ) - :is(.primary-button, .industry-plan-button):hover { - box-shadow: 0 14px 28px rgba(29, 119, 234, 0.23) !important; - transform: translateY(-3px); + :is(.primary-button, .industry-plan-button, .service-action, .story-action):hover { + box-shadow: var(--shadow-button-hover); + transform: translateY(-2px); } - :is( - .about-page, - .advantages-page, - .services-page, - .solutions-page, - .cases-page, - .case-detail-page, - .insights-page, - .article-page - ) + body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) :is( .stats-row article, .method-flow article, @@ -348,25 +691,105 @@ .decision-factor-list article, .more-industry-list button, .snapshot-grid article, - .method-list article, + .article-grid article + ):hover, + body + .case-detail-page + :is( .baseline-grid article, .question-grid article, .phase-list article, - .distribution-map article, - .outcome-grid article, - .related-grid article, - .article-grid article + .outcome-grid article ):hover { - border-color: rgba(51, 132, 229, 0.24) !important; - box-shadow: - 0 22px 50px rgba(48, 111, 184, 0.13), - inset 0 1px 0 #fff !important; + border-color: rgba(51, 132, 229, 0.24); + box-shadow: var(--shadow-card-hover); transform: translateY(-5px); } + + body .cases-page .case-collage .collage-card:hover { + box-shadow: var(--shadow-card-hover); + } +} + +@media (max-width: 1100px) { + body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .about-hero-grid, + .advantages-hero-grid, + .services-hero-grid, + .solutions-hero-grid, + .cases-hero-grid, + .insights-hero-grid + ) { + grid-template-columns: minmax(0, 0.95fr) minmax(360px, 1.05fr); + gap: 32px; + } + + body + :is(.advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .advantages-hero-copy, + .services-hero-copy, + .solutions-hero-copy, + .cases-hero-copy, + .insights-hero-copy + ) + h1 { + font-size: clamp(38px, 4.25vw, 46px); + } +} + +@media (max-width: 820px) { + body + :is( + .about-page, + .advantages-page, + .services-page, + .solutions-page, + .cases-page, + .case-detail-page, + .insights-page, + .article-page + ) + .subsite-header-inner.page-width { + width: min(calc(100% - 32px), 580px); + } + + body + :is( + .about-page, + .advantages-page, + .services-page, + .solutions-page, + .cases-page, + .case-detail-page, + .insights-page, + .article-page + ) + .subsite-menu { + display: grid; + } } @media (max-width: 760px) { :is( + .about-page, + .advantages-page, + .services-page, + .solutions-page, + .cases-page, + .case-detail-page, + .insights-page, + .article-page + ) { + width: 100%; + max-width: 100vw; + overflow-x: clip; + } + + body + :is( .about-page, .advantages-page, .services-page, @@ -377,10 +800,232 @@ .article-page ) .page-width { - width: min(100% - 32px, 580px); + width: min(calc(100% - 32px), 580px); + max-width: 100%; } - :is( + body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .about-hero, + .advantages-hero, + .services-hero, + .solutions-hero, + .cases-hero, + .insights-hero + ) { + min-height: 0; + overflow: hidden; + } + + body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .about-hero-grid, + .advantages-hero-grid, + .services-hero-grid, + .solutions-hero-grid, + .cases-hero-grid, + .insights-hero-grid + ) { + min-height: 0; + grid-template-columns: minmax(0, 1fr); + gap: 28px; + padding-top: 58px; + padding-bottom: 0; + } + + body + :is(.advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .advantages-hero-copy, + .services-hero-copy, + .solutions-hero-copy, + .cases-hero-copy, + .insights-hero-copy + ) { + width: 100%; + min-width: 0; + max-width: 100%; + } + + body + :is(.advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .advantages-hero-copy, + .services-hero-copy, + .solutions-hero-copy, + .cases-hero-copy, + .insights-hero-copy + ) + h1 { + max-width: 10.5em; + font-size: clamp(30px, 9vw, 36px); + line-height: 1.3; + overflow-wrap: break-word; + } + + body .about-page .about-hero-copy h1 { + font-size: clamp(38px, 12vw, 48px); + line-height: 1.12; + } + + body .about-page .about-hero-copy h2 { + max-width: 17em; + font-size: clamp(22px, 6.5vw, 27px); + line-height: 1.5; + } + + body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .about-hero-copy, + .advantages-hero-copy, + .services-hero-copy, + .solutions-hero-copy, + .cases-hero-copy, + .insights-hero-copy + ) + > p:nth-of-type(2) { + width: 100%; + max-width: 34em; + margin-top: 20px; + font-size: 14px; + line-height: 1.75; + } + + body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is(.page-eyebrow, .section-kicker) { + font-size: 13px; + } + + body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is(.hero-actions, .hero-advantage-links, .hero-industry-links, .hero-proof-line) { + width: 100%; + min-width: 0; + flex-wrap: wrap; + } + + body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .about-hero-visual, + .advantage-engine, + .services-hero-visual, + .solutions-hero-visual, + .case-collage, + .editorial-index + ) { + width: min(100%, 430px); + max-width: calc(100vw - 32px); + justify-self: center; + margin-right: auto; + margin-left: auto; + } + + body .insights-page .editorial-index { + min-height: 330px; + margin-bottom: 46px; + padding: 30px 26px; + } + + body .cases-page .case-collage { + min-height: 410px; + transform: none; + } + + body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .company-story-section, + .search-change-section, + .company-stats-section, + .method-section, + .timeline-section, + .team-section, + .contact-section, + .advantage-intro-section, + .advantage-system, + .comparison-section, + .value-added-section, + .proof-section, + .decision-section, + .model-deep-section, + .service-system-section, + .process-section, + .service-industries, + .difference-section, + .industry-solutions, + .more-industries-section, + .case-library-section, + .case-method-section, + .insight-library, + .whitepaper-section + ) { + padding-top: var(--section-space-mobile); + padding-bottom: 70px; + } + + body + :is(.about-page, .advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .story-heading, + .change-copy, + .company-stats-grid > header, + .center-heading, + .timeline-heading, + .team-statement, + .contact-heading, + .advantage-intro-grid > header, + .advantage-story-copy, + .value-added-heading, + .proof-layout > header, + .section-intro, + .model-heading, + .service-system-heading, + .process-heading, + .industry-list > header, + .difference-heading, + .industry-intro, + .case-library-heading, + .case-method-grid > header, + .library-heading, + .whitepaper-copy + ) + h2 { + font-size: clamp(24px, 7vw, 29px); + line-height: 1.38; + } + + body .article-page .article-layout { + grid-template-columns: minmax(0, 1fr); + gap: 34px; + padding-top: 58px; + padding-bottom: 68px; + } + + body .article-page .article-aside { + position: static; + } + + body .article-page .article-content p, + body .article-page .article-content li { + font-size: 14px; + line-height: 1.8; + } + + body + .case-detail-page + :is(.overview-section, .baseline-section, .solution-detail-section, .detail-summary-section), + body .article-page .related-section { + padding-top: 62px; + padding-bottom: 70px; + } + + body + :is( .about-page, .advantages-page, .services-page, @@ -400,6 +1045,48 @@ } } +@media (max-width: 390px) { + body + :is( + .about-page, + .advantages-page, + .services-page, + .solutions-page, + .cases-page, + .case-detail-page, + .insights-page, + .article-page + ) + .page-width, + body + :is( + .about-page, + .advantages-page, + .services-page, + .solutions-page, + .cases-page, + .case-detail-page, + .insights-page, + .article-page + ) + .subsite-header-inner.page-width { + width: calc(100% - 24px); + } + + body + :is(.advantages-page, .services-page, .solutions-page, .cases-page, .insights-page) + :is( + .advantages-hero-copy, + .services-hero-copy, + .solutions-hero-copy, + .cases-hero-copy, + .insights-hero-copy + ) + h1 { + font-size: 30px; + } +} + @media (prefers-reduced-motion: reduce) { .interior-reveal-ready .interior-reveal { opacity: 1; diff --git a/assets/css/main.css b/assets/css/main.css index 57541f0..7caae71 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -6,6 +6,37 @@ font-family: 'Source Han Sans', 'PingFang SC', 'Microsoft YaHei', Arial, sans-serif; color: #404040; background: #fff; + --color-brand-primary: #1478fb; + --color-brand-bright: #0875f9; + --color-brand-blue: #287cf9; + --color-brand-cyan: #00adf6; + --color-brand-violet: #453cff; + --gradient-action: linear-gradient(100deg, #453cff, #00adf6); + --color-text-strong: #404040; + --color-text-default: #525966; + --color-text-body: #777; + --color-text-muted: #a5a5a5; + --color-surface-blue: #edf8ff; + --color-surface-case: #eef9ff; + --color-surface-soft: #f9fbff; + --color-border-soft: #d7e9ff; + --radius-control: 5px; + --radius-small: 8px; + --radius-card: 12px; + --radius-panel: 16px; + --radius-feature: 20px; + --shadow-button: 0 8px 15px rgba(25, 106, 255, 0.16); + --shadow-button-hover: 0 11px 20px rgba(25, 106, 255, 0.24); + --shadow-card: 0 10px 24px rgba(112, 163, 255, 0.09); + --shadow-card-hover: 0 17px 32px rgba(73, 139, 234, 0.14); + --container-max: 1296px; + --page-gutter-desktop: 24px; + --page-gutter-mobile: 16px; + --section-space-desktop: 80px; + --section-space-mobile: 64px; + --duration-fast: 200ms; + --duration-normal: 320ms; + --ease-standard: cubic-bezier(0.2, 0.75, 0.2, 1); } * { box-sizing: border-box; @@ -1188,7 +1219,7 @@ a:focus-visible { .article-page ) :is(.page-eyebrow, .section-kicker) { - color: #286dae !important; + color: #286dae; font-size: 14px !important; font-weight: 700 !important; letter-spacing: 0.08em !important; @@ -1267,6 +1298,19 @@ a:focus-visible { color: var(--inner-copy) !important; font-size: 14px !important; } +.about-page .method-flow .method-marker { + color: #fff !important; +} +.about-page .center-heading .method-kicker { + width: fit-content !important; + display: block !important; + margin-right: auto !important; + margin-left: auto !important; + text-align: center !important; +} +.about-page .center-heading .method-kicker::before { + display: none !important; +} /* Advantages */ .advantages-page :is(.hero-advantage-links button, .story-action, .proof-layout header > a) { @@ -1334,7 +1378,7 @@ a:focus-visible { .industry-list > article > span, .proof-data span ) { - color: var(--inner-muted) !important; + color: var(--color-surface-soft) !important; font-size: 12px !important; } diff --git a/components/ConsultationModal.vue b/components/ConsultationModal.vue index 37f41eb..d92797b 100644 --- a/components/ConsultationModal.vue +++ b/components/ConsultationModal.vue @@ -15,7 +15,7 @@ function validate() { if (!form.value.name.trim()) nextErrors.name = '请填写您的姓名' if (!form.value.company.trim()) nextErrors.company = '请填写公司名称' if (!form.value.contact.trim()) { - nextErrors.contact = '请填写手机号或邮箱' + nextErrors.contact = '请填写手机号' } else if ( !/^(1\d{10}|[\w.+-]+@[\w.-]+\.[A-Za-z]{2,}|[\d\s()+-]{6,})$/.test(form.value.contact.trim()) ) { @@ -143,7 +143,7 @@ onBeforeUnmount(() => { v-model="form.contact" type="text" autocomplete="tel" - placeholder="手机号或工作邮箱" + placeholder="手机号" /> {{ errors.contact }} diff --git a/components/UEditor.vue b/components/UEditor.vue new file mode 100644 index 0000000..0fec805 --- /dev/null +++ b/components/UEditor.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/components/site/SiteFooter.vue b/components/site/SiteFooter.vue index 93dc42f..9d1941c 100644 --- a/components/site/SiteFooter.vue +++ b/components/site/SiteFooter.vue @@ -50,7 +50,7 @@ const sourceLabel = computed(() => {
联系我们 成都市武侯区芯通科技大厦 B 座 9 楼成都市武侯区芯通科技大厦B座9楼 联系电话:待补充 商务邮箱:待补充 diff --git a/composables/useOfficialContent.js b/composables/useOfficialContent.js new file mode 100644 index 0000000..c06cc35 --- /dev/null +++ b/composables/useOfficialContent.js @@ -0,0 +1,131 @@ +const ALL_LABEL = '全部' +const LATEST_LABEL = '最新文章' +const FALLBACK_IMAGE = '/images/lanhu/slices/home-group95-image21@2x.png' + +function pickUrl(asset) { + return asset?.url || asset?.fileUrl || asset?.filePath || '' +} + +function buildMediaMap(media = []) { + return new Map(media.map((asset) => [asset.id, asset])) +} + +function toTags(value) { + if (Array.isArray(value)) return value.filter(Boolean) + return String(value || '') + .split(/[,,、\s]+/) + .map((item) => item.trim()) + .filter(Boolean) +} + +function bySortAndTime(left, right) { + const leftSort = Number.isFinite(Number(left.sortOrder)) ? Number(left.sortOrder) : 9999 + const rightSort = Number.isFinite(Number(right.sortOrder)) ? Number(right.sortOrder) : 9999 + if (leftSort !== rightSort) return leftSort - rightSort + return String(right.updatedAt || right.publishedAt || '').localeCompare( + String(left.updatedAt || left.publishedAt || '') + ) +} + +export function useOfficialContent() { + const config = useRuntimeConfig() + const serverApiBase = `${String(config.officialApiProxyTarget || 'http://localhost:8080').replace(/\/$/, '')}/api` + const apiBase = import.meta.server ? serverApiBase : (config.public.officialApiBase || '/api') + + function fetchPublicContent(type) { + console.log(apiBase) + return $fetch('/public/content', { + baseURL: apiBase, + query: { type } + }) + } + + function fetchHomepageSections() { + return $fetch('/public/homepage/sections', { baseURL: apiBase }) + } + + function fetchPublicSiteConfig() { + return $fetch('/public/site-config', { baseURL: apiBase }) + } + + function assetUrl(assetId, mediaMap, fallback = FALLBACK_IMAGE) { + if (!assetId) return fallback + return pickUrl(mediaMap.get(assetId)) || fallback + } + + function assetAlt(assetId, mediaMap, fallback = '') { + if (!assetId) return fallback + return mediaMap.get(assetId)?.alt || fallback + } + + function normalizeCase(item, mediaMap) { + const metric = item.metricValue || '' + const metricLabel = item.metricLabel || '' + const clientName = item.isAnonymous && item.clientName ? `匿名客户:${item.clientName}` : item.clientName + + return { + ...item, + industry: item.industry || item.category || '未分类', + client: clientName || '匿名客户', + cover: item.coverUrl || assetUrl(item.coverAssetId, mediaMap), + coverAlt: item.coverAlt || assetAlt(item.coverAssetId, mediaMap, item.title), + summary: item.summary || item.description || '', + description: item.description || item.summary || '', + metric, + metricLabel, + metrics: [[metric, metricLabel], [item.secondary, '辅助成果']].filter((row) => row[0]), + secondary: item.secondary || '', + contentHtml: item.contentHtml || '' + } + } + + function normalizeArticle(item, mediaMap) { + return { + ...item, + category: item.category || '未分类', + excerpt: item.summary || item.description || '', + date: item.publishDate || item.publishedAt?.slice?.(0, 10) || '', + readingTime: item.readingTime || '约 5 分钟', + views: item.views || '0', + cover: item.coverUrl || assetUrl(item.coverAssetId, mediaMap), + coverAlt: item.coverAlt || assetAlt(item.coverAssetId, mediaMap, item.title), + featured: Boolean(item.isFeatured), + tags: toTags(item.tags), + contentHtml: item.contentHtml || '' + } + } + + function normalizeWhitepaper(item, mediaMap) { + const documentAsset = item.documentAssetId ? mediaMap.get(item.documentAssetId) : null + + return { + ...item, + category: item.category || '行业白皮书', + excerpt: item.summary || item.description || '', + cta: item.cta || '获取白皮书', + cover: item.coverUrl || assetUrl(item.coverAssetId, mediaMap), + documentUrl: item.documentUrl || pickUrl(documentAsset), + documentName: item.documentName || documentAsset?.name || item.title, + contentHtml: item.contentHtml || '' + } + } + + function categoryList(items, field = 'category', extras = []) { + const values = items.map((item) => item[field]).filter(Boolean) + return [ALL_LABEL, ...extras, ...Array.from(new Set(values))] + } + + return { + ALL_LABEL, + LATEST_LABEL, + bySortAndTime, + buildMediaMap, + fetchPublicContent, + fetchHomepageSections, + fetchPublicSiteConfig, + normalizeCase, + normalizeArticle, + normalizeWhitepaper, + categoryList + } +} diff --git a/nuxt.config.js b/nuxt.config.js index 6eefaca..fbd0534 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -1,4 +1,12 @@ +const officialApiProxyTarget = (process.env.NUXT_OFFICIAL_API_PROXY_TARGET || 'http://localhost:8080').replace(/\/$/, '') + export default defineNuxtConfig({ + runtimeConfig: { + officialApiProxyTarget, + public: { + officialApiBase: process.env.NUXT_PUBLIC_OFFICIAL_API_BASE || '/api' + } + }, future: { compatibilityVersion: 3 }, @@ -13,6 +21,14 @@ export default defineNuxtConfig({ } } }, + nitro: { + devProxy: { + '/api': { + target: `${officialApiProxyTarget}/api`, + changeOrigin: true + } + } + }, app: { head: { title: '大马棒 · 云途全域 GEO', diff --git a/pages/about.vue b/pages/about.vue index ef55272..63bafce 100644 --- a/pages/about.vue +++ b/pages/about.vue @@ -5,18 +5,44 @@ import SiteFooter from '~/components/site/SiteFooter.vue' const pageRoot = ref(null) const { openConsultation } = useConsultation() +const { fetchPublicSiteConfig } = useOfficialContent() let animationContext -useHead({ +const { data: siteConfigRows } = await useAsyncData('public-site-config-about', () => + fetchPublicSiteConfig() +) + +function parseConfigValue(value, fallback) { + if (value == null || value === '') return fallback + if (typeof value !== 'string') return value + try { + return JSON.parse(value) + } catch { + return fallback + } +} + +const siteConfig = computed(() => siteConfigRows.value || {}) +const brandConfig = computed(() => parseConfigValue(siteConfig.value.BRAND_PROFILE, {})) +const contactConfig = computed(() => + parseConfigValue(siteConfig.value.CONTACT, { + phone: '待补充', + email: '待补充', + address: '待补充' + }) +) + +useHead(() => ({ title: '关于我们|大马棒·云途全域 GEO', meta: [ { name: 'description', content: + brandConfig.value.seoDescription || '大马棒·云途全域 GEO 是聚焦 AI 搜索增长的全链路服务商,提供可见性诊断、策略规划、内容建设、信源分发与效果复盘。' } ] -}) +})) const stats = [ ['1000+', '累计服务客户'], @@ -33,7 +59,7 @@ const serviceFlow = [ ['05', '效果复盘', '持续监测覆盖率、推荐率、流量与咨询线索质量。'] ] -const timeline = [ +const fallbackTimeline = [ { year: '2023', title: '核心团队组建', @@ -58,6 +84,22 @@ const timeline = [ events: ['打通品牌曝光与营销获客闭环', '服务客户突破 1000 家,覆盖 12+ 主流行业'] } ] +const timeline = computed(() => { + const rows = parseConfigValue(siteConfig.value.ABOUT_HISTORY, []) + if (!Array.isArray(rows) || rows.length === 0) return fallbackTimeline + + return rows + .filter((item) => item.status !== 'OFFLINE') + .sort((left, right) => (Number(left.sortOrder) || 0) - (Number(right.sortOrder) || 0)) + .map((item) => ({ + year: item.year || '', + title: item.title || '', + events: + Array.isArray(item.events) && item.events.length + ? item.events + : [item.description].filter(Boolean) + })) +}) const teamCapabilities = [ ['搜索理解', '经历 PC 搜索、移动搜索到 AI 搜索的持续变化。'], @@ -211,7 +253,7 @@ onBeforeUnmount(() => animationContext?.revert())
-

全链路服务方法

+

全链路服务方法

从 AI 可见性诊断,到效果复盘

每一个环节都围绕真实业务目标推进,避免内容、媒体和转化承接各做一段。

@@ -289,20 +331,16 @@ onBeforeUnmount(() => animationContext?.revert())
-
公司名称
-
成都大马棒传媒有限公司
+
咨询电话
+
{{ contactConfig.phone || '待补充' }}
-
公司地址
-
成都市武侯区芯通科技大厦 B 座 9 楼
+
联系邮箱
+
{{ contactConfig.email || '待补充' }}
-
联系电话
-
待补充
-
-
-
商务邮箱
-
待补充
+
办公地址
+
{{ contactConfig.address || '待补充' }}
@@ -819,6 +857,15 @@ onBeforeUnmount(() => animationContext?.revert()) margin: 0 auto; text-align: center; } +.center-heading .section-kicker { + width: 100%; + display: block; + justify-content: center; + text-align: center; +} +.center-heading .section-kicker::before { + display: none; +} .center-heading > p:last-child { max-width: 640px; margin: 18px auto 0; @@ -856,7 +903,7 @@ onBeforeUnmount(() => animationContext?.revert()) place-items: center; border: 7px solid rgba(255, 255, 255, 0.92); border-radius: 50%; - color: #fff; + color: #fff !important; background: #358af0; box-shadow: 0 11px 24px rgba(51, 135, 235, 0.22); font-size: 10px; @@ -1104,10 +1151,13 @@ onBeforeUnmount(() => animationContext?.revert()) url('/images/lanhu/slices/home-group105-image31@2x.png') center / cover no-repeat; } .about-cta-content { + display: grid; + justify-items: center; padding: 75px 0; text-align: center; } .about-cta-content > p { + width: 100%; margin: 0; color: #237df0; font-size: 12px; diff --git a/pages/advantages.vue b/pages/advantages.vue index f63f75b..837ec31 100644 --- a/pages/advantages.vue +++ b/pages/advantages.vue @@ -106,6 +106,20 @@ const advantages = [ } ] +const introSequenceIcons = { + 'human-content': '/images/advantages/intro-human-content.png', + 'media-network': '/images/advantages/intro-media-network.png', + 'closed-loop': '/images/advantages/intro-closed-loop.png', + 'custom-service': '/images/advantages/intro-custom-service.png' +} + +const capabilityImages = { + 'human-content': '/images/advantages/capability-human-content.png', + 'media-network': '/images/advantages/capability-media-network.png', + 'closed-loop': '/images/advantages/capability-closed-loop.png', + 'custom-service': '/images/advantages/capability-custom-service.png' +} + const comparisonRows = [ ['核心目标', '抢排名、买点击', '蹭热度、抓眼球', '让品牌在 AI 推荐中被选中'], ['内容逻辑', '迎合搜索规则', '什么火就写什么', '真实可信,适配 AI 搜索与用户决策'], @@ -120,14 +134,14 @@ const valueAddedServices = [ title: '创始人 / 企业 IP 打造', text: '结合品牌调性与创始人特质,搭建差异化人设定位、内容脚本体系与长期更新规划,形成高辨识度的专属 IP。', items: ['人设定位', '选题与脚本', '内容生产', '长期运营'], - image: '/images/lanhu/slices/home-group96-image22@2x.png' + image: '/images/advantages/founder-ip-visual.png' }, { number: '02', title: '短视频与直播获客', text: '从短视频批量产出到直播间常态化运营,配置主播、运营、投流与中控团队,覆盖拍摄、剪辑、投放和转化。', items: ['短视频生产', '直播运营', '投流优化', '成交承接'], - image: '/images/lanhu/slices/home-group97-image23@2x.png' + image: '/images/advantages/short-video-live-visual.png' } ] @@ -239,10 +253,19 @@ onBeforeUnmount(() => animationContext?.revert())

-
+
{{ advantage.number }}{{ advantage.short }}

{{ advantage.metric }}

+
@@ -293,20 +316,10 @@ onBeforeUnmount(() => animationContext?.revert()) {{ advantage.short }}能力模型YUNTU CAPABILITY MAP
-
- {{ advantage.number }}{{ advantage.short }} -
-
- 0{{ itemIndex + 1 }}{{ item }} -
- +
{{ advantage.metric }} animationContext?.revert()) gap: 14px; } .intro-sequence article { + position: relative; min-height: 165px; - padding: 26px; + overflow: hidden; + padding: 26px 118px 26px 26px; border-radius: 14px 5px 14px 5px; background: #f2f7fd; transition: 0.24s; @@ -799,12 +814,58 @@ onBeforeUnmount(() => animationContext?.revert()) font-size: 17px; } .intro-sequence p { + position: relative; + z-index: 2; margin: 7px 0 0; color: #277fec; font-size: 20px; font-weight: 700; font-variant-numeric: tabular-nums; } +.intro-sequence span, +.intro-sequence strong { + position: relative; + z-index: 2; +} +.intro-sequence-icon { + position: absolute; + right: 16px; + bottom: 12px; + z-index: 1; + width: 108px; + max-height: 128px; + object-fit: contain; + pointer-events: none; + filter: drop-shadow(0 18px 26px rgba(40, 126, 235, 0.18)); + transition: transform 0.24s; +} +.intro-sequence article:hover .intro-sequence-icon { + transform: translate3d(0, -4px, 0) scale(1.03); +} +.intro-card--human-content .intro-sequence-icon { + right: 22px; + bottom: 24px; + width: 66px; + max-height: 86px; +} +.intro-card--media-network .intro-sequence-icon { + right: 16px; + bottom: 18px; + width: 106px; + max-height: 112px; +} +.intro-card--closed-loop .intro-sequence-icon { + right: 12px; + bottom: 41x; + width: 100px; + max-height: 128px; +} +.intro-card--custom-service .intro-sequence-icon { + right: 2px; + bottom: -4px; + width: 130px; + max-height: 132px; +} .advantage-story { scroll-margin-top: 80px; padding: 116px 0 132px; @@ -919,20 +980,25 @@ onBeforeUnmount(() => animationContext?.revert()) letter-spacing: 0.1em; } .story-action { + display: inline-flex; + min-width: 164px; + min-height: 46px; margin-top: 24px; - padding: 0 0 5px; - border-bottom: 1px solid #8eb9e9; - color: #247be8; - background: transparent; + padding: 0 26px; + align-items: center; + justify-content: center; + gap: 9px; + white-space: nowrap; font-size: 12px; font-weight: 600; } -.story-action b { - margin-left: 8px; - transition: margin 0.2s; +.story-action :deep(.app-icon) { + width: 1em; + height: 1em; + transition: transform 0.2s; } -.story-action:hover b { - margin-left: 13px; +.story-action:hover :deep(.app-icon) { + transform: translateX(4px); } .advantage-story-visual { position: relative; @@ -978,110 +1044,14 @@ onBeforeUnmount(() => animationContext?.revert()) position: absolute; top: 52%; left: 50%; - width: 410px; - height: 360px; + width: min(88%, 460px); + height: 400px; transform: translate(-50%, -50%); } -.capability-map::before { - position: absolute; - top: 50%; - left: 50%; - width: 280px; - height: 280px; - content: ''; - border: 1px dashed rgba(55, 137, 232, 0.34); - border-radius: 50%; - transform: translate(-50%, -50%); -} -.capability-center { - position: absolute; - z-index: 3; - top: 50%; - left: 50%; - width: 142px; - height: 142px; - display: grid; - place-content: center; - justify-items: center; - border: 11px solid rgba(255, 255, 255, 0.6); - border-radius: 50%; - color: #fff; - background: linear-gradient(145deg, #3185ee, #50bce7); - box-shadow: 0 22px 42px rgba(36, 123, 225, 0.28); - transform: translate(-50%, -50%); -} -.capability-center small { - font-size: 9px; - opacity: 0.7; -} -.capability-center strong { - margin-top: 5px; - font-size: 17px; -} -.capability-node { - position: absolute; - z-index: 3; - min-width: 110px; - padding: 12px 14px; - border: 1px solid rgba(255, 255, 255, 0.92); - border-radius: 7px; - color: #4e7198; - background: rgba(255, 255, 255, 0.84); - box-shadow: 0 12px 25px rgba(54, 113, 185, 0.11); - text-align: center; - backdrop-filter: blur(8px); -} -.capability-node span { - display: block; - color: #91a9c3; - font-size: 8px; -} -.capability-node strong { - display: block; - margin-top: 3px; - font-size: 10px; -} -.capability-node-1 { - top: 0; - left: 50%; - transform: translateX(-50%); -} -.capability-node-2 { - top: 50%; - right: 0; - transform: translateY(-50%); -} -.capability-node-3 { - bottom: 0; - left: 50%; - transform: translateX(-50%); -} -.capability-node-4 { - top: 50%; - left: 0; - transform: translateY(-50%); -} -.capability-line { - position: absolute; - z-index: 1; - top: 50%; - left: 50%; - width: 2px; - height: 135px; - background: linear-gradient(#5aa1ed, transparent); - transform-origin: top; -} -.line-1 { - transform: rotate(180deg); -} -.line-2 { - transform: rotate(90deg); -} -.line-3 { - transform: rotate(0); -} -.line-4 { - transform: rotate(-90deg); +.capability-map img { + width: 100%; + height: 100%; + object-fit: contain; } .capability-metric { position: absolute; @@ -1140,7 +1110,7 @@ onBeforeUnmount(() => animationContext?.revert()) font-size: 11px; } .comparison-table-wrap thead th:last-child { - color: #fff; + color: #fff !important; background: #3187ee; } .comparison-table-wrap thead span { @@ -1193,17 +1163,26 @@ onBeforeUnmount(() => animationContext?.revert()) } .value-added-image { position: relative; + display: grid; + place-items: center; overflow: hidden; - background: #e5f1ff; + background: + radial-gradient(circle at 28% 20%, rgba(255, 255, 255, 0.86) 0, rgba(255, 255, 255, 0) 31%), + radial-gradient(circle at 72% 32%, rgba(96, 207, 255, 0.36) 0, rgba(96, 207, 255, 0) 34%), + linear-gradient(135deg, #edf7ff 0%, #d8efff 48%, #f2edff 100%); } .value-added-image img { - width: 100%; - height: 100%; + position: relative; + z-index: 1; + width: min(108%, 560px); + height: min(92%, 370px); display: block; - object-fit: cover; + object-fit: contain; + filter: drop-shadow(0 24px 34px rgba(34, 122, 229, 0.18)); } .value-added-image > span { position: absolute; + z-index: 2; top: 24px; left: 24px; display: grid; @@ -1327,10 +1306,13 @@ onBeforeUnmount(() => animationContext?.revert()) url('/images/lanhu/slices/home-group105-image31@2x.png') center / cover no-repeat; } .advantages-cta-content { + display: grid; + justify-items: center; padding: 75px 0; text-align: center; } .advantages-cta-content > p { + width: 100%; margin: 0; color: #237df0; font-size: 12px; @@ -1442,6 +1424,31 @@ onBeforeUnmount(() => animationContext?.revert()) } .intro-sequence article { min-height: 140px; + padding-right: 118px; + } + .intro-sequence-icon { + right: 14px; + bottom: 10px; + width: 96px; + max-height: 106px; + } + .intro-card--human-content .intro-sequence-icon { + right: 20px; + bottom: 20px; + width: 68px; + } + .intro-card--media-network .intro-sequence-icon { + right: 14px; + bottom: 16px; + width: 94px; + max-height: 100px; + } + .intro-card--closed-loop .intro-sequence-icon, + .intro-card--custom-service .intro-sequence-icon { + right: 10px; + bottom: 0; + width: 108px; + max-height: 112px; } .advantage-story-copy h2 { font-size: 31px; @@ -1450,25 +1457,9 @@ onBeforeUnmount(() => animationContext?.revert()) min-height: 430px; } .capability-map { - width: 310px; + width: min(92%, 320px); height: 280px; } - .capability-map::before { - width: 205px; - height: 205px; - } - .capability-center { - width: 105px; - height: 105px; - border-width: 8px; - } - .capability-node { - min-width: 83px; - padding: 9px; - } - .capability-line { - height: 100px; - } .capability-metric { right: 18px; bottom: 17px; @@ -1486,6 +1477,10 @@ onBeforeUnmount(() => animationContext?.revert()) .value-added-image { min-height: 260px; } + .value-added-image img { + width: min(112%, 430px); + height: 230px; + } .value-added-copy { padding: 32px 23px; } diff --git a/pages/cases/[slug].vue b/pages/cases/[slug].vue index c68aa96..3b16b89 100644 --- a/pages/cases/[slug].vue +++ b/pages/cases/[slug].vue @@ -1,307 +1,262 @@ diff --git a/pages/insights/index.vue b/pages/insights/index.vue index d989e6d..8ade118 100644 --- a/pages/insights/index.vue +++ b/pages/insights/index.vue @@ -1,12 +1,43 @@