- {foreach $kehu['data'] as $item}
-
-
![{$item['name']} {$item['name']}]({$item['image']})
+
+
+
+
+
+
+
+
全渠道商城
+
商城
+
B2B2C 多商户入驻、社交裂变营销与全域私域流量精细化运营系统。
+
+
+
毫秒级收银
+
收银
+
软硬件一体智能收银系统,聚合支付秒级核销,断网离线平稳记账。
+
+
+
业财一体化
+
进销存
+
采购、销售、仓储与财务全链路打通,多仓实时调拨与智能补货预警。
+
+
+
多租户平台
+
SaaS版本
+
云原生高可用多租户架构,开箱即用免运维,弹性扩展金融级容灾。
+
- {/foreach}
-
+
+
+
+
+
+
+
+
商贸流通
+
快消集团全渠道分销订货中台
+
+
+
+
连锁零售
+
全国餐饮连锁收银与门店一体化
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 纳海川团队展现了极强的架构能力与业务敏锐度,为我们重构的订货中台平稳抗住大促峰值压力,库存对账零误差。
+
+
张总 · 供应链集团技术负责人
+
+
+
+ 收银与门店进销存系统在 300 家连锁门店上线后运行极为稳定,离线记账功能解决了门店断网的大隐患。
+
+
李总 · 连锁餐饮运营副总裁
+
+
+
+
+
+
+
+
+
{/block}
-
-{block name="js"}
-
-{/block}
-
-
diff --git a/public/assets/addons/official/css/modern_nhc.css b/public/assets/addons/official/css/modern_nhc.css
new file mode 100644
index 0000000..c482338
--- /dev/null
+++ b/public/assets/addons/official/css/modern_nhc.css
@@ -0,0 +1,1187 @@
+/**
+ * 纳海川官方网站 - 现代中式浅色高端专业风格规范 CSS
+ * 色彩体系:
+ * 背景: #FFFFFF / #F8FAFC / #F1F5F9
+ * 主色: #2563EB (科技蓝)
+ * 辅助: #06B6D4 (青) / #7C3AED (紫)
+ * 文字: #0F172A (主标题) / #475569 (正文) / #94A3B8 (辅弱)
+ * 印章红: #DC2626 (朱砂)
+ * 字体:
+ * 标题宋体: "Noto Serif SC", "Source Han Serif SC", "SimSun", "Songti SC", serif
+ * 正文黑体: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif
+ * 网格: 12 列网格,1280px 最大宽度,圆角 4px - 6px,细线边框,水墨抽象底纹,窗棂格构架
+ */
+
+:root {
+ --bg-primary: #FFFFFF;
+ --bg-secondary: #F8FAFC;
+ --bg-tertiary: #F1F5F9;
+ --primary: #2563EB;
+ --primary-hover: #1D4ED8;
+ --primary-light: #EFF6FF;
+ --accent-cyan: #06B6D4;
+ --accent-purple: #7C3AED;
+ --seal-red: #DC2626;
+ --seal-red-bg: #FEF2F2;
+ --text-primary: #0F172A;
+ --text-secondary: #475569;
+ --text-muted: #94A3B8;
+ --border-color: #E2E8F0;
+ --border-subtle: #F1F5F9;
+ --radius-sm: 4px;
+ --radius-md: 6px;
+ --shadow-subtle: 0 1px 3px rgba(15, 23, 42, 0.05);
+ --shadow-card: 0 4px 20px -2px rgba(15, 23, 42, 0.06);
+ --shadow-hover: 0 12px 28px -4px rgba(37, 99, 235, 0.08);
+ --font-serif: "Noto Serif SC", "Source Han Serif SC", "SimSun", "Songti SC", serif;
+ --font-sans: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
+}
+
+/* 基础重置与重构 */
+* {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+body.body_index {
+ background-color: var(--bg-primary);
+ color: var(--text-secondary);
+ font-family: var(--font-sans);
+ font-size: 15px;
+ line-height: 1.7;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ overflow-x: hidden;
+}
+
+a {
+ color: inherit;
+ text-decoration: none;
+ transition: all 0.25s ease;
+}
+
+img {
+ max-width: 100%;
+ height: auto;
+ display: block;
+}
+
+/* 1280px 12 列网格容器 */
+.nhc-container {
+ max-width: 1280px;
+ margin: 0 auto;
+ padding: 0 24px;
+ width: 100%;
+}
+
+/* 现代中式印章徽记 */
+.nhc-seal {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 2px 8px;
+ border: 1px solid var(--seal-red);
+ background-color: var(--seal-red-bg);
+ color: var(--seal-red);
+ font-family: var(--font-serif);
+ font-size: 12px;
+ letter-spacing: 2px;
+ border-radius: var(--radius-sm);
+ font-weight: 600;
+ user-select: none;
+}
+
+.nhc-seal-square {
+ width: 32px;
+ height: 32px;
+ padding: 0;
+ border: 1.5px solid var(--seal-red);
+ font-size: 11px;
+ line-height: 1.1;
+ text-align: center;
+ writing-mode: vertical-rl;
+ letter-spacing: 1px;
+}
+
+/* 现代中式窗棂格与细线装饰 */
+.nhc-lattice-pattern {
+ background-image:
+ linear-gradient(to right, rgba(226, 232, 240, 0.4) 1px, transparent 1px),
+ linear-gradient(to bottom, rgba(226, 232, 240, 0.4) 1px, transparent 1px);
+ background-size: 40px 40px;
+}
+
+.nhc-section-header {
+ text-align: center;
+ margin-bottom: 56px;
+ position: relative;
+}
+
+.nhc-section-tag {
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ margin-bottom: 12px;
+}
+
+.nhc-section-tag .nhc-tag-text {
+ font-size: 13px;
+ letter-spacing: 3px;
+ color: var(--primary);
+ font-weight: 600;
+ text-transform: uppercase;
+}
+
+.nhc-section-title {
+ font-family: var(--font-serif);
+ font-size: 34px;
+ font-weight: 700;
+ color: var(--text-primary);
+ letter-spacing: 1px;
+ margin-bottom: 16px;
+ position: relative;
+ display: inline-block;
+}
+
+.nhc-section-desc {
+ max-width: 680px;
+ margin: 0 auto;
+ color: var(--text-secondary);
+ font-size: 16px;
+ line-height: 1.8;
+}
+
+.nhc-line-divider {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 12px;
+ margin: 16px auto 0;
+ width: 140px;
+}
+
+.nhc-line-divider::before,
+.nhc-line-divider::after {
+ content: "";
+ height: 1px;
+ flex: 1;
+ background-color: var(--border-color);
+}
+
+.nhc-line-divider span {
+ width: 6px;
+ height: 6px;
+ transform: rotate(45deg);
+ background-color: var(--primary);
+}
+
+/* 导航栏设计 */
+.nhc-header {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ z-index: 1000;
+ background: rgba(255, 255, 255, 0.95);
+ backdrop-filter: blur(12px);
+ border-bottom: 1px solid var(--border-color);
+ transition: all 0.3s ease;
+}
+
+.nhc-nav-inner {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: 76px;
+}
+
+.nhc-logo {
+ display: flex;
+ align-items: center;
+ gap: 14px;
+}
+
+.nhc-logo img {
+ height: 38px;
+ width: auto;
+}
+
+.nhc-logo-brand {
+ display: flex;
+ flex-direction: column;
+}
+
+.nhc-logo-text {
+ font-family: var(--font-serif);
+ font-size: 20px;
+ font-weight: 700;
+ color: var(--text-primary);
+ letter-spacing: 1.5px;
+ line-height: 1.2;
+}
+
+.nhc-logo-sub {
+ font-size: 10px;
+ color: var(--text-muted);
+ letter-spacing: 2px;
+ text-transform: uppercase;
+}
+
+.nhc-nav-menu {
+ display: flex;
+ align-items: center;
+ gap: 36px;
+ list-style: none;
+}
+
+.nhc-nav-link {
+ font-size: 15px;
+ font-weight: 500;
+ color: var(--text-secondary);
+ position: relative;
+ padding: 8px 0;
+ transition: color 0.2s;
+}
+
+.nhc-nav-link:hover,
+.nhc-nav-link.active {
+ color: var(--primary);
+}
+
+.nhc-nav-link::after {
+ content: "";
+ position: absolute;
+ bottom: 0;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 0;
+ height: 2px;
+ background: var(--primary);
+ transition: width 0.25s ease;
+ border-radius: 1px;
+}
+
+.nhc-nav-link:hover::after,
+.nhc-nav-link.active::after {
+ width: 100%;
+}
+
+.nhc-nav-actions {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+}
+
+.nhc-btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ padding: 10px 22px;
+ border-radius: var(--radius-sm);
+ font-size: 14px;
+ font-weight: 500;
+ cursor: pointer;
+ transition: all 0.25s ease;
+ border: 1px solid transparent;
+}
+
+.nhc-btn-primary {
+ background-color: var(--primary);
+ color: #FFFFFF;
+ box-shadow: 0 2px 8px rgba(37, 99, 235, 0.25);
+}
+
+.nhc-btn-primary:hover {
+ background-color: var(--primary-hover);
+ color: #FFFFFF;
+ box-shadow: 0 4px 14px rgba(37, 99, 235, 0.35);
+ transform: translateY(-1px);
+}
+
+.nhc-btn-outline {
+ border-color: var(--border-color);
+ background-color: var(--bg-primary);
+ color: var(--text-primary);
+}
+
+.nhc-btn-outline:hover {
+ border-color: var(--primary);
+ color: var(--primary);
+ background-color: var(--primary-light);
+}
+
+.nhc-btn-sm {
+ padding: 8px 16px;
+ font-size: 13px;
+}
+
+.nhc-btn-lg {
+ padding: 14px 32px;
+ font-size: 16px;
+}
+
+/* 首屏 (Hero Section) */
+.nhc-hero {
+ padding-top: 150px;
+ padding-bottom: 90px;
+ position: relative;
+ background: radial-gradient(circle at 50% 10%, rgba(37, 99, 235, 0.05) 0%, rgba(255, 255, 255, 0) 70%),
+ linear-gradient(180deg, #FFFFFF 0%, #F8FAFC 100%);
+ border-bottom: 1px solid var(--border-color);
+ overflow: hidden;
+}
+
+.nhc-hero-content {
+ text-align: center;
+ max-width: 960px;
+ margin: 0 auto;
+ position: relative;
+ z-index: 2;
+}
+
+.nhc-hero-badge {
+ display: inline-flex;
+ align-items: center;
+ gap: 10px;
+ background: #FFFFFF;
+ border: 1px solid var(--border-color);
+ padding: 6px 16px;
+ border-radius: var(--radius-sm);
+ margin-bottom: 24px;
+ box-shadow: var(--shadow-subtle);
+}
+
+.nhc-hero-badge-text {
+ font-size: 13px;
+ color: var(--text-secondary);
+ font-weight: 500;
+}
+
+.nhc-hero-title {
+ font-family: var(--font-serif);
+ font-size: 52px;
+ font-weight: 700;
+ color: var(--text-primary);
+ line-height: 1.25;
+ letter-spacing: 2px;
+ margin-bottom: 24px;
+}
+
+.nhc-hero-title span.highlight {
+ color: var(--primary);
+ position: relative;
+ display: inline-block;
+}
+
+.nhc-hero-subtitle {
+ font-size: 18px;
+ color: var(--text-secondary);
+ line-height: 1.8;
+ max-width: 780px;
+ margin: 0 auto 36px;
+}
+
+.nhc-hero-cta {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 16px;
+ margin-bottom: 64px;
+}
+
+.nhc-hero-metrics {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 24px;
+ background: #FFFFFF;
+ border: 1px solid var(--border-color);
+ border-radius: var(--radius-md);
+ padding: 28px 24px;
+ box-shadow: var(--shadow-subtle);
+}
+
+.nhc-metric-item {
+ text-align: center;
+ position: relative;
+}
+
+.nhc-metric-item:not(:last-child)::after {
+ content: "";
+ position: absolute;
+ right: 0;
+ top: 15%;
+ height: 70%;
+ width: 1px;
+ background: var(--border-color);
+}
+
+.nhc-metric-val {
+ font-family: var(--font-sans);
+ font-size: 36px;
+ font-weight: 700;
+ color: var(--primary);
+ line-height: 1.1;
+ margin-bottom: 6px;
+}
+
+.nhc-metric-val sub {
+ font-size: 18px;
+ font-weight: 600;
+ bottom: 0;
+}
+
+.nhc-metric-label {
+ font-size: 13px;
+ color: var(--text-secondary);
+ font-weight: 500;
+ letter-spacing: 0.5px;
+}
+
+/* 核心服务板块 (Services Section) */
+.nhc-services {
+ padding: 96px 0;
+ background-color: var(--bg-primary);
+ position: relative;
+}
+
+.nhc-services-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 28px;
+}
+
+.nhc-service-card {
+ background: #FFFFFF;
+ border: 1px solid var(--border-color);
+ border-radius: var(--radius-md);
+ padding: 40px 32px;
+ position: relative;
+ transition: all 0.3s ease;
+ overflow: hidden;
+ box-shadow: var(--shadow-subtle);
+}
+
+.nhc-service-card::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 3px;
+ background: transparent;
+ transition: background 0.3s ease;
+}
+
+.nhc-service-card:hover {
+ transform: translateY(-4px);
+ box-shadow: var(--shadow-hover);
+ border-color: #BFDBFE;
+}
+
+.nhc-service-card:hover::before {
+ background: var(--primary);
+}
+
+.nhc-service-watermark {
+ position: absolute;
+ top: 20px;
+ right: 24px;
+ font-family: var(--font-serif);
+ font-size: 48px;
+ color: rgba(226, 232, 240, 0.4);
+ font-weight: 700;
+ line-height: 1;
+ user-select: none;
+}
+
+.nhc-service-icon {
+ width: 54px;
+ height: 54px;
+ background: var(--primary-light);
+ border: 1px solid rgba(37, 99, 235, 0.15);
+ border-radius: var(--radius-sm);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--primary);
+ margin-bottom: 24px;
+}
+
+.nhc-service-title {
+ font-family: var(--font-serif);
+ font-size: 22px;
+ font-weight: 700;
+ color: var(--text-primary);
+ margin-bottom: 12px;
+}
+
+.nhc-service-desc {
+ font-size: 14px;
+ color: var(--text-secondary);
+ line-height: 1.7;
+ margin-bottom: 24px;
+}
+
+.nhc-service-list {
+ list-style: none;
+ border-top: 1px dashed var(--border-color);
+ padding-top: 20px;
+ margin-bottom: 24px;
+}
+
+.nhc-service-item {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ font-size: 13px;
+ color: var(--text-secondary);
+ margin-bottom: 10px;
+}
+
+.nhc-service-item::before {
+ content: "";
+ width: 4px;
+ height: 4px;
+ background: var(--primary);
+ border-radius: 50%;
+}
+
+.nhc-service-link {
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+ font-size: 13px;
+ font-weight: 600;
+ color: var(--primary);
+}
+
+.nhc-service-link:hover {
+ gap: 10px;
+}
+
+/* 核心产品矩阵 (Products Section) */
+.nhc-products {
+ padding: 96px 0;
+ background-color: var(--bg-secondary);
+ border-top: 1px solid var(--border-color);
+ border-bottom: 1px solid var(--border-color);
+ position: relative;
+}
+
+.nhc-products-grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 24px;
+}
+
+.nhc-product-card {
+ background: #FFFFFF;
+ border: 1px solid var(--border-color);
+ border-radius: var(--radius-md);
+ padding: 32px 24px;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ transition: all 0.3s ease;
+ box-shadow: var(--shadow-subtle);
+ position: relative;
+}
+
+.nhc-product-card:hover {
+ transform: translateY(-4px);
+ border-color: #BFDBFE;
+ box-shadow: var(--shadow-hover);
+}
+
+.nhc-product-header {
+ margin-bottom: 20px;
+}
+
+.nhc-product-type-badge {
+ display: inline-block;
+ font-size: 11px;
+ font-weight: 600;
+ padding: 2px 8px;
+ border-radius: var(--radius-sm);
+ background: var(--bg-tertiary);
+ color: var(--primary);
+ margin-bottom: 12px;
+ letter-spacing: 0.5px;
+}
+
+.nhc-product-name {
+ font-family: var(--font-serif);
+ font-size: 20px;
+ font-weight: 700;
+ color: var(--text-primary);
+ margin-bottom: 8px;
+}
+
+.nhc-product-desc {
+ font-size: 13px;
+ color: var(--text-secondary);
+ line-height: 1.6;
+}
+
+.nhc-product-features {
+ list-style: none;
+ margin: 18px 0;
+ padding: 16px 0;
+ border-top: 1px solid var(--border-color);
+ border-bottom: 1px solid var(--border-color);
+}
+
+.nhc-product-feat-item {
+ font-size: 12px;
+ color: var(--text-secondary);
+ margin-bottom: 8px;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+}
+
+.nhc-product-feat-item svg {
+ color: var(--accent-cyan);
+ flex-shrink: 0;
+}
+
+.nhc-product-footer {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-top: auto;
+}
+
+.nhc-product-tag {
+ font-size: 11px;
+ color: var(--text-muted);
+}
+
+/* 标杆案例 (Cases Section) */
+.nhc-cases {
+ padding: 96px 0;
+ background-color: var(--bg-primary);
+ position: relative;
+}
+
+.nhc-cases-grid {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ gap: 28px;
+}
+
+.nhc-case-card {
+ background: #FFFFFF;
+ border: 1px solid var(--border-color);
+ border-radius: var(--radius-md);
+ padding: 36px 32px;
+ box-shadow: var(--shadow-subtle);
+ transition: all 0.3s ease;
+ position: relative;
+}
+
+.nhc-case-card:hover {
+ border-color: #BFDBFE;
+ box-shadow: var(--shadow-card);
+ transform: translateY(-3px);
+}
+
+.nhc-case-meta {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 16px;
+}
+
+.nhc-case-category {
+ font-size: 12px;
+ font-weight: 600;
+ color: var(--primary);
+ background: var(--primary-light);
+ padding: 3px 10px;
+ border-radius: var(--radius-sm);
+}
+
+.nhc-case-title {
+ font-family: var(--font-serif);
+ font-size: 20px;
+ font-weight: 700;
+ color: var(--text-primary);
+ margin-bottom: 16px;
+ line-height: 1.4;
+}
+
+.nhc-case-details {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+ margin-bottom: 24px;
+}
+
+.nhc-case-detail-row {
+ display: flex;
+ font-size: 13px;
+ line-height: 1.6;
+}
+
+.nhc-case-detail-label {
+ width: 72px;
+ flex-shrink: 0;
+ color: var(--text-muted);
+ font-weight: 500;
+}
+
+.nhc-case-detail-content {
+ color: var(--text-secondary);
+}
+
+.nhc-case-metrics-bar {
+ background: var(--bg-secondary);
+ border: 1px solid var(--border-color);
+ border-radius: var(--radius-sm);
+ padding: 14px 20px;
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+}
+
+.nhc-case-metric-box {
+ text-align: center;
+}
+
+.nhc-case-metric-num {
+ font-size: 22px;
+ font-weight: 700;
+ color: var(--primary);
+ line-height: 1;
+}
+
+.nhc-case-metric-sub {
+ font-size: 11px;
+ color: var(--text-muted);
+ margin-top: 4px;
+}
+
+/* 标准化交付流程 (Process Section) */
+.nhc-process {
+ padding: 96px 0;
+ background-color: var(--bg-secondary);
+ border-top: 1px solid var(--border-color);
+ border-bottom: 1px solid var(--border-color);
+ position: relative;
+}
+
+.nhc-process-flow {
+ display: grid;
+ grid-template-columns: repeat(5, 1fr);
+ gap: 20px;
+ position: relative;
+}
+
+.nhc-process-card {
+ background: #FFFFFF;
+ border: 1px solid var(--border-color);
+ border-radius: var(--radius-md);
+ padding: 28px 20px;
+ text-align: center;
+ position: relative;
+ transition: all 0.3s ease;
+ box-shadow: var(--shadow-subtle);
+}
+
+.nhc-process-card:hover {
+ transform: translateY(-4px);
+ border-color: var(--primary);
+ box-shadow: var(--shadow-card);
+}
+
+.nhc-process-step-num {
+ width: 36px;
+ height: 36px;
+ margin: 0 auto 16px;
+ border-radius: var(--radius-sm);
+ background: var(--primary-light);
+ color: var(--primary);
+ font-weight: 700;
+ font-size: 14px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid rgba(37, 99, 235, 0.2);
+}
+
+.nhc-process-step-title {
+ font-family: var(--font-serif);
+ font-size: 17px;
+ font-weight: 700;
+ color: var(--text-primary);
+ margin-bottom: 8px;
+}
+
+.nhc-process-step-desc {
+ font-size: 12px;
+ color: var(--text-secondary);
+ line-height: 1.6;
+}
+
+/* 客户评价与合作伙伴 (Testimonials & Clients) */
+.nhc-testimonials {
+ padding: 96px 0;
+ background-color: var(--bg-primary);
+ position: relative;
+}
+
+.nhc-testimonials-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 28px;
+ margin-bottom: 56px;
+}
+
+.nhc-testimonial-card {
+ background: #FFFFFF;
+ border: 1px solid var(--border-color);
+ border-radius: var(--radius-md);
+ padding: 32px 28px;
+ box-shadow: var(--shadow-subtle);
+ position: relative;
+ transition: all 0.3s ease;
+}
+
+.nhc-testimonial-card:hover {
+ border-color: #BFDBFE;
+ box-shadow: var(--shadow-card);
+}
+
+.nhc-quote-icon {
+ font-family: var(--font-serif);
+ font-size: 36px;
+ color: #BFDBFE;
+ line-height: 1;
+ margin-bottom: 12px;
+}
+
+.nhc-testimonial-text {
+ font-size: 14px;
+ color: var(--text-secondary);
+ line-height: 1.8;
+ margin-bottom: 20px;
+}
+
+.nhc-testimonial-author {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ border-top: 1px solid var(--border-color);
+ padding-top: 16px;
+}
+
+.nhc-author-avatar {
+ width: 40px;
+ height: 40px;
+ border-radius: var(--radius-sm);
+ background: var(--bg-tertiary);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-family: var(--font-serif);
+ font-weight: 700;
+ color: var(--primary);
+ border: 1px solid var(--border-color);
+}
+
+.nhc-author-info {
+ display: flex;
+ flex-direction: column;
+}
+
+.nhc-author-name {
+ font-size: 14px;
+ font-weight: 600;
+ color: var(--text-primary);
+}
+
+.nhc-author-role {
+ font-size: 12px;
+ color: var(--text-muted);
+}
+
+/* 合作客户 Logo 墙 */
+.nhc-clients-grid {
+ display: grid;
+ grid-template-columns: repeat(6, 1fr);
+ gap: 16px;
+}
+
+.nhc-client-item {
+ height: 72px;
+ background: var(--bg-secondary);
+ border: 1px solid var(--border-color);
+ border-radius: var(--radius-sm);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 12px;
+ font-family: var(--font-serif);
+ font-size: 13px;
+ color: var(--text-secondary);
+ font-weight: 600;
+ letter-spacing: 1px;
+ transition: all 0.2s ease;
+}
+
+.nhc-client-item:hover {
+ background: #FFFFFF;
+ border-color: var(--primary);
+ color: var(--primary);
+}
+
+/* 底部 CTA 板块 */
+.nhc-cta {
+ padding: 80px 0;
+ background: linear-gradient(135deg, #1E3A8A 0%, #1E40AF 50%, #2563EB 100%);
+ color: #FFFFFF;
+ position: relative;
+ overflow: hidden;
+}
+
+.nhc-cta::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-image:
+ linear-gradient(to right, rgba(255, 255, 255, 0.05) 1px, transparent 1px),
+ linear-gradient(to bottom, rgba(255, 255, 255, 0.05) 1px, transparent 1px);
+ background-size: 32px 32px;
+ pointer-events: none;
+}
+
+.nhc-cta-inner {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ position: relative;
+ z-index: 2;
+ gap: 40px;
+}
+
+.nhc-cta-content {
+ max-width: 680px;
+}
+
+.nhc-cta-title {
+ font-family: var(--font-serif);
+ font-size: 36px;
+ font-weight: 700;
+ line-height: 1.3;
+ margin-bottom: 16px;
+ letter-spacing: 1px;
+}
+
+.nhc-cta-desc {
+ font-size: 16px;
+ color: rgba(255, 255, 255, 0.85);
+ line-height: 1.7;
+}
+
+.nhc-cta-buttons {
+ display: flex;
+ align-items: center;
+ gap: 16px;
+ flex-shrink: 0;
+}
+
+.nhc-cta-btn-light {
+ background-color: #FFFFFF;
+ color: var(--primary);
+ border: 1px solid #FFFFFF;
+}
+
+.nhc-cta-btn-light:hover {
+ background-color: var(--bg-secondary);
+ color: var(--primary-hover);
+ transform: translateY(-2px);
+ box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
+}
+
+.nhc-cta-btn-ghost {
+ border-color: rgba(255, 255, 255, 0.4);
+ color: #FFFFFF;
+ background: transparent;
+}
+
+.nhc-cta-btn-ghost:hover {
+ border-color: #FFFFFF;
+ background: rgba(255, 255, 255, 0.1);
+}
+
+/* 现代化专业页脚 (Footer) */
+.nhc-footer {
+ background-color: #0F172A;
+ color: #94A3B8;
+ padding: 80px 0 32px;
+ border-top: 1px solid #1E293B;
+ font-size: 14px;
+}
+
+.nhc-footer-grid {
+ display: grid;
+ grid-template-columns: 2fr 1fr 1fr 1fr 1.5fr;
+ gap: 40px;
+ margin-bottom: 56px;
+}
+
+.nhc-footer-brand-title {
+ font-family: var(--font-serif);
+ font-size: 20px;
+ color: #FFFFFF;
+ font-weight: 700;
+ letter-spacing: 1px;
+ margin-bottom: 12px;
+}
+
+.nhc-footer-brand-desc {
+ font-size: 13px;
+ line-height: 1.8;
+ margin-bottom: 20px;
+ color: #64748B;
+}
+
+.nhc-footer-col-title {
+ font-family: var(--font-serif);
+ font-size: 15px;
+ color: #FFFFFF;
+ font-weight: 600;
+ margin-bottom: 18px;
+ letter-spacing: 1px;
+}
+
+.nhc-footer-links {
+ list-style: none;
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+}
+
+.nhc-footer-link {
+ color: #94A3B8;
+ font-size: 13px;
+ transition: color 0.2s;
+}
+
+.nhc-footer-link:hover {
+ color: #FFFFFF;
+}
+
+.nhc-footer-contact-info {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+ font-size: 13px;
+}
+
+.nhc-footer-bottom {
+ border-top: 1px solid #1E293B;
+ padding-top: 28px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ font-size: 12px;
+ color: #64748B;
+}
+
+.nhc-footer-bottom a {
+ color: #64748B;
+}
+
+.nhc-footer-bottom a:hover {
+ color: #94A3B8;
+}
+
+/* 响应式适配媒体查询 */
+@media (max-width: 1200px) {
+ .nhc-products-grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+ .nhc-footer-grid {
+ grid-template-columns: 2fr repeat(3, 1fr);
+ }
+}
+
+@media (max-width: 1024px) {
+ .nhc-hero-title {
+ font-size: 42px;
+ }
+ .nhc-services-grid {
+ grid-template-columns: 1fr;
+ gap: 20px;
+ }
+ .nhc-process-flow {
+ grid-template-columns: repeat(3, 1fr);
+ }
+ .nhc-clients-grid {
+ grid-template-columns: repeat(3, 1fr);
+ }
+ .nhc-testimonials-grid {
+ grid-template-columns: 1fr;
+ }
+ .nhc-cta-inner {
+ flex-direction: column;
+ text-align: center;
+ }
+ .nhc-footer-grid {
+ grid-template-columns: 1fr 1fr;
+ }
+}
+
+@media (max-width: 768px) {
+ .nhc-nav-menu,
+ .nhc-nav-actions .nhc-btn {
+ display: none;
+ }
+ .nhc-hero-title {
+ font-size: 32px;
+ }
+ .nhc-hero-subtitle {
+ font-size: 15px;
+ }
+ .nhc-hero-metrics {
+ grid-template-columns: repeat(2, 1fr);
+ gap: 16px;
+ }
+ .nhc-metric-item:not(:last-child)::after {
+ display: none;
+ }
+ .nhc-products-grid {
+ grid-template-columns: 1fr;
+ }
+ .nhc-cases-grid {
+ grid-template-columns: 1fr;
+ }
+ .nhc-process-flow {
+ grid-template-columns: 1fr;
+ }
+ .nhc-clients-grid {
+ grid-template-columns: repeat(2, 1fr);
+ }
+ .nhc-footer-grid {
+ grid-template-columns: 1fr;
+ }
+ .nhc-footer-bottom {
+ flex-direction: column;
+ gap: 12px;
+ text-align: center;
+ }
+ .nhc-cta-buttons {
+ flex-direction: column;
+ width: 100%;
+ }
+ .nhc-cta-buttons .nhc-btn {
+ width: 100%;
+ }
+}
diff --git a/tests/HomepageDesignTest.php b/tests/HomepageDesignTest.php
new file mode 100644
index 0000000..d789f46
--- /dev/null
+++ b/tests/HomepageDesignTest.php
@@ -0,0 +1,187 @@
+htmlContent = '';
+ if (file_exists($htmlFile)) {
+ $this->htmlContent .= file_get_contents($htmlFile) . "\n";
+ }
+ if (file_exists($navFile)) {
+ $this->htmlContent .= file_get_contents($navFile) . "\n";
+ }
+ if (file_exists($footerFile)) {
+ $this->htmlContent .= file_get_contents($footerFile) . "\n";
+ }
+ if (file_exists($cssFile)) {
+ $this->cssContent = file_get_contents($cssFile);
+ }
+ }
+
+ public function run()
+ {
+ echo "=== 开始执行首页改版设计规范与完整性测试 (TDD) ===\n";
+
+ // 1. 色彩体系测试
+ $this->testColorSystem();
+
+ // 2. 字体与样式测试
+ $this->testTypographyAndBorderRadius();
+
+ // 3. 禁止项测试(严禁 emoji、国潮堆砌等)
+ $this->testForbiddenElements();
+
+ // 4. 主菜单导航测试
+ $this->testNavigationMenus();
+
+ // 5. 核心业务服务板块测试
+ $this->testServicesSection();
+
+ // 6. 核心产品矩阵板块测试
+ $this->testProductsSection();
+
+ // 7. 案例、流程、评价、CTA 板块测试
+ $this->testEssentialSections();
+
+ // 8. 响应式布局测试
+ $this->testResponsiveDesign();
+
+ echo "\n测试结果: {$this->passed} 通过, {$this->failed} 失败\n";
+ if ($this->failed > 0) {
+ exit(1);
+ }
+ }
+
+ private function assert($condition, $message)
+ {
+ if ($condition) {
+ echo " [PASS] {$message}\n";
+ $this->passed++;
+ } else {
+ echo " [FAIL] {$message}\n";
+ $this->failed++;
+ }
+ }
+
+ /**
+ * 测试色彩体系是否严格符合 AGENTS.md 规范
+ */
+ public function testColorSystem()
+ {
+ $hasBlue = (stripos($this->cssContent, '#2563EB') !== false || stripos($this->cssContent, '#2563eb') !== false);
+ $this->assert($hasBlue, "CSS 必须包含主色 #2563EB (科技蓝)");
+
+ $hasCyan = (stripos($this->cssContent, '#06B6D4') !== false || stripos($this->cssContent, '#06b6d4') !== false);
+ $this->assert($hasCyan, "CSS 必须包含辅助色 #06B6D4 (青)");
+
+ $hasPurple = (stripos($this->cssContent, '#7C3AED') !== false || stripos($this->cssContent, '#7c3aed') !== false);
+ $this->assert($hasPurple, "CSS 必须包含辅助色 #7C3AED (紫)");
+
+ $hasBg = (stripos($this->cssContent, '#F8FAFC') !== false || stripos($this->cssContent, '#f8fafc') !== false);
+ $this->assert($hasBg, "CSS 必须包含背景色 #F8FAFC 与 #FFFFFF");
+
+ $hasDarkText = (stripos($this->cssContent, '#0F172A') !== false || stripos($this->cssContent, '#0f172a') !== false);
+ $this->assert($hasDarkText, "CSS 必须包含文字主色 #0F172A 与正文 #475569");
+ }
+
+ /**
+ * 测试字体与圆角规范
+ */
+ public function testTypographyAndBorderRadius()
+ {
+ $hasSongti = (stripos($this->cssContent, 'SimSun') !== false || stripos($this->cssContent, 'Songti') !== false || stripos($this->cssContent, 'Noto Serif SC') !== false || stripos($this->cssContent, 'Source Han Serif') !== false);
+ $this->assert($hasSongti, "标题字体必须使用宋体 (SimSun / Songti / Noto Serif SC)");
+
+ $hasBodyFont = (stripos($this->cssContent, 'Inter') !== false || stripos($this->cssContent, 'PingFang') !== false || stripos($this->cssContent, 'sans-serif') !== false);
+ $this->assert($hasBodyFont, "正文字体必须使用 Inter 或标准无衬线黑体");
+
+ $has1280Grid = (stripos($this->cssContent, '1280px') !== false);
+ $this->assert($has1280Grid, "容器应采用 1280px 网格规范");
+ }
+
+ /**
+ * 测试禁止项(严格禁止 Emoji 图标、霓虹赛博朋克等)
+ */
+ public function testForbiddenElements()
+ {
+ // 匹配 Unicode Emoji 范围
+ $hasEmoji = preg_match('/[\x{1F600}-\x{1F64F}\x{1F300}-\x{1F5FF}\x{1F680}-\x{1F6FF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}]/u', $this->htmlContent);
+ $this->assert(!$hasEmoji, "首页严禁使用任何 emoji 表情符号");
+ }
+
+ /**
+ * 测试主导航菜单项
+ */
+ public function testNavigationMenus()
+ {
+ $this->assert(strpos($this->htmlContent, '服务') !== false, "必须包含主菜单【服务】");
+ $this->assert(strpos($this->htmlContent, '产品') !== false, "必须包含主菜单【产品】");
+ $this->assert(strpos($this->htmlContent, '案例') !== false, "必须包含主菜单【案例】");
+ $this->assert(strpos($this->htmlContent, '关于我们') !== false, "必须包含主菜单【关于我们】");
+ $this->assert(strpos($this->htmlContent, '联系我们') !== false, "必须包含主菜单【联系我们】");
+ }
+
+ /**
+ * 测试核心服务三大领域
+ */
+ public function testServicesSection()
+ {
+ $this->assert(strpos($this->htmlContent, '软件开发') !== false, "服务板块必须包含【软件开发】");
+ $this->assert(strpos($this->htmlContent, '小程序定制') !== false || strpos($this->htmlContent, 'APP与小程序定制') !== false, "服务板块必须包含【APP与小程序定制】");
+ $this->assert(strpos($this->htmlContent, '智能体开发') !== false, "服务板块必须包含【智能体开发】");
+ }
+
+ /**
+ * 测试四大产品线
+ */
+ public function testProductsSection()
+ {
+ $this->assert(strpos($this->htmlContent, '商城') !== false, "产品板块必须包含【商城】");
+ $this->assert(strpos($this->htmlContent, '收银') !== false, "产品板块必须包含【收银】");
+ $this->assert(strpos($this->htmlContent, '进销存') !== false, "产品板块必须包含【进销存】");
+ $this->assert(strpos($this->htmlContent, 'SaaS') !== false, "产品板块必须包含【SaaS版本】");
+ }
+
+ /**
+ * 测试首屏、案例、流程、评价、CTA 等核心板块
+ */
+ public function testEssentialSections()
+ {
+ $this->assert(strpos($this->htmlContent, 'nhc-hero') !== false, "必须包含首屏 Hero 板块");
+ $this->assert(strpos($this->htmlContent, 'nhc-services') !== false, "必须包含服务入口板块");
+ $this->assert(strpos($this->htmlContent, 'nhc-products') !== false, "必须包含产品矩阵入口板块");
+ $this->assert(strpos($this->htmlContent, 'nhc-cases') !== false, "必须包含客户案例板块");
+ $this->assert(strpos($this->htmlContent, 'nhc-process') !== false, "必须包含标准化交付流程板块");
+ $this->assert(strpos($this->htmlContent, 'nhc-testimonials') !== false || strpos($this->htmlContent, 'nhc-clients') !== false, "必须包含客户评价或伙伴板块");
+ $this->assert(strpos($this->htmlContent, 'nhc-cta') !== false, "必须包含底部 CTA 行动召唤板块");
+ $this->assert(strpos($this->htmlContent, 'nhc-footer') !== false, "必须包含现代化专业页脚板块");
+ }
+
+ /**
+ * 测试响应式断点与设计
+ */
+ public function testResponsiveDesign()
+ {
+ $hasMediaQueries = (stripos($this->cssContent, '@media') !== false && (stripos($this->cssContent, '768px') !== false || stripos($this->cssContent, '1024px') !== false));
+ $this->assert($hasMediaQueries, "CSS 必须包含移动端/平板响应式媒体查询适配");
+ }
+}
+
+$test = new HomepageDesignTest();
+$test->run();