/* ================================================================
   现代主题-超级模板 · 主样式文件
   美学基底：38689（纯黑白灰、画廊式、极简）
   功能模块：17502（Marquee / Stats / Team / News / Contact）
   ================================================================ */

/* ========================================
   基础重置与 CSS 变量
   ======================================== */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

:root {
    /* 色彩系统（38689 纯黑白灰 · 默认「素白 mono」方案）*/
    --color-bg: #FFFFFF;         /* 页面主背景 */
    --color-black: #000000;      /* 主「墨色」：标题、按钮填充、线条 */
    --color-text: #333333;       /* 正文文字 */
    --color-gray: #838383;       /* 次要/弱化文字 */
    --color-nav: #929292;        /* 导航文字 */
    --color-border: #e5e5e5;     /* 描边 */
    --color-overlay-light: rgba(0, 0, 0, 0.3);
    --color-overlay-heavy: rgba(0, 0, 0, 0.7);
    --color-section-alt: #fafafa; /* 隔行分区背景 */
    --color-accent: #000000;     /* 点缀/链接高亮色（各方案定义）*/
    --color-on-ink: #ffffff;     /* 位于墨色填充之上的文字色 */
    --color-panel: #ffffff;      /* 浮层面板背景（移动菜单 / 咨询面板）*/

    /* 字体系统（默认「现代无衬线」方案，纯系统字体，无需 CDN）*/
    --font-serif: 'Helvetica Neue', 'PingFang SC', 'Microsoft YaHei', Georgia, sans-serif;
    --font-sans: -apple-system, 'PingFang SC', 'Microsoft YaHei', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;

    /* 动画缓动（统一） */
    --ease-smooth: cubic-bezier(0.215, 0.61, 0.355, 1);

    /* 时长体系 */
    --duration-micro: 0.3s;
    --duration-button: 0.4s;
    --duration-card: 0.6s;
    --duration-popup: 0.8s;
}

html {
    scroll-behavior: smooth;
}

body {
    font-family: var(--font-sans);
    background: var(--color-bg);
    color: var(--color-text);
    overflow-x: hidden;
    font-weight: 300;
    line-height: 1.6;
}

a {
    color: inherit;
    text-decoration: none;
}

img {
    max-width: 100%;
    height: auto;
}

/* ========================================
   Header 导航栏
   ======================================== */
.ws-header {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    height: 60px;
    z-index: 999;
    padding: 0 50px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: rgba(255, 255, 255, 0.98);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    border-bottom: 1px solid var(--color-border);
    transition: all var(--duration-micro) var(--ease-smooth);
}

/* 导航栏滚动后缩小 */
.ws-header.scrolled {
    height: 50px;
    box-shadow: 0 2px 20px rgba(0, 0, 0, 0.05);
}

/* Logo */
.ws-logo {
    font-family: var(--font-serif);
    font-size: 28px;
    font-weight: 500;
    letter-spacing: 3px;
    color: var(--color-black);
}

.ws-logo span {
    display: block;
    font-family: var(--font-sans);
    font-size: 11px;
    font-weight: 300;
    letter-spacing: 4px;
    color: var(--color-gray);
    margin-top: 2px;
}

/* 导航菜单 */
.ws-nav {
    display: flex;
    gap: 40px;
    list-style: none;
}

.ws-nav a {
    font-size: 14px;
    color: var(--color-nav);
    letter-spacing: 1px;
    transition: color var(--duration-micro) var(--ease-smooth);
    position: relative;
}

.ws-nav a:hover,
.ws-nav a.current {
    color: var(--color-black);
}

.ws-nav a::after {
    content: '';
    position: absolute;
    bottom: -4px;
    left: 0;
    width: 0;
    height: 1px;
    background: var(--color-black);
    transition: width var(--duration-button) var(--ease-smooth);
}

.ws-nav a:hover::after,
.ws-nav a.current::after {
    width: 100%;
}

/* ========================================
   导航二级下拉菜单
   内核 navi 缓存的两类子项（分类型导航的下级分类 children、
   自定义导航的下级菜单 childnavi）都由 module.php::ws_get_nav_items()
   合并成 sub 后输出到这里
   ======================================== */
.ws-nav > li {
    position: relative;
}

/* 有子项的一级菜单：文字后跟一个旋转 45° 的小箭头 */
.ws-nav > li.has-sub > a {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}

.ws-nav-caret {
    width: 5px;
    height: 5px;
    border-right: 1px solid currentColor;
    border-bottom: 1px solid currentColor;
    transform: rotate(45deg) translateY(-2px);
    transition: transform var(--duration-micro) var(--ease-smooth);
}

.ws-nav > li:hover .ws-nav-caret {
    transform: rotate(-135deg) translateY(-2px);
}

.ws-nav-sub {
    list-style: none;
    position: absolute;
    top: 100%;
    left: -12px;
    min-width: 176px;
    /* 顶部 padding 是「桥」：鼠标从一级项移到子项时不会掉出 hover 区域 */
    padding: 20px 0 0;
    margin: 0;
    opacity: 0;
    visibility: hidden;
    transform: translateY(-8px);
    transition: opacity var(--duration-micro) var(--ease-smooth),
                transform var(--duration-micro) var(--ease-smooth),
                visibility var(--duration-micro);
    z-index: 1002;
}

.ws-nav > li:hover > .ws-nav-sub,
.ws-nav > li:focus-within > .ws-nav-sub {
    opacity: 1;
    visibility: visible;
    transform: translateY(0);
}

/* 只给行本身铺底色，空白桥保持透明，看起来是一组悬浮条目而非一个框 */
.ws-nav-sub > li {
    background: var(--color-panel);
    border-bottom: 1px solid var(--color-border);
    box-shadow: 0 12px 30px rgba(0, 0, 0, 0.06);
}

.ws-nav-sub > li:first-child {
    border-top: 1px solid var(--color-border);
}

.ws-nav-sub a {
    display: block;
    padding: 12px 20px;
    font-size: 13px;
    letter-spacing: 1px;
    white-space: nowrap;
}

.ws-nav-sub a::after {
    display: none;
}

.ws-nav-sub a:hover {
    padding-left: 26px;
}

/* 移动端菜单按钮 */
.ws-menu-btn {
    display: none;
    width: 30px;
    height: 20px;
    position: relative;
    cursor: pointer;
    background: none;
    border: none;
}

.ws-menu-btn span {
    display: block;
    width: 100%;
    height: 1.5px;
    background: var(--color-black);
    position: absolute;
    left: 0;
    transition: all var(--duration-micro) var(--ease-smooth);
}

.ws-menu-btn span:first-child { top: 0; }
.ws-menu-btn span:last-child { bottom: 0; }

/* 移动端侧推菜单 */
.ws-mobile-nav {
    position: fixed;
    top: 0;
    right: -300px;
    width: 300px;
    height: 100vh;
    background: var(--color-panel);
    z-index: 1001;
    padding: 80px 40px 40px;
    transition: right var(--duration-popup) var(--ease-smooth);
    box-shadow: -10px 0 40px rgba(0, 0, 0, 0.1);
}

.ws-mobile-nav.open {
    right: 0;
}

.ws-mobile-nav a {
    display: block;
    font-size: 18px;
    color: var(--color-text);
    padding: 15px 0;
    border-bottom: 1px solid var(--color-border);
    letter-spacing: 2px;
    transition: text-indent var(--duration-micro) var(--ease-smooth);
}

.ws-mobile-nav a:hover {
    text-indent: 10px;
    color: var(--color-black);
}

/* 移动端二级菜单：父项用按钮展开，子项缩进折叠 */
.ws-mnav-group {
    border-bottom: 1px solid var(--color-border);
}

.ws-mnav-group > .ws-mnav-link,
.ws-mnav-group > .ws-mnav-parent,
.ws-mnav-link {
    border-bottom: none;
}

.ws-mnav-parent {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    padding: 15px 0;
    background: none;
    border: none;
    font-family: inherit;
    font-size: 18px;
    letter-spacing: 2px;
    color: var(--color-text);
    text-align: left;
    cursor: pointer;
    transition: color var(--duration-micro) var(--ease-smooth);
}

.ws-mnav-parent:hover,
.ws-mnav-parent.current {
    color: var(--color-black);
}

.ws-mnav-caret {
    width: 6px;
    height: 6px;
    border-right: 1px solid currentColor;
    border-bottom: 1px solid currentColor;
    transform: rotate(45deg);
    transition: transform var(--duration-micro) var(--ease-smooth);
    flex: 0 0 auto;
}

.ws-mnav-group.open .ws-mnav-caret {
    transform: rotate(-135deg);
}

.ws-mnav-sub {
    max-height: 0;
    overflow: hidden;
    transition: max-height var(--duration-popup) var(--ease-smooth);
}

.ws-mnav-group.open .ws-mnav-sub {
    /* 展开高度上限，够放十几条子项；超出由 overflow:hidden 裁掉的概率极低 */
    max-height: 640px;
}

.ws-mnav-sub a {
    font-size: 15px;
    letter-spacing: 1px;
    padding: 11px 0 11px 16px;
    color: var(--color-nav);
    border-bottom: none;
}

.ws-mnav-sub a:last-child {
    padding-bottom: 15px;
}

.ws-mnav-sub a:hover {
    text-indent: 26px;
    color: var(--color-black);
}

.ws-mnav-link.current {
    color: var(--color-black);
}

.ws-mobile-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.3);
    z-index: 1000;
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--duration-button) var(--ease-smooth);
}

.ws-mobile-overlay.open {
    opacity: 1;
    pointer-events: auto;
}

/* ========================================
   Hero Slider 全屏轮播
   ======================================== */
.ws-hero {
    position: relative;
    height: 100vh;
    width: 100%;
    overflow: hidden;
}

.ws-slide {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    transition: opacity 1.2s var(--ease-smooth);
    pointer-events: none;
}

.ws-slide.active {
    opacity: 1;
    pointer-events: auto;
}

.ws-slide-image {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.ws-slide-content {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    text-align: center;
    color: white;
    z-index: 10;
}

.ws-slide-number {
    font-family: var(--font-serif);
    /* 以下四项均可在后台「首页横幅 → 编号文字」独立调整，留空回退默认值 */
    font-size: var(--ws-hero-number-size, 140px);
    font-weight: var(--ws-hero-number-weight, 300);
    color: var(--ws-hero-number-color, #ffffff);
    opacity: var(--ws-hero-number-opacity, 0.9);
    line-height: 1;
    margin-bottom: 20px;
    letter-spacing: -5px;
}

.ws-slide-title {
    font-family: var(--font-serif);
    font-size: var(--ws-hero-title-size, 56px);
    font-weight: var(--ws-hero-title-weight, 400);
    color: var(--ws-hero-title-color, #ffffff);
    opacity: var(--ws-hero-title-opacity, 1);
    letter-spacing: 6px;
    text-transform: uppercase;
}

.ws-slide-subtitle {
    font-family: var(--font-sans);
    font-size: var(--ws-hero-subtitle-size, 14px);
    font-weight: var(--ws-hero-subtitle-weight, 300);
    color: var(--ws-hero-subtitle-color, #ffffff);
    opacity: var(--ws-hero-subtitle-opacity, 0.8);
    letter-spacing: 4px;
    margin-top: 20px;
}

/* 轮播导航按钮 */
.ws-slider-nav {
    position: absolute;
    bottom: 50px;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    gap: 20px;
    z-index: 20;
}

.ws-slider-nav button {
    width: 50px;
    height: 50px;
    background: rgba(255, 255, 255, 0.1);
    border: 1px solid rgba(255, 255, 255, 0.4);
    color: white;
    font-size: 24px;
    cursor: pointer;
    transition: all var(--duration-button) var(--ease-smooth);
    backdrop-filter: blur(10px);
}

.ws-slider-nav button:hover {
    background: rgba(255, 255, 255, 0.2);
    border-color: rgba(255, 255, 255, 0.6);
}

/* 轮播圆点指示器 */
.ws-slider-dots {
    position: absolute;
    right: 50px;
    top: 50%;
    transform: translateY(-50%);
    display: flex;
    flex-direction: column;
    gap: 15px;
    z-index: 20;
}

.ws-slider-dots .dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.4);
    cursor: pointer;
    transition: all var(--duration-micro) var(--ease-smooth);
    border: none;
}

.ws-slider-dots .dot.active {
    background: white;
    transform: scale(1.4);
}

/* ========================================
   Marquee 滚动文字装饰条
   ======================================== */
.ws-marquee {
    padding: 40px 0;
    background: var(--color-bg);
    overflow: hidden;
    border-bottom: 1px solid var(--color-border);
}

.ws-marquee-track {
    display: flex;
    /* max-content：轨道宽度 = 内容总宽，translateX 位移量才能与一个完整单元精确对齐，
       否则轨道被拉伸为容器宽度，位移 50% 与实际内容宽度不符，滚动到终点会「跳一下」 */
    width: max-content;
    animation: ws-marquee-scroll 30s linear infinite;
    white-space: nowrap;
    will-change: transform;
}

.ws-marquee-text {
    /* 色号 / 字号 可被后台「滚动文字」独立覆盖；未设置时回退全站令牌 */
    font-family: var(--font-serif);
    font-size: var(--ws-marquee-font-size, 48px);
    font-weight: 300;
    color: var(--ws-marquee-color, var(--color-text));
    letter-spacing: 4px;
    padding-right: 80px;
    display: flex;
    align-items: center;
    flex-shrink: 0;
}

.ws-marquee-text span {
    margin-right: 80px;
    opacity: 0.6;
}

.ws-marquee-text::after {
    content: '\25C7';
    margin-left: 80px;
    opacity: 0.3;
}

@keyframes ws-marquee-scroll {
    0% { transform: translateX(0); }
    /* 位移量由 JS 精确计算（轨道总宽的一半）并写入 --ws-marquee-shift，
       未执行 JS 时回退 -50%，配合 width:max-content 仍保持无缝 */
    100% { transform: translateX(var(--ws-marquee-shift, -50%)); }
}

/* ========================================
   通用区块样式
   ======================================== */
.ws-section {
    padding: 120px 50px;
}

.ws-section-alt {
    background: var(--color-section-alt);
}

.ws-section-header {
    margin-bottom: 80px;
    text-align: center;
}

.ws-section-label {
    font-size: 12px;
    color: var(--color-gray);
    letter-spacing: 3px;
    text-transform: uppercase;
    margin-bottom: 15px;
}

.ws-section-title {
    font-family: var(--font-serif);
    font-size: 42px;
    font-weight: 400;
    color: var(--color-black);
    letter-spacing: 2px;
}

/* ========================================
   Projects 案例展示区
   ======================================== */
.ws-categories {
    display: flex;
    justify-content: center;
    gap: 40px;
    margin-bottom: 60px;
    flex-wrap: wrap;
}

.ws-cat-link {
    font-size: 14px;
    color: var(--color-gray);
    letter-spacing: 2px;
    padding: 8px 20px;
    border: 1px solid transparent;
    transition: all var(--duration-button) var(--ease-smooth);
    cursor: pointer;
}

.ws-cat-link:hover,
.ws-cat-link.active {
    color: var(--color-black);
    border-color: var(--color-black);
}

.ws-projects-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 30px;
    max-width: none; /* 满屏：与页脚左右边距对齐（.ws-section 已提供 50px 侧边距）*/
    margin: 0 auto;
}

.ws-project-card {
    position: relative;
    overflow: hidden;
    cursor: pointer;
    aspect-ratio: 4/3;
}

.ws-project-image {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--duration-card) var(--ease-smooth);
}

.ws-project-info {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    padding: 30px;
    background: linear-gradient(to top, var(--color-overlay-heavy), transparent);
    color: white;
    transform: translateY(100%);
    transition: transform var(--duration-card) var(--ease-smooth);
}

.ws-project-card:hover .ws-project-image {
    transform: scale(1.15);
}

.ws-project-card:hover .ws-project-info {
    transform: translateY(0);
}

.ws-project-title {
    font-family: var(--font-serif);
    font-size: 24px;
    font-weight: 400;
    margin-bottom: 8px;
    letter-spacing: 1px;
}

.ws-project-cat {
    font-size: 12px;
    opacity: 0.8;
    letter-spacing: 2px;
}

/* MORE 链接按钮 */
.ws-more-link {
    display: block;
    text-align: center;
    margin-top: 60px;
    font-size: 14px;
    letter-spacing: 3px;
    color: var(--color-text);
    padding: 15px 40px;
    border: 1px solid var(--color-border);
    transition: all var(--duration-button) var(--ease-smooth);
    max-width: 300px;
    margin-left: auto;
    margin-right: auto;
}

.ws-more-link:hover {
    background: var(--color-black);
    color: var(--color-on-ink);
    border-color: var(--color-black);
    text-indent: 20px;
}

/* ========================================
   About + Stats 关于我们 + 数字统计
   ======================================== */
.ws-about {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 80px;
    max-width: none; /* 满屏对齐页脚 */
    margin: 0 auto;
    align-items: center;
}

.ws-about-image {
    width: 100%;
    height: 500px;
    object-fit: cover;
}

/* 关于区排版切换（后台「关于我们 → 图文排版」）
   h_left = 横版·图左文右（默认）
   h_right = 横版·文左图右
   v_top = 竖版·图上文下 */
.ws-about[data-layout="h_right"] .ws-about-media {
    order: 2;
}

.ws-about[data-layout="h_right"] .ws-about-content {
    order: 1;
}

.ws-about[data-layout="v_top"] {
    grid-template-columns: 1fr;
    gap: 50px;
}

.ws-about[data-layout="v_top"] .ws-about-image {
    /* 竖版时图片横向铺满，高度收一些避免挤出正文 */
    height: 420px;
}

.ws-about-content .ws-section-label,
.ws-about-content .ws-section-title {
    text-align: left;
}

.ws-about-text {
    font-size: 15px;
    line-height: 1.8;
    color: var(--color-gray);
    margin-top: 30px;
    margin-bottom: 50px;
}

.ws-stats-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 40px;
}

.ws-stat-item {
    text-align: left;
}

.ws-stat-number {
    font-family: var(--font-serif);
    font-size: 56px;
    font-weight: 300;
    color: var(--color-black);
    line-height: 1;
    margin-bottom: 10px;
}

.ws-stat-label {
    font-size: 13px;
    color: var(--color-gray);
    letter-spacing: 2px;
}

/* ========================================
   Team 团队轮播区
   ======================================== */
/* ----------------------------------------
   团队轮播：左右满屏自动滚动（与合作伙伴同一套无缝轨道机制）
   ---------------------------------------- */
.ws-team-band {
    /* 带形区块：不留左右内边距，滚动内容铺满整屏 */
    padding: 120px 0;
    /* 裁掉轨道溢出部分，避免出现横向滚动条 */
    overflow: hidden;
}

.ws-team-band .ws-section-header {
    /* 标题仍保留 50px 边距，与页脚文字左右对齐 */
    padding: 0 50px;
}

.ws-team-track {
    display: flex;
    /* 轨道宽度 = 内容总宽，位移量与一组卡片精确对齐，循环不中断 */
    width: max-content;
    animation: ws-marquee-scroll 45s linear infinite;
    will-change: transform;
}

/* 悬停暂停，方便看清成员资料 */
.ws-team-track:hover {
    animation-play-state: paused;
}

.ws-team-row {
    display: flex;
    align-items: flex-start;
    flex-shrink: 0;
    gap: 40px;
    /* 行尾留白，保证两组卡片之间的间距与行内一致 */
    padding-right: 40px;
}

.ws-team-card {
    flex: 0 0 auto;
    width: 300px;
    text-align: center;
}

.ws-team-photo {
    width: 100%;
    aspect-ratio: 3/4;
    object-fit: cover;
    margin-bottom: 20px;
    filter: grayscale(100%);
    transition: filter var(--duration-card) var(--ease-smooth);
}

.ws-team-card:hover .ws-team-photo {
    filter: grayscale(0%);
}

.ws-team-name {
    font-family: var(--font-serif);
    font-size: 20px;
    font-weight: 400;
    color: var(--color-black);
    margin-bottom: 8px;
}

.ws-team-role {
    font-size: 13px;
    color: var(--color-gray);
    letter-spacing: 1px;
}

/* ========================================
   News 新闻动态区
   ======================================== */
.ws-news-list {
    max-width: none; /* 满屏：随栏宽自适应 */
    margin: 0 auto;
}

.ws-news-item {
    display: grid;
    grid-template-columns: 120px 1fr;
    gap: 40px;
    padding: 40px 0;
    border-bottom: 1px solid var(--color-border);
    transition: all var(--duration-micro) var(--ease-smooth);
    cursor: pointer;
}

.ws-news-item:hover {
    padding-left: 20px;
}

.ws-news-date {
    font-family: var(--font-serif);
    font-size: 14px;
    color: var(--color-gray);
    letter-spacing: 1px;
    padding-top: 5px;
}

.ws-news-content h3 {
    font-family: var(--font-serif);
    font-size: 24px;
    font-weight: 400;
    color: var(--color-black);
    margin-bottom: 12px;
    letter-spacing: 1px;
    transition: color var(--duration-micro) var(--ease-smooth);
}

.ws-news-item:hover .ws-news-content h3 {
    color: var(--color-gray);
}

.ws-news-content p {
    font-size: 14px;
    line-height: 1.6;
    color: var(--color-gray);
}

/* ========================================
   Contact 联系区
   ======================================== */
.ws-contact {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 80px;
    max-width: none; /* 满屏对齐页脚 */
    margin: 0 auto;
    align-items: center;
}

.ws-contact .ws-section-label,
.ws-contact .ws-section-title {
    text-align: left;
}

.ws-contact-details {
    margin-top: 40px;
}

.ws-contact-item {
    margin-bottom: 30px;
}

.ws-contact-item-label {
    font-size: 12px;
    color: var(--color-gray);
    letter-spacing: 2px;
    text-transform: uppercase;
    margin-bottom: 8px;
}

.ws-contact-item-value {
    font-size: 16px;
    color: var(--color-black);
    letter-spacing: 1px;
}

.ws-contact-item-value a {
    color: var(--color-black);
    transition: color var(--duration-micro) var(--ease-smooth);
}

.ws-contact-item-value a:hover {
    color: var(--color-gray);
}

.ws-contact-qr {
    text-align: center;
}

.ws-qr-image {
    width: 200px;
    height: 200px;
    /* 占位底色改用令牌，深色主题（noir）下不再出现刺眼浅灰块 */
    background: var(--color-section-alt);
    border: 1px solid var(--color-border);
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 0 auto 20px;
    font-size: 14px;
    color: var(--color-gray);
    overflow: hidden;
}

.ws-qr-image img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.ws-qr-text {
    font-size: 13px;
    color: var(--color-gray);
    letter-spacing: 1px;
}

/* 三枚二维码（微信 / 公众号 / 其他）横向并列，数量随后台上传情况自适应 */
.ws-qr-caption {
    font-family: var(--font-serif);
    font-size: 18px;
    color: var(--color-black);
    letter-spacing: 2px;
    margin-bottom: 26px;
}

.ws-qr-list {
    display: flex;
    justify-content: center;
    align-items: flex-start;
    flex-wrap: wrap;
    gap: 24px;
}

.ws-qr-list .ws-qr-image {
    /* 并排后单枚尺寸收小，保证三枚在右栏内不挤压正文 */
    width: 150px;
    height: 150px;
    margin-bottom: 14px;
}

/* ========================================
   Footer 页脚
   ======================================== */
.ws-footer {
    padding: 30px 50px;
    border-top: 1px solid var(--color-border);
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 12px;
    color: var(--color-gray);
    letter-spacing: 1px;
}

.ws-footer-links {
    display: flex;
    gap: 30px;
}

.ws-footer-links a {
    color: var(--color-gray);
    transition: color var(--duration-micro) var(--ease-smooth);
}

.ws-footer-links a:hover {
    color: var(--color-black);
}

/* ========================================
   Floating Widget 浮窗咨询
   ======================================== */
.ws-float-widget {
    position: fixed;
    bottom: 30px;
    right: 30px;
    z-index: 998;
}

.ws-widget-btn {
    width: 60px;
    height: 60px;
    background: var(--color-black);
    color: var(--color-on-ink);
    border: none;
    border-radius: 50%;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
    transition: all var(--duration-button) var(--ease-smooth);
}

.ws-widget-btn:hover {
    transform: scale(1.1);
    box-shadow: 0 6px 30px rgba(0, 0, 0, 0.3);
}

.ws-widget-panel {
    position: absolute;
    bottom: 80px;
    right: 0;
    width: 300px;
    background: var(--color-panel);
    border: 1px solid var(--color-border);
    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);
    padding: 35px;
    display: none;
}

.ws-widget-panel.show {
    display: block;
    animation: ws-fadeInUp var(--duration-button) var(--ease-smooth);
}

.ws-widget-panel h4 {
    font-family: var(--font-serif);
    font-size: 20px;
    font-weight: 400;
    margin-bottom: 15px;
    color: var(--color-black);
}

.ws-widget-panel p {
    font-size: 14px;
    color: var(--color-gray);
    margin-bottom: 25px;
    line-height: 1.6;
}

.ws-widget-panel .ws-phone {
    font-family: var(--font-serif);
    font-size: 28px;
    font-weight: 400;
    color: var(--color-black);
    letter-spacing: 1px;
}

@keyframes ws-fadeInUp {
    from {
        opacity: 0;
        transform: translateY(20px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* ========================================
   文章详情页（log.php）
   ======================================== */
.ws-article {
    max-width: 900px;
    margin: 0 auto;
    padding: 120px 50px 80px;
}

.ws-article-header {
    margin-bottom: 60px;
    text-align: center;
}

.ws-article-title {
    font-family: var(--font-serif);
    font-size: 42px;
    font-weight: 400;
    color: var(--color-black);
    letter-spacing: 2px;
    margin-bottom: 20px;
    line-height: 1.3;
}

.ws-article-meta {
    font-size: 13px;
    color: var(--color-gray);
    letter-spacing: 2px;
}

.ws-article-meta span {
    margin: 0 10px;
}

.ws-article-cover {
    width: 100%;
    max-height: 500px;
    object-fit: cover;
    margin-bottom: 60px;
}

.ws-article-content {
    font-size: 16px;
    line-height: 2;
    color: var(--color-text);
}

.ws-article-content h2,
.ws-article-content h3,
.ws-article-content h4 {
    font-family: var(--font-serif);
    font-weight: 400;
    color: var(--color-black);
    margin: 40px 0 20px;
}

.ws-article-content h2 { font-size: 32px; }
.ws-article-content h3 { font-size: 24px; }
.ws-article-content h4 { font-size: 20px; }

.ws-article-content p {
    margin-bottom: 20px;
}

.ws-article-content img {
    max-width: 100%;
    height: auto;
    margin: 30px 0;
}

.ws-article-content blockquote {
    border-left: 3px solid var(--color-black);
    padding-left: 20px;
    margin: 30px 0;
    color: var(--color-gray);
    font-style: italic;
}

.ws-article-content ul,
.ws-article-content ol {
    padding-left: 30px;
    margin-bottom: 20px;
}

.ws-article-content li {
    margin-bottom: 8px;
}

/* 文章画廊 */
.ws-gallery {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
    margin: 40px 0;
}

.ws-gallery img {
    width: 100%;
    height: 250px;
    object-fit: cover;
    margin: 0;
    transition: opacity var(--duration-micro) var(--ease-smooth);
}

.ws-gallery img:hover {
    opacity: 0.8;
}

/* 文章标签：原先靠行内 style 写死 #838383 / #e5e5e5，
   深色方案（noir）下会读不清，改成走配色令牌 */
.ws-article-tags {
    margin-top: 60px;
    text-align: center;
}

.ws-article-tags a {
    display: inline-block;
    padding: 8px 20px;
    margin: 5px;
    font-size: 13px;
    letter-spacing: 1px;
    color: var(--color-gray);
    border: 1px solid var(--color-border);
    transition: color var(--duration-micro) var(--ease-smooth),
                border-color var(--duration-micro) var(--ease-smooth),
                background var(--duration-micro) var(--ease-smooth);
}

.ws-article-tags a:hover {
    color: var(--color-on-ink, #fff);
    background: var(--color-black);
    border-color: var(--color-black);
}

/* 项目信息表（字段数量由正文决定，1~4 项都要排得开，所以用 auto-fit 而非固定两列） */
.ws-project-meta {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
    gap: 20px;
    padding: 40px;
    background: var(--color-section-alt);
    margin: 40px 0;
}

.ws-project-meta-item {
    display: flex;
    flex-direction: column;
}

.ws-project-meta-label {
    font-size: 12px;
    color: var(--color-gray);
    letter-spacing: 2px;
    text-transform: uppercase;
    margin-bottom: 5px;
}

.ws-project-meta-value {
    font-family: var(--font-serif);
    font-size: 18px;
    color: var(--color-black);
}

/* 上一篇 / 下一篇导航 */
.ws-article-nav {
    display: flex;
    justify-content: space-between;
    margin-top: 80px;
    padding-top: 40px;
    border-top: 1px solid var(--color-border);
}

.ws-article-nav a {
    font-size: 14px;
    color: var(--color-gray);
    letter-spacing: 1px;
    transition: color var(--duration-micro) var(--ease-smooth);
    max-width: 45%;
}

.ws-article-nav a:hover {
    color: var(--color-black);
}

/* ========================================
   独立页面（page.php）
   ======================================== */
.ws-page {
    max-width: 900px;
    margin: 0 auto;
    padding: 120px 50px 80px;
}

.ws-page-title {
    font-family: var(--font-serif);
    font-size: 42px;
    font-weight: 400;
    color: var(--color-black);
    letter-spacing: 2px;
    margin-bottom: 60px;
    text-align: center;
}

.ws-page-content {
    font-size: 16px;
    line-height: 2;
    color: var(--color-text);
}

.ws-page-content h2,
.ws-page-content h3 {
    font-family: var(--font-serif);
    font-weight: 400;
    color: var(--color-black);
    margin: 40px 0 20px;
}

.ws-page-content p {
    margin-bottom: 20px;
}

.ws-page-content img {
    max-width: 100%;
    height: auto;
    margin: 30px 0;
}

/* ========================================
   文章列表 / 归档页（log_list_sort.php）
   ======================================== */
.ws-archive {
    max-width: 1200px;
    margin: 0 auto;
    padding: 120px 50px 80px;
}

.ws-archive-header {
    text-align: center;
    margin-bottom: 80px;
}

.ws-archive-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 30px;
}

.ws-archive-card {
    cursor: pointer;
    transition: transform var(--duration-card) var(--ease-smooth);
}

.ws-archive-card:hover {
    transform: translateY(-5px);
}

.ws-archive-card-image {
    width: 100%;
    aspect-ratio: 4/3;
    object-fit: cover;
    margin-bottom: 20px;
}

.ws-archive-card-title {
    font-family: var(--font-serif);
    font-size: 20px;
    font-weight: 400;
    color: var(--color-black);
    margin-bottom: 10px;
}

.ws-archive-card-date {
    font-size: 12px;
    color: var(--color-gray);
    letter-spacing: 1px;
}

/* 分页 */
.ws-pagination {
    display: flex;
    justify-content: center;
    gap: 10px;
    margin-top: 60px;
}

.ws-pagination a,
.ws-pagination span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    font-size: 14px;
    color: var(--color-gray);
    border: 1px solid var(--color-border);
    transition: all var(--duration-micro) var(--ease-smooth);
}

.ws-pagination a:hover,
.ws-pagination .current {
    background: var(--color-black);
    color: var(--color-on-ink);
    border-color: var(--color-black);
}

/* ========================================
   WOW.js 入场动画辅助
   ======================================== */
.wow {
    visibility: hidden;
}

/* ========================================
   响应式适配
   ======================================== */
@media (max-width: 1024px) {
    .ws-projects-grid,
    .ws-archive-grid {
        grid-template-columns: repeat(2, 1fr);
    }

    .ws-team-card {
        /* 满屏滚动模式改用固定卡宽（百分比在 max-content 轨道内基准失效） */
        width: 260px;
    }
}

@media (max-width: 768px) {
    .ws-header {
        padding: 0 30px;
    }

    .ws-nav {
        display: none;
    }

    .ws-menu-btn {
        display: block;
    }

    .ws-slide-number {
        /* min() 保证后台自定义值仍生效，只是不超过移动端的建议上限 */
        font-size: min(var(--ws-hero-number-size, 140px), 100px);
    }

    .ws-slide-title {
        font-size: min(var(--ws-hero-title-size, 56px), 36px);
    }

    .ws-marquee-text {
        /* 移动端默认更小；若后台设置了独立字号则尊重该设置 */
        font-size: var(--ws-marquee-font-size, 32px);
    }

    .ws-section {
        padding: 80px 30px;
    }

    .ws-section-title {
        font-size: 32px;
    }

    .ws-about,
    .ws-contact {
        grid-template-columns: 1fr;
        gap: 50px;
    }

    /* 窄屏单列时恢复「图在上、文在下」，不受后台横版左右翻转影响 */
    .ws-about[data-layout="h_right"] .ws-about-media,
    .ws-about[data-layout="h_right"] .ws-about-content {
        order: 0;
    }

    .ws-about-image {
        height: 350px;
    }

    /* 窄屏下三枚二维码收窄，保证一行能放下 */
    .ws-qr-list .ws-qr-image {
        width: 120px;
        height: 120px;
    }

    .ws-qr-list {
        gap: 14px;
    }

    .ws-projects-grid,
    .ws-archive-grid {
        grid-template-columns: 1fr;
    }

    .ws-team-card {
        width: 220px;
    }

    /* 团队带形区块：保持满屏（左右 0），标题退到与页脚一致的 30px 边距 */
    .ws-team-band {
        padding: 80px 0;
    }

    .ws-team-band .ws-section-header,
    .ws-partners .ws-section-header {
        padding: 0 30px;
    }

    .ws-news-item {
        grid-template-columns: 1fr;
        gap: 15px;
    }

    .ws-article {
        padding: 100px 30px 60px;
    }

    .ws-article-title {
        font-size: 32px;
    }

    .ws-gallery {
        grid-template-columns: 1fr;
    }

    .ws-project-meta {
        grid-template-columns: 1fr;
        padding: 30px;
    }

    .ws-footer {
        padding: 30px;
        flex-direction: column;
        gap: 20px;
        text-align: center;
    }
}

@media (max-width: 480px) {
    .ws-slide-number {
        font-size: min(var(--ws-hero-number-size, 140px), 72px);
    }

    .ws-slide-title {
        font-size: min(var(--ws-hero-title-size, 56px), 28px);
        letter-spacing: 3px;
    }

    .ws-section {
        padding: 60px 20px;
    }

    .ws-section-title {
        font-size: 28px;
    }

    .ws-categories {
        gap: 15px;
    }

    .ws-cat-link {
        padding: 6px 15px;
        font-size: 13px;
    }

    .ws-stats-grid {
        grid-template-columns: 1fr;
    gap: 30px;
    }

    .ws-stat-number {
        font-size: 42px;
    }

    .ws-team-card {
        width: 190px;
    }

    .ws-team-band {
        padding: 60px 0;
    }
}

/* ========================================
   缺图占位（灰阶渐变，品牌黑白灰调性）
   —— 图片未配置/未上传时替代 404 破图
   ======================================== */
.ws-cover-placeholder {
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, #efefef 0%, #dcdcdc 55%, #cfcfcf 100%);
    color: #b5b5b5;
    font-size: 22px;
    letter-spacing: 6px;
    user-select: none;
}

/* 轮播 slide 深色渐变占位 */
.ws-slide-placeholder {
    position: absolute;
    inset: 0;
    background: linear-gradient(160deg, #2e2e2e 0%, #1a1a1a 55%, #0e0e0e 100%);
}

/* 图片 Logo（后台基础设置上传后启用） */
.ws-logo-img {
    display: block;
    max-height: 40px;
    width: auto;
}

/* ========================================
   Partners 合作伙伴品牌滚动条
   —— 黑白灰调性：默认灰度化，悬停恢复
   ======================================== */
.ws-partners {
    padding: 80px 0;
    background: var(--color-bg);
    border-top: 1px solid var(--color-border);
    overflow: hidden;
}

.ws-partners .ws-section-header {
    padding: 0 50px;
}

.ws-partners-track {
    display: flex;
    /* 满屏 + 无缝：轨道宽度取内容总宽，位移量与一组品牌精确对齐，滚动不中断 */
    width: max-content;
    animation: ws-marquee-scroll 40s linear infinite;
    white-space: nowrap;
    will-change: transform;
}

/* 悬停时暂停滚动，方便看清品牌 */
.ws-partners:hover .ws-partners-track {
    animation-play-state: paused;
}

.ws-partners-row {
    display: flex;
    align-items: center;
    flex-shrink: 0;
}

.ws-partner-item {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0 60px;
    filter: grayscale(100%);
    opacity: 0.55;
    transition: opacity var(--duration-micro, 0.3s) var(--ease-smooth, ease), filter 0.3s ease;
}

.ws-partner-item:hover {
    opacity: 1;
    filter: grayscale(0%);
}

.ws-partner-item img {
    max-height: 36px;
    width: auto;
}

/* 文字品牌名（未上传 Logo 时的降级显示） */
.ws-partner-text {
    font-family: var(--font-serif);
    font-size: 24px;
    font-weight: 500;
    letter-spacing: 3px;
    color: var(--color-text);
}

@media (max-width: 768px) {
    .ws-partners {
        padding: 50px 0;
    }
    .ws-partner-item {
        padding: 0 30px;
    }
    .ws-partner-item img {
        max-height: 26px;
    }
    .ws-partner-text {
        font-size: 18px;
    }
}

/* ========================================
   Hero 切换效果（后台可选：fade / slide / zoom）
   ======================================== */
/* 横向滑动 */
.ws-hero[data-effect="slide"] .ws-slide {
    opacity: 1;
    visibility: hidden;
    transform: translateX(100%);
    transition: transform 1s var(--ease-smooth), visibility 0s linear 1s;
}
.ws-hero[data-effect="slide"] .ws-slide.active {
    visibility: visible;
    transform: translateX(0);
    transition: transform 1s var(--ease-smooth);
    pointer-events: auto;
}

/* 缩放淡入 */
.ws-hero[data-effect="zoom"] .ws-slide {
    opacity: 0;
    transform: scale(1.08);
    transition: opacity 1.4s var(--ease-smooth), transform 1.4s var(--ease-smooth);
}
.ws-hero[data-effect="zoom"] .ws-slide.active {
    opacity: 1;
    transform: scale(1);
    pointer-events: auto;
}

/* 轮播内容可点击跳转（链接版） */
a.ws-slide-content {
    display: block;
    text-decoration: none;
    color: inherit;
}

/* ========================================
   团队卡片扩展（首字占位 / 简介 / 链接）
   ======================================== */
.ws-team-link {
    display: block;
    text-decoration: none;
    color: inherit;
}

.ws-team-photo-text {
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, #efefef 0%, #dcdcdc 100%);
    color: #9e9e9e;
    font-family: var(--font-serif);
    font-size: 48px;
}

.ws-team-bio {
    margin-top: 12px;
    font-size: 13px;
    line-height: 1.8;
    color: var(--color-text-light, #838383);
}

/* ========================================
   页脚备案 / 资质信息
   ======================================== */
.ws-footer-certs {
    margin-top: 12px;
    font-size: 12px;
    letter-spacing: 1px;
    color: var(--color-gray);
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 6px 18px;
}

.ws-footer-certs a {
    color: inherit;
    text-decoration: none;
    transition: color 0.3s ease;
}

.ws-footer-certs a:hover {
    color: var(--color-black, #000);
}

/* ============================================================
   主题外观系统（配色 + 字体）
   - 配色：html[data-color] 控制全站/页面；article[data-color] 控制文章（独立）
   - 字体：html[data-font] 控制全站
   - 属性选择器优先级高于 :root，天然覆盖默认令牌；
     配合下方「强制覆盖内容」规则，编辑器内联配色也会被统一接管
   ============================================================ */

/* —— 方案 1：素白（经典黑白灰，默认）—— */
[data-color="mono"] {
    --color-bg: #FFFFFF;
    --color-black: #1A1A1A;
    --color-text: #333333;
    --color-gray: #838383;
    --color-nav: #929292;
    --color-border: #E5E5E5;
    --color-section-alt: #FAFAFA;
    --color-accent: #1A1A1A;
    --color-on-ink: #FFFFFF;
    --color-panel: #FFFFFF;
}

/* —— 方案 2：墨青（暖调东方 · 黛蓝点缀）—— */
[data-color="ink"] {
    --color-bg: #F6F4F0;
    --color-black: #211E1A;
    --color-text: #33302C;
    --color-gray: #7A746C;
    --color-nav: #6E6860;
    --color-border: #E4DED5;
    --color-section-alt: #EFEBE4;
    --color-accent: #2F4858;
    --color-on-ink: #F6F4F0;
    --color-panel: #FBFAF7;
}

/* —— 方案 3：山岚（冷灰蓝 · 理性克制）—— */
[data-color="mist"] {
    --color-bg: #FFFFFF;
    --color-black: #1A2027;
    --color-text: #2C333B;
    --color-gray: #6E7884;
    --color-nav: #5A6572;
    --color-border: #DCE2E8;
    --color-section-alt: #F4F7FA;
    --color-accent: #4A6D8C;
    --color-on-ink: #FFFFFF;
    --color-panel: #FFFFFF;
}

/* —— 方案 4：赭陶（暖土质感 · 陶土橙点缀）—— */
[data-color="clay"] {
    --color-bg: #FBF8F5;
    --color-black: #241E19;
    --color-text: #342E28;
    --color-gray: #8A7E72;
    --color-nav: #7A6E62;
    --color-border: #E9DFD4;
    --color-section-alt: #F4ECE3;
    --color-accent: #B0713F;
    --color-on-ink: #FBF8F5;
    --color-panel: #FDFBF9;
}

/* —— 方案 5：夜阑（深色沉浸 · 高对比）—— */
[data-color="noir"] {
    color-scheme: dark;
    --color-bg: #0E0E0E;
    --color-black: #F2F2F2;   /* 「墨色」在暗色下翻转为亮色，用于标题/线条/按钮填充 */
    --color-text: #D6D6D6;
    --color-gray: #8A8A8A;
    --color-nav: #B0B0B0;
    --color-border: #2A2A2A;
    --color-section-alt: #161616;
    --color-accent: #E8E8E8;
    --color-on-ink: #0E0E0E;  /* 亮色按钮填充之上的深色文字 */
    --color-panel: #161616;
    --color-overlay-light: rgba(0, 0, 0, 0.5);
    --color-overlay-heavy: rgba(0, 0, 0, 0.82);
}

/* 配色作用面：承载 data-color 的元素本身（html 全站 / article 文章块） */
[data-color] {
    background-color: var(--color-bg);
    color: var(--color-text);
}

/* —— 强制覆盖编辑器内容（inline 样式一律被主题令牌接管）—— */
[data-color] .ws-article-content,
[data-color] .ws-page-content {
    background: transparent !important;
    color: var(--color-text) !important;
}
[data-color] .ws-article-content :is(p, span, li, dd, dt, b, i, u, em, strong, figcaption, label, code, pre, blockquote, td, th),
[data-color] .ws-page-content :is(p, span, li, dd, dt, b, i, u, em, strong, figcaption, label, code, pre, blockquote, td, th) {
    color: var(--color-text) !important;
}
[data-color] .ws-article-content :is(h1, h2, h3, h4, h5, h6),
[data-color] .ws-page-content :is(h1, h2, h3, h4, h5, h6) {
    color: var(--color-black) !important;
}
[data-color] .ws-article-content a,
[data-color] .ws-page-content a {
    color: var(--color-accent) !important;
}
[data-color] .ws-article-content blockquote,
[data-color] .ws-page-content blockquote {
    border-left-color: var(--color-accent) !important;
    background: var(--color-section-alt) !important;
}
[data-color] .ws-article-content :is(table, td, th),
[data-color] .ws-page-content :is(table, td, th) {
    border-color: var(--color-border) !important;
}
[data-color] .ws-article-content :is(hr),
[data-color] .ws-page-content :is(hr) {
    border-color: var(--color-border) !important;
    background: var(--color-border) !important;
}
/* 暗色方案下，正文图片保持不透明、避免叠层发灰 */
[data-color="noir"] .ws-article-content img,
[data-color="noir"] .ws-page-content img {
    opacity: 0.94;
}

/* —— 字体方案（纯系统字体，无任何 CDN 依赖；含两套繁体）—— */

/* 字体 1：现代无衬线（默认，标题亦走无衬线，极简）*/
[data-font="sans_modern"] {
    --font-sans: -apple-system, 'PingFang SC', 'Microsoft YaHei', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
    --font-serif: 'Helvetica Neue', 'PingFang SC', 'Microsoft YaHei', Georgia, sans-serif;
}

/* 字体 2：人文衬线（衬线标题 + 无衬线正文，简体宋体）*/
[data-font="serif_human"] {
    --font-sans: -apple-system, 'PingFang SC', 'Microsoft YaHei', 'Segoe UI', sans-serif;
    --font-serif: Georgia, 'Songti SC', 'STSong', 'SimSun', 'Source Han Serif SC', serif;
}

/* 字体 3：几何均衡（system-ui 现代人文）*/
[data-font="geometric"] {
    --font-sans: system-ui, 'Segoe UI Variable', 'HarmonyOS Sans SC', 'PingFang SC', 'Microsoft YaHei', sans-serif;
    --font-serif: 'Optima', 'Avenir Next', 'Futura', 'PingFang SC', 'Microsoft YaHei', sans-serif;
}

/* 字体 4：正黑繁体（★繁体 · 标题正文皆繁体无衬线）*/
[data-font="tc_black"] {
    --font-sans: 'PingFang TC', 'Microsoft JhengHei', 'Heiti TC', 'PMingLiU', 'Segoe UI', sans-serif;
    --font-serif: 'PingFang TC', 'Microsoft JhengHei', 'Heiti TC', sans-serif;
}

/* 字体 5：明朝繁体（★繁体 · 衬线标题 + 黑体正文）*/
[data-font="tc_serif"] {
    --font-sans: 'Microsoft JhengHei', 'PingFang TC', 'PMingLiU', sans-serif;
    --font-serif: 'Songti TC', 'STSong', 'PMingLiU', 'Kaiti TC', 'DFKai-SB', serif;
}

/* ========================================
   新闻动态：两栏（行业新闻 / 企业动态，各自独立分类）
   ======================================== */
.ws-news-cols {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 60px;
    max-width: none; /* 满屏对齐页脚 */
    margin: 0 auto;
}
/* 栏内取消原居中全宽限制，随栏宽自适应 */
.ws-news-col .ws-news-list {
    max-width: none;
    margin: 0;
}
.ws-news-col-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    border-bottom: 1px solid var(--color-border);
    padding-bottom: 16px;
    margin-bottom: 8px;
}
.ws-news-col-title {
    font-family: var(--font-serif);
    font-size: 22px;
    font-weight: 400;
    letter-spacing: 2px;
    color: var(--color-black);
    margin: 0;
}
.ws-news-col-more {
    font-size: 13px;
    letter-spacing: 1px;
    color: var(--color-gray);
    transition: color var(--duration-micro) var(--ease-smooth);
}
.ws-news-col-more:hover {
    color: var(--color-black);
}
/* 栏内文章条目更紧凑（半栏宽度下日期列收窄）*/
.ws-news-col .ws-news-item {
    grid-template-columns: 92px 1fr;
    gap: 20px;
    padding: 22px 0;
}
.ws-news-col .ws-news-item:hover {
    padding-left: 10px;
}
/* 「留空即隐藏」单栏兜底：另一侧因未配置而不输出时，
   剩余内容铺满整行，而不是只占一半宽度留下大片空白 */
.ws-about.ws-about-single,
.ws-contact.ws-contact-single,
.ws-news-cols.ws-news-cols-single {
    grid-template-columns: 1fr;
}
@media (max-width: 768px) {
    .ws-news-cols {
        grid-template-columns: 1fr;
        gap: 48px;
    }
}

/* ========================================
   独立模板（page_standalone / echo_log_standalone）
   带 Hero 头部的全宽/限宽页面与文章模板
   ======================================== */

/* ---- Hero 头部区域 ---- */
.ws-standalone-hero {
    position: relative;
    min-height: 70vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, #1e3a5f 0%, #2d5a87 50%, #4a7fb5 100%);
    overflow: hidden;
    padding: 100px 50px 80px;
}

/* 装饰性渐变叠层，增加深度感 */
.ws-standalone-hero::after {
    content: '';
    position: absolute;
    inset: 0;
    background: radial-gradient(ellipse at 30% 50%, rgba(212, 175, 55, 0.08) 0%, transparent 60%);
    pointer-events: none;
}

.ws-standalone-hero-inner {
    position: relative;
    z-index: 1;
    text-align: center;
    max-width: 800px;
}

.ws-standalone-hero-title {
    font-family: var(--font-serif);
    font-size: 52px;
    font-weight: 400;
    color: #ffffff;
    letter-spacing: 4px;
    line-height: 1.3;
    text-shadow: 0 2px 20px rgba(0, 0, 0, 0.2);
}

/* 署名行（独立文章模板专用） */
.ws-standalone-byline {
    font-family: var(--font-sans);
    font-size: 13px;
    font-weight: 300;
    color: rgba(255, 255, 255, 0.7);
    letter-spacing: 3px;
    margin-bottom: 24px;
    text-transform: uppercase;
}

/* ---- 正文容器 ---- */
.ws-standalone-content {
    padding: 80px 50px;
    background: var(--color-bg);
}

.ws-standalone-body {
    font-family: var(--font-sans);
    font-size: 16px;
    line-height: 2;
    color: var(--color-text);
}

.ws-standalone-body h2,
.ws-standalone-body h3,
.ws-standalone-body h4 {
    font-family: var(--font-serif);
    font-weight: 400;
    color: var(--color-black);
    margin: 48px 0 20px;
}

.ws-standalone-body h2 { font-size: 32px; letter-spacing: 1px; }
.ws-standalone-body h3 { font-size: 24px; }
.ws-standalone-body h4 { font-size: 20px; }

.ws-standalone-body p {
    margin-bottom: 20px;
}

.ws-standalone-body img {
    max-width: 100%;
    height: auto;
    margin: 30px 0;
}

.ws-standalone-body blockquote {
    border-left: 3px solid var(--color-accent);
    padding-left: 24px;
    margin: 30px 0;
    color: var(--color-gray);
    font-style: italic;
}

.ws-standalone-body ul,
.ws-standalone-body ol {
    padding-left: 30px;
    margin-bottom: 20px;
}

.ws-standalone-body li {
    margin-bottom: 8px;
}

.ws-standalone-body a {
    color: var(--color-accent);
    text-decoration: underline;
    text-underline-offset: 3px;
}

.ws-standalone-body a:hover {
    opacity: 0.7;
}

/* 封面图（独立文章模板） */
.ws-standalone-cover {
    width: 100%;
    max-height: 500px;
    object-fit: cover;
    margin-bottom: 60px;
}

/* 标签样式 */
.ws-standalone-tag {
    display: inline-block;
    padding: 8px 20px;
    margin: 5px;
    font-size: 13px;
    color: var(--color-gray);
    border: 1px solid var(--color-border);
    letter-spacing: 1px;
    transition: all var(--duration-button) var(--ease-smooth);
    text-decoration: none;
}

.ws-standalone-tag:hover {
    color: var(--color-on-ink);
    background: var(--color-black);
    border-color: var(--color-black);
}

/* ---- 限宽模式（contained）---- */
.ws-standalone-hero.ws-standalone-contained {
    padding-left: 100px;
    padding-right: 100px;
}

.ws-standalone-content.ws-standalone-contained {
    padding-left: 100px;
    padding-right: 100px;
}

.ws-standalone-contained .ws-standalone-body,
.ws-standalone-contained .ws-standalone-cover,
.ws-standalone-contained .ws-gallery,
.ws-standalone-contained .ws-article-tags,
.ws-standalone-contained .ws-article-nav {
    max-width: 1100px;
    margin-left: auto;
    margin-right: auto;
}

/* ---- 满屏模式（full）---- */
.ws-standalone-hero:not(.ws-standalone-contained) {
    padding-left: 50px;
    padding-right: 50px;
}

.ws-standalone-content:not(.ws-standalone-contained) .ws-standalone-body,
.ws-standalone-content:not(.ws-standalone-contained) .ws-gallery,
.ws-standalone-content:not(.ws-standalone-contained) .ws-article-tags,
.ws-standalone-content:not(.ws-standalone-contained) .ws-article-nav {
    max-width: 1400px;
    margin-left: auto;
    margin-right: auto;
}

/* ---- 响应式适配 ---- */
@media (max-width: 768px) {
    .ws-standalone-hero {
        min-height: 50vh;
        padding: 80px 30px 60px;
    }

    .ws-standalone-hero.ws-standalone-contained {
        padding-left: 40px;
        padding-right: 40px;
    }

    .ws-standalone-hero-title {
        font-size: 32px;
        letter-spacing: 2px;
    }

    .ws-standalone-byline {
        font-size: 12px;
        letter-spacing: 2px;
    }

    .ws-standalone-content {
        padding: 60px 30px;
    }

    .ws-standalone-content.ws-standalone-contained {
        padding-left: 40px;
        padding-right: 40px;
    }

    .ws-standalone-body h2 { font-size: 26px; }
    .ws-standalone-body h3 { font-size: 20px; }
    .ws-standalone-body h4 { font-size: 18px; }
}

@media (max-width: 480px) {
    .ws-standalone-hero {
        min-height: 40vh;
        padding: 70px 20px 50px;
    }

    .ws-standalone-hero.ws-standalone-contained {
        padding-left: 24px;
        padding-right: 24px;
    }

    .ws-standalone-hero-title {
        font-size: 26px;
        letter-spacing: 1px;
    }

    .ws-standalone-content {
        padding: 40px 20px;
    }

    .ws-standalone-content.ws-standalone-contained {
        padding-left: 24px;
        padding-right: 24px;
    }
}

/* ========================================
   全站语言切换器（简 / 繁 / EN）
   PC：导航栏最右侧；移动端：侧推菜单底部
   ======================================== */
.ws-lang {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

.ws-lang-item {
    display: flex;
    align-items: center;
    margin-left: 6px;
}

.ws-lang-link {
    color: var(--color-nav);
    line-height: 1;
    transition: color var(--duration-micro) var(--ease-smooth);
}

.ws-nav .ws-lang-link {
    font-size: 12px;
    letter-spacing: 1px;
}

/* 语言链接不需要导航项的下划线动效 */
.ws-nav .ws-lang-link::after,
.ws-nav .ws-lang-link:hover::after {
    display: none;
}

.ws-lang-link:hover,
.ws-lang-link.is-active {
    color: var(--color-black);
}

.ws-lang-link.is-active {
    font-weight: 500;
}

.ws-lang-sep {
    font-size: 11px;
    color: var(--color-border);
    user-select: none;
}

/* 移动端：放在侧推菜单底部，右对齐，用一条细线与导航分隔 */
.ws-lang-mobile {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
    margin-top: 28px;
    padding-top: 20px;
    border-top: 1px solid var(--color-border);
}

.ws-mobile-nav .ws-lang-mobile .ws-lang-link {
    display: inline-block;
    font-size: 14px;
    letter-spacing: 1px;
    padding: 4px 2px;
    border-bottom: none;
    color: var(--color-nav);
}

.ws-mobile-nav .ws-lang-mobile .ws-lang-link:hover {
    text-indent: 0;
    color: var(--color-black);
}

.ws-mobile-nav .ws-lang-mobile .ws-lang-link.is-active {
    color: var(--color-black);
}

/* 英文页的机器翻译提示（页脚，仅英文时输出） */
.ws-mt-note {
    margin-top: 18px;
    font-size: 11px;
    letter-spacing: 1px;
    color: var(--color-gray);
    text-align: center;
}
