/* ============================================================
   GCCA学务通 · 多主题设计系统 (theme.css)
   ------------------------------------------------------------
   三套主题通过 <html data-theme="..."> 切换，差异克制、保持统一语言：
     · minimal (默认)  中性米色极简 —— 内部人员 / 日常办公
     · vibrant         活力渐变     —— 合作学校方
     · soft            柔和温暖     —— 家长端
   皮肤设置在「个人设置 → 皮肤设置」，按账号记忆，未登录默认米色极简。
   所有页面复用统一类名，此文件只升级视觉令牌与组件外观，
   不改动任何业务逻辑，保证功能零丢失。
   ============================================================ */

/* ============================================================
   0. 全局基础
   ============================================================ */
body {
    font-family: "Inter", "SF Pro Text", "Segoe UI", -apple-system, BlinkMacSystemFont, "PingFang SC", "HarmonyOS Sans SC", "Microsoft YaHei", "Hiragino Sans GB", "Helvetica Neue", Arial, sans-serif;
    font-feature-settings: 'tnum', 'cv05', 'cv11';
    letter-spacing: 0.1px;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-rendering: optimizeLegibility;
}

/* 标题更紧凑、更有力（Premium 排版：大字号 + 收紧字距） */
h1, h2, h3, .nav-brand h1, .page-header h2, .card-title, .stat-value, .page-stat .ps-value {
    letter-spacing: -0.01em;
}

/* 数字与数据：等宽数字位 */
.stat-value, .page-stat .ps-value, .data-table td, .progress-text, .badge, .meta-chip {
    font-variant-numeric: tabular-nums;
}

::selection {
    background: var(--color-accent-soft);
    color: var(--color-ink);
}

/* 更精致的滚动条 */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--color-border); border-radius: 8px; }
::-webkit-scrollbar-thumb:hover { background: var(--color-text-muted); }

/* 平滑主题切换过渡 */
body, .navbar, .card, .modal, .login-card, .stat-card, .badge, .tab-bar,
.form-input, .form-select, .form-textarea, .btn, table, .nav-menu, .mobile-tabbar {
    transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
}

/* ============================================================
   1. 主题令牌 · 米色极简（默认）—— Premium Black + Gold
   （ui-ux-pro-max: Luxury/Premium #1C1917 + 金 #A16207 + 暖底 #FAFAF9）
   ============================================================ */
:root,
[data-theme="minimal"] {
    /* 色板 · 暖米色 + 高端炭黑 */
    --color-bg: #F6F4EF;
    --color-bg-deep: #EEEBE3;
    --color-surface: #FFFFFF;
    --color-surface-2: #F8F6F1;
    --color-ink: #1C1917;
    --color-ink-soft: #57534E;
    --color-text: #1C1917;
    --color-text-secondary: #57534E;
    --color-text-muted: #A19B92;
    --color-border: #E5E0D5;
    --color-border-light: #EFECE5;

    /* 主操作色 · 炭黑（高端克制） + 香槟金点缀 */
    --color-primary: #1C1917;
    --color-primary-light: #44403C;
    --color-primary-dark: #0C0A09;
    --color-accent: #8B6B43;
    --color-accent-soft: #F1EAE0;
    --color-gold: #A16207;
    --color-gold-soft: #F6EDDA;

    /* 状态色（低饱和） */
    --color-success: #55714F;
    --color-success-light: #72906B;
    --color-success-soft: #E9EFE6;
    --color-warning: #A9832F;
    --color-warning-light: #C2A054;
    --color-warning-soft: #F5EDDA;
    --color-danger: #B05546;
    --color-danger-light: #C97A6C;
    --color-danger-soft: #F6E7E3;
    --color-info: #4E5E7E;
    --color-info-light: #71819F;
    --color-info-soft: #E9EDF3;

    /* 导航 */
    --navbar-bg: rgba(251, 249, 245, 0.88);
    --navbar-border: #E5E0D5;
    --navbar-text: #1C1917;
    --navbar-text-soft: rgba(28, 25, 23, 0.70);
    --navbar-hover: rgba(28, 25, 23, 0.06);
    --navbar-active: rgba(139, 107, 67, 0.12);
    --navbar-blur: 14px;

    /* 阴影 · 暖色漫射 */
    --shadow-sm: 0 1px 2px rgba(28, 25, 23, 0.05), 0 2px 8px rgba(28, 25, 23, 0.05);
    --shadow-md: 0 2px 4px rgba(28, 25, 23, 0.05), 0 10px 28px rgba(28, 25, 23, 0.08);
    --shadow-lg: 0 4px 8px rgba(28, 25, 23, 0.06), 0 18px 48px rgba(28, 25, 23, 0.11);

    --radius-sm: 8px;
    --radius-md: 12px;
    --radius-lg: 16px;

    --btn-primary-shadow: 0 2px 12px rgba(28, 25, 23, 0.28);

    /* 登录页氛围 */
    --login-bg: linear-gradient(160deg, #EEEBE3 0%, #F6F4EF 45%, #E9E2D4 100%);
    --login-accent: #8B6B43;
}

/* ============================================================
   2. 主题令牌 · 活力渐变（合作学校方）—— Education Teal
   （ui-ux-pro-max: LMS 教育青绿 #0D9488 + 课程琥珀 #D97706 + 成绩绿）
   ============================================================ */
[data-theme="vibrant"] {
    --color-bg: #F0F7F5;
    --color-bg-deep: #E3F0ED;
    --color-surface: #FFFFFF;
    --color-surface-2: #F4FAF8;
    --color-ink: #134E4A;
    --color-ink-soft: #4B6B66;
    --color-text: #134E4A;
    --color-text-secondary: #4B6B66;
    --color-text-muted: #8BA8A3;
    --color-border: #D6E9E4;
    --color-border-light: #E7F3F0;

    --color-primary: #0D9488;
    --color-primary-light: #2DD4BF;
    --color-primary-dark: #0F766E;
    --color-accent: #D97706;
    --color-accent-soft: #FCF0E0;
    --color-gold: #D97706;
    --color-gold-soft: #FCF0E0;

    --color-success: #16A34A;
    --color-success-light: #34C56B;
    --color-success-soft: #E6F6EC;
    --color-warning: #D97706;
    --color-warning-light: #E89A2E;
    --color-warning-soft: #FCF1E2;
    --color-danger: #DC2626;
    --color-danger-light: #EF5B5B;
    --color-danger-soft: #FDEBEB;
    --color-info: #0891B2;
    --color-info-light: #22B8DB;
    --color-info-soft: #E3F3F8;

    --navbar-bg: linear-gradient(120deg, #0F766E 0%, #0D9488 45%, #059669 100%);
    --navbar-border: transparent;
    --navbar-text: #FFFFFF;
    --navbar-text-soft: rgba(255, 255, 255, 0.82);
    --navbar-hover: rgba(255, 255, 255, 0.14);
    --navbar-active: rgba(255, 255, 255, 0.22);
    --navbar-blur: 0px;

    --shadow-sm: 0 1px 2px rgba(13, 148, 136, 0.06), 0 2px 8px rgba(13, 148, 136, 0.06);
    --shadow-md: 0 2px 4px rgba(13, 148, 136, 0.07), 0 10px 28px rgba(13, 148, 136, 0.11);
    --shadow-lg: 0 4px 8px rgba(13, 148, 136, 0.09), 0 18px 48px rgba(13, 148, 136, 0.15);

    --radius-sm: 8px;
    --radius-md: 12px;
    --radius-lg: 16px;

    --btn-primary-shadow: 0 4px 16px rgba(13, 148, 136, 0.38);

    --login-bg: linear-gradient(135deg, #0F766E 0%, #0D9488 45%, #059669 80%, #D97706 130%);
    --login-accent: #FFFFFF;
}

/* ============================================================
   3. 主题令牌 · 柔和温暖（家长端）
   ============================================================ */
[data-theme="soft"] {
    --color-bg: #FCF8F3;
    --color-bg-deep: #F5EBE0;
    --color-surface: #FFFFFF;
    --color-surface-2: #F9F3EC;
    --color-ink: #3A362F;
    --color-ink-soft: #6E675C;
    --color-text: #3A362F;
    --color-text-secondary: #6E675C;
    --color-text-muted: #A79E90;
    --color-border: #EDE3D6;
    --color-border-light: #F3EBE1;

    --color-primary: #3D9B8C;
    --color-primary-light: #5FB5A6;
    --color-primary-dark: #2F7E71;
    --color-accent: #E8A87C;
    --color-accent-soft: #FBF0E6;
    --color-gold: #D9A441;
    --color-gold-soft: #FBF3E0;

    --color-success: #4C9F70;
    --color-success-light: #6FB98E;
    --color-success-soft: #E9F3EC;
    --color-warning: #D9A441;
    --color-warning-light: #E4B86A;
    --color-warning-soft: #FBF3E0;
    --color-danger: #D97B6C;
    --color-danger-light: #E59A8E;
    --color-danger-soft: #FBECE8;
    --color-info: #5B9BD5;
    --color-info-light: #7FB3E2;
    --color-info-soft: #E9F1FA;

    --navbar-bg: rgba(255, 252, 248, 0.88);
    --navbar-border: #EDE3D6;
    --navbar-text: #3D9B8C;
    --navbar-text-soft: rgba(61, 155, 140, 0.75);
    --navbar-hover: rgba(61, 155, 140, 0.10);
    --navbar-active: rgba(61, 155, 140, 0.16);
    --navbar-blur: 12px;

    --shadow-sm: 0 1px 3px rgba(122, 92, 55, 0.06), 0 3px 10px rgba(122, 92, 55, 0.06);
    --shadow-md: 0 3px 6px rgba(122, 92, 55, 0.07), 0 12px 30px rgba(122, 92, 55, 0.10);
    --shadow-lg: 0 6px 12px rgba(122, 92, 55, 0.08), 0 20px 52px rgba(122, 92, 55, 0.14);

    --radius-sm: 10px;
    --radius-md: 14px;
    --radius-lg: 20px;

    --btn-primary-shadow: 0 4px 14px rgba(61, 155, 140, 0.30);

    --login-bg: linear-gradient(160deg, #F4EAE0 0%, #FBF6F0 50%, #F9EADD 100%);
    --login-accent: #3D9B8C;
}

/* ============================================================
   4. 组件外观升级（全部主题共享，跟随令牌）
   ============================================================ */

/* ---- 顶部导航 ---- */
.navbar {
    background: var(--navbar-bg);
    box-shadow: 0 1px 0 var(--navbar-border);
    -webkit-backdrop-filter: blur(var(--navbar-blur));
    backdrop-filter: blur(var(--navbar-blur));
    border-bottom: 1px solid var(--navbar-border);
}

.nav-brand h1 {
    color: var(--navbar-text);
    font-weight: 700;
    letter-spacing: 0.2px;
}

.nav-subtitle {
    color: var(--navbar-text-soft);
}

.nav-link {
    color: var(--navbar-text-soft);
    font-weight: 450;
}

.nav-link:hover {
    color: var(--navbar-text);
    background: var(--navbar-hover);
}

.nav-link.active {
    color: var(--navbar-text);
    background: var(--navbar-active);
    font-weight: 600;
}

.nav-group-label {
    color: var(--navbar-text-soft);
}

.nav-group:hover .nav-group-label,
.nav-group-label.hover {
    color: var(--navbar-text);
    background: var(--navbar-hover);
}

.nav-group.open .nav-dropdown,
.nav-group:hover .nav-dropdown {
    border: 1px solid var(--color-border);
    background: var(--color-surface);
    box-shadow: var(--shadow-md);
    border-radius: var(--radius-md);
    overflow: hidden;
    padding: 6px;
    gap: 2px;
}

.nav-dropdown .nav-link {
    color: var(--color-text) !important;
    border-radius: var(--radius-sm);
    padding: 9px 14px;
}

.nav-dropdown .nav-link:hover {
    color: var(--color-primary) !important;
    background: var(--color-accent-soft);
}

.nav-dropdown .nav-link.active {
    color: var(--color-primary) !important;
    background: var(--color-accent-soft);
    font-weight: 600;
}

.nav-user {
    color: var(--navbar-text);
}

.nav-user .nav-link {
    color: var(--navbar-text-soft);
}

.nav-user .nav-link:hover {
    color: var(--navbar-text);
    background: var(--navbar-hover);
    border-radius: var(--radius-sm);
}

.nav-user .btn-outline {
    border-color: var(--navbar-border);
    color: var(--navbar-text);
}

.nav-user .btn-outline:hover {
    border-color: var(--navbar-text);
    color: var(--navbar-text);
    background: var(--navbar-hover);
}

/* ---- 页面标题 ---- */
.page-title {
    color: var(--color-ink);
    padding-left: 14px;
    border-left: 3px solid var(--color-accent);
    letter-spacing: -0.2px;
}

/* ---- 卡片 ---- */
.card {
    background: var(--color-surface);
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-sm);
}

.card:hover {
    transform: translateY(-2px);
    box-shadow: var(--shadow-md);
    border-color: var(--color-border);
}

.card-header {
    border-bottom: 1px solid var(--color-border-light);
}

.card-title {
    color: var(--color-ink);
}

/* ---- 按钮 ---- */
.btn-primary {
    background: linear-gradient(180deg, var(--color-primary-light), var(--color-primary));
    color: #fff;
    box-shadow: none;
}

.btn-primary:hover {
    background: linear-gradient(180deg, var(--color-primary-light), var(--color-primary));
    box-shadow: var(--btn-primary-shadow);
    transform: translateY(-1px);
    filter: brightness(1.05);
}

.btn-primary:active {
    transform: translateY(0) scale(0.98);
    filter: none;
}

.btn-success {
    background: var(--color-success);
}

.btn-success:hover {
    background: var(--color-success-light);
    box-shadow: 0 3px 12px color-mix(in srgb, var(--color-success) 35%, transparent);
}

.btn-danger {
    background: var(--color-danger);
}

.btn-danger:hover {
    background: var(--color-danger-light);
    box-shadow: 0 3px 12px color-mix(in srgb, var(--color-danger) 35%, transparent);
}

.btn-warning {
    background: var(--color-warning);
    color: #fff;
}

.btn-warning:hover {
    background: var(--color-warning-light);
    box-shadow: 0 3px 12px color-mix(in srgb, var(--color-warning) 35%, transparent);
}

.btn-outline {
    border: 1px solid var(--color-border);
    color: var(--color-text-secondary);
    background: transparent;
}

.btn-outline:hover {
    border-color: var(--color-primary);
    color: var(--color-primary);
    background: var(--color-accent-soft);
}

/* ---- 徽章（柔和底色） ---- */
.badge-success { background: var(--color-success-soft); color: var(--color-success); }
.badge-warning { background: var(--color-warning-soft); color: var(--color-warning); }
.badge-danger  { background: var(--color-danger-soft);  color: var(--color-danger); }
.badge-info    { background: var(--color-info-soft);    color: var(--color-info); }

/* ---- 标签页 ---- */
.tab-bar {
    border-bottom: 1px solid var(--color-border-light);
    background: transparent;
}

.tab-item {
    color: var(--color-text-muted);
}

.tab-item:hover {
    color: var(--color-primary);
    background: var(--color-accent-soft);
}

.tab-item.active,
.tab-item.tab-active {
    color: var(--color-primary);
    border-bottom-color: var(--color-primary);
    font-weight: 600;
}

/* ---- 表单 ---- */
.form-input,
.form-select,
.form-textarea {
    border: 1px solid var(--color-border);
    background: var(--color-surface);
    color: var(--color-ink);
    border-radius: var(--radius-sm);
}

.form-input:focus,
.form-select:focus,
.form-textarea:focus {
    border-color: var(--color-accent);
    box-shadow: 0 0 0 3px var(--color-accent-soft);
    outline: none;
}

.form-label {
    color: var(--color-ink-soft);
    font-weight: 550;
}

/* ---- 表格 ---- */
.data-table table,
table {
    border-collapse: collapse;
    width: 100%;
}

.data-table th,
table th {
    background: var(--color-surface-2);
    color: var(--color-text-secondary);
    font-weight: 600;
    border-bottom: 1px solid var(--color-border);
}

.data-table td,
table td {
    border-bottom: 1px solid var(--color-border-light);
    color: var(--color-text);
}

table tr:hover td {
    background: var(--color-accent-soft);
}

/* ---- 统计卡片 ---- */
.stat-card {
    background: var(--color-surface);
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-sm);
    position: relative;
    overflow: hidden;
}

.stat-card:hover {
    transform: translateY(-3px);
    box-shadow: var(--shadow-md);
}

/* 顶部细色条替代原左侧粗色条 */
.stat-card::before {
    left: 0;
    top: 0;
    width: 100%;
    height: 3px;
    border-radius: 0;
}

/* ---- 登录页 ---- */
.login-container {
    background: var(--login-bg);
}

.login-card {
    background: var(--color-surface);
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-lg);
}

.login-title {
    color: var(--color-ink);
    letter-spacing: -0.5px;
}

.login-tabs {
    border-bottom: 2px solid var(--color-border-light);
}

.login-tab.active {
    color: var(--login-accent);
    border-bottom-color: var(--login-accent);
}

.login-subtab.active {
    color: var(--login-accent);
    border-bottom-color: var(--login-accent);
}

.login-card a {
    color: var(--color-accent);
}

/* ---- 空状态 ---- */
.empty-state {
    background: var(--color-surface);
    border: 1px dashed var(--color-border);
    border-radius: var(--radius-md);
    color: var(--color-text-muted);
}

/* ---- 页脚 ---- */
.footer {
    background: var(--color-surface);
    border-top: 1px solid var(--color-border-light);
    color: var(--color-text-muted);
}

.footer a {
    color: var(--color-primary);
}

/* ---- 模态框 ---- */
.modal-overlay {
    background: rgba(20, 18, 15, 0.45);
    -webkit-backdrop-filter: blur(2px);
    backdrop-filter: blur(2px);
}

.modal {
    background: var(--color-surface);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-lg);
    border: 1px solid var(--color-border-light);
}

/* ---- 头像 ---- */
.avatar {
    background: var(--color-accent-soft);
    color: var(--color-accent);
}

/* ============================================================
   5. 顶部导航 · 移动端改造（汉堡抽屉）
   ============================================================ */

/* 汉堡按钮（移动端显示） */
.nav-hamburger {
    display: none;
    flex-direction: column;
    justify-content: center;
    gap: 5px;
    width: 40px;
    height: 40px;
    padding: 9px;
    border: none;
    border-radius: var(--radius-sm);
    background: transparent;
    cursor: pointer;
    margin-right: 6px;
    flex-shrink: 0;
    transition: background 0.2s;
}

.nav-hamburger:hover { background: var(--navbar-hover); }

.nav-hamburger span {
    display: block;
    height: 2px;
    width: 100%;
    border-radius: 2px;
    background: var(--navbar-text);
    transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.2s;
}

.nav-hamburger.open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav-hamburger.open span:nth-child(2) { opacity: 0; }
.nav-hamburger.open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

/* 抽屉遮罩 */
.drawer-overlay {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(20, 18, 15, 0.42);
    z-index: 199;
    opacity: 0;
    transition: opacity 0.25s ease;
}

.drawer-overlay.show {
    display: block;
    opacity: 1;
}

@media (max-width: 768px) {
    .nav-hamburger { display: flex; }

    /* 移动端移除 navbar 磨砂（backdrop-filter 会创建 stacking context，
       导致抽屉 z-index 被压制在遮罩之下，点不到菜单） */
    .navbar {
        -webkit-backdrop-filter: none;
        backdrop-filter: none;
        /* 提升 navbar 层级至遮罩(199)之上，抽屉(z-index:200 困于 navbar 内)
           才能显示在遮罩上层并被点击 */
        z-index: 200;
    }

    /* 导航抽屉：桌面水平条 → 移动端侧滑抽屉 */
    .navbar {
        flex-wrap: nowrap;
        height: 58px;
        padding: 0 12px;
    }

    .nav-brand {
        flex: 1;
        min-width: 0;
        display: flex;
        align-items: center;
        gap: 8px;
        overflow: hidden;
    }

    .nav-brand h1 {
        font-size: 17px;
        white-space: nowrap;
    }

    .nav-subtitle { display: none; }

    .nav-menu {
        position: fixed;
        top: 0;
        left: 0;
        height: 100vh;
        height: 100dvh;
        width: min(300px, 82vw);
        margin: 0;
        padding: 0;
        background: var(--color-surface);
        flex-direction: column;
        align-items: stretch;
        justify-content: flex-start;
        overflow-y: auto;
        overflow-x: hidden;
        transform: translateX(-105%);
        transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
        z-index: 200;
        box-shadow: var(--shadow-lg);
        -webkit-overflow-scrolling: touch;
        gap: 2px;
        padding: 8px 10px 24px;
    }

    .nav-menu.open { transform: translateX(0); }

    /* 抽屉头部品牌标识 */
    .nav-menu::before {
        content: 'GCCA学务通';
        display: block;
        padding: 18px 14px 12px;
        font-size: 17px;
        font-weight: 700;
        color: var(--color-ink);
        border-bottom: 1px solid var(--color-border-light);
        margin-bottom: 8px;
    }

    /* 抽屉内链接 */
    .nav-menu .nav-link {
        color: var(--color-text);
        font-size: 14px;
        padding: 11px 14px;
        border-radius: var(--radius-sm);
    }

    .nav-menu .nav-link:hover,
    .nav-menu .nav-link.active {
        color: var(--color-primary);
        background: var(--color-accent-soft);
    }

    /* 分组标签改成一列 */
    .nav-group {
        display: flex;
        flex-direction: column;
    }

    .nav-group-label,
    .nav-group-label-link {
        color: var(--color-text);
        padding: 11px 14px;
        border-radius: var(--radius-sm);
        font-weight: 550;
        justify-content: space-between;
    }

    .nav-group-label::after {
        content: '›';
        font-size: 14px;
        transform: none;
        color: var(--color-text-muted);
        margin-left: auto;
    }

    .nav-group.open .nav-group-label::after {
        transform: rotate(90deg);
    }

    .nav-group:hover .nav-group-label,
    .nav-group-label.hover {
        color: var(--color-primary);
        background: var(--color-accent-soft);
    }

    .nav-group:hover .nav-dropdown,
    .nav-group.open .nav-dropdown {
        position: static;
        display: none;
        box-shadow: none;
        border: none;
        padding: 0 0 0 14px;
        margin: 0;
        background: transparent;
        gap: 0;
    }

    .nav-group.open .nav-dropdown { display: flex; }

    .nav-dropdown .nav-link {
        color: var(--color-text-secondary) !important;
        padding: 10px 14px;
        font-size: 14px;
        border-radius: var(--radius-sm);
    }

    .nav-dropdown .nav-link:hover,
    .nav-dropdown .nav-link.active {
        color: var(--color-primary) !important;
        background: var(--color-accent-soft);
    }

    /* 移动端隐藏昵称与个人设置文字链，收进抽屉底部 */
    .nav-user #user-name,
    .nav-user .nav-link[href="#/profile"] { display: none; }

    .nav-user {
        gap: 6px;
        margin-left: auto;
    }

    .nav-user .btn-outline {
        width: 36px;
        height: 36px;
        padding: 0;
        border-radius: 50%;
        font-size: 0;
        position: relative;
    }

    .nav-user .btn-outline::after {
        content: '退出';
        font-size: 13px;
        font-weight: 500;
    }

    /* 抽屉内用户信息区（移动端显示，桌面隐藏） */
    .drawer-user {
        display: block;
        padding: 14px;
        margin-bottom: 8px;
        background: var(--color-accent-soft);
        border: 1px solid var(--color-border-light);
        border-radius: var(--radius-sm);
    }
    .drawer-user-top { display: flex; align-items: center; gap: 10px; }
    .drawer-user-avatar {
        width: 38px; height: 38px; border-radius: 50%;
        background: var(--color-primary); color: #fff;
        display: flex; align-items: center; justify-content: center;
        font-size: 16px; font-weight: 700; flex-shrink: 0;
    }
    .drawer-user-name { font-size: 15px; font-weight: 600; color: var(--color-ink); word-break: break-all; }
    .drawer-user-role { font-size: 12px; color: var(--color-text-muted); margin-top: 1px; }
    .drawer-user-actions { display: flex; gap: 8px; margin-top: 10px; }
    .drawer-user-actions a,
    .drawer-user-actions button {
        flex: 1; text-align: center; padding: 9px 10px;
        border-radius: 8px; font-size: 13px; cursor: pointer;
        border: 1px solid var(--color-border-light);
        background: var(--color-surface); color: var(--color-primary);
        text-decoration: none; white-space: nowrap;
    }
    .drawer-user-actions button { color: var(--color-danger); }
}

@media (min-width: 769px) {
    .drawer-user { display: none !important; }
}

/* ============================================================
   6. 移动端底部 Tab 栏
   ============================================================ */
.mobile-tabbar {
    display: none;
}

@media (max-width: 768px) {
    .mobile-tabbar {
        display: flex;
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        height: 58px;
        padding-bottom: env(safe-area-inset-bottom);
        background: var(--color-surface);
        border-top: 1px solid var(--color-border-light);
        box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.04);
        z-index: 150;
    }

    .mobile-tabbar .tab-item-m {
        flex: 1;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        gap: 3px;
        text-decoration: none;
        color: var(--color-text-muted);
        font-size: 11px;
        font-weight: 500;
        transition: color 0.2s;
        position: relative;
        border: none;
        background: none;
        cursor: pointer;
        padding: 4px 0 6px;
    }

    .mobile-tabbar .tab-item-m svg {
        width: 22px;
        height: 22px;
        stroke: currentColor;
        fill: none;
        stroke-width: 1.8;
        stroke-linecap: round;
        stroke-linejoin: round;
    }

    .mobile-tabbar .tab-item-m.active {
        color: var(--color-primary);
    }

    .mobile-tabbar .tab-item-m.active::before {
        content: '';
        position: absolute;
        top: 0;
        left: 50%;
        transform: translateX(-50%);
        width: 20px;
        height: 3px;
        border-radius: 0 0 4px 4px;
        background: var(--color-primary);
    }

    /* 消息红点 */
    .mobile-tabbar .m-badge {
        position: absolute;
        top: 4px;
        right: calc(50% - 16px);
        min-width: 16px;
        height: 16px;
        padding: 0 4px;
        border-radius: 8px;
        background: var(--color-danger);
        color: #fff;
        font-size: 10px;
        line-height: 16px;
        text-align: center;
        display: none;
    }

    /* 内容区给底部 Tab 让位 */
    .main-content {
        padding: 16px 16px 84px;
    }

    /* 底部AI悬浮按钮上移，避开Tab栏 */
    #ai-assistant-btn {
        bottom: 74px !important;
        right: 16px !important;
        width: 50px !important;
        height: 50px !important;
        font-size: 22px !important;
    }

    /* 隐藏原横向滚动导航残留 */
    .nav-menu::-webkit-scrollbar { display: none; }
}

/* ============================================================
   7. 个人设置 · 皮肤设置
   ============================================================ */
.skin-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px;
}

.skin-option {
    border: 2px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: 14px 12px;
    cursor: pointer;
    text-align: center;
    background: var(--color-surface);
    transition: all 0.2s ease;
    position: relative;
}

.skin-option:hover {
    border-color: var(--color-accent);
    transform: translateY(-2px);
    box-shadow: var(--shadow-sm);
}

.skin-option.active {
    border-color: var(--color-primary);
    box-shadow: 0 0 0 3px var(--color-accent-soft);
}

.skin-option .skin-preview {
    height: 52px;
    border-radius: var(--radius-sm);
    margin-bottom: 10px;
    border: 1px solid var(--color-border-light);
    overflow: hidden;
    display: flex;
}

.skin-option .skin-preview .skin-bar {
    width: 100%;
    height: 18px;
    display: flex;
    align-items: center;
    padding: 0 8px;
    font-size: 8px;
    color: rgba(255, 255, 255, 0.0);
}

.skin-option .skin-preview .skin-body {
    flex: 1;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 4px;
    padding: 6px;
}

.skin-option .skin-preview .skin-body i {
    display: block;
    border-radius: 3px;
    background: var(--color-border-light);
}

.skin-option .skin-name {
    font-size: 13px;
    font-weight: 600;
    color: var(--color-ink);
}

.skin-option .skin-desc {
    font-size: 11px;
    color: var(--color-text-muted);
    margin-top: 2px;
}

.skin-option .skin-check {
    position: absolute;
    top: 8px;
    right: 8px;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: var(--color-primary);
    color: #fff;
    font-size: 11px;
    line-height: 18px;
    text-align: center;
    display: none;
}

.skin-option.active .skin-check { display: block; }

/* 预览块配色（与三主题一致） */
.skin-option[data-theme-opt="minimal"] .skin-bar { background: #F6F4EF; }
.skin-option[data-theme-opt="minimal"] .skin-body i:nth-child(1) { background: #1C1917; }
.skin-option[data-theme-opt="minimal"] .skin-body i:nth-child(2) { background: #E5E0D5; }
.skin-option[data-theme-opt="minimal"] .skin-body i:nth-child(3) { background: #F1EAE0; }
.skin-option[data-theme-opt="minimal"] .skin-body i:nth-child(4) { background: #FFFFFF; }

.skin-option[data-theme-opt="vibrant"] .skin-bar { background: linear-gradient(120deg, #0F766E, #059669); }
.skin-option[data-theme-opt="vibrant"] .skin-body i:nth-child(1) { background: #0D9488; }
.skin-option[data-theme-opt="vibrant"] .skin-body i:nth-child(2) { background: #D6E9E4; }
.skin-option[data-theme-opt="vibrant"] .skin-body i:nth-child(3) { background: #FCF0E0; }
.skin-option[data-theme-opt="vibrant"] .skin-body i:nth-child(4) { background: #FFFFFF; }

.skin-option[data-theme-opt="soft"] .skin-bar { background: #FCF8F3; }
.skin-option[data-theme-opt="soft"] .skin-body i:nth-child(1) { background: #3D9B8C; }
.skin-option[data-theme-opt="soft"] .skin-body i:nth-child(2) { background: #EDE3D6; }
.skin-option[data-theme-opt="soft"] .skin-body i:nth-child(3) { background: #FBF0E6; }
.skin-option[data-theme-opt="soft"] .skin-body i:nth-child(4) { background: #FFFFFF; }

@media (max-width: 480px) {
    .skin-grid { grid-template-columns: 1fr; }
    .skin-option { display: flex; align-items: center; gap: 12px; text-align: left; }
    .skin-option .skin-preview { width: 84px; height: 46px; margin: 0; flex-shrink: 0; }
}

/* ============================================================
   8. 细节精修（全主题）
   ============================================================ */

/* 链接统一使用强调色 */
a { color: var(--color-accent); }
a:hover { color: var(--color-primary); }

/* 文本工具类适配主题 */
.text-muted { color: var(--color-text-muted) !important; }

/* toast */
.toast {
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-md);
}

/* 桌面端大屏时导航更紧凑 */
@media (min-width: 769px) {
    .navbar { padding: 0 20px; }
    .main-content { max-width: 1240px; }
}

/* ---- AI 助手悬浮按钮 ---- */
#ai-assistant-btn {
    position: fixed;
    right: 20px;
    bottom: 20px;
    width: 56px;
    height: 56px;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--color-primary), var(--color-accent));
    color: #fff;
    border: none;
    cursor: pointer;
    box-shadow: 0 4px 16px color-mix(in srgb, var(--color-primary) 40%, transparent);
    z-index: 9999;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.25s;
}

#ai-assistant-btn:hover {
    transform: scale(1.08) translateY(-2px);
    box-shadow: 0 8px 24px color-mix(in srgb, var(--color-primary) 45%, transparent);
}

#ai-assistant-btn:active {
    transform: scale(0.96);
}

/* ============================================================
   9. 动效系统（Operate 模式：反馈、状态、连续性）
   ============================================================ */

/* ---- 页面入场：弹性浮现 + 层级 stagger（ui-ux-pro-max: Stagger List, back.out） ---- */
#page-container.page-enter > *:not(.login-container):not(.page-loading) {
    animation: gccaEnter 0.42s cubic-bezier(0.34, 1.35, 0.64, 1) both;
}

#page-container.page-enter > *:nth-child(2) { animation-delay: 0.05s; }
#page-container.page-enter > *:nth-child(3) { animation-delay: 0.10s; }
#page-container.page-enter > *:nth-child(4) { animation-delay: 0.15s; }
#page-container.page-enter > *:nth-child(5) { animation-delay: 0.20s; }
#page-container.page-enter > *:nth-child(6) { animation-delay: 0.25s; }

/* 网格/卡片容器内部：波浪式 stagger（避免用于密集数据表） */
#page-container.page-enter .entity-grid > *,
#page-container.page-enter .stats-grid > *,
#page-container.page-enter .quick-grid > *,
#page-container.page-enter .bento-2 > *,
#page-container.page-enter .bento-3 > *,
#page-container.page-enter .moment-list > *,
#page-container.page-enter .child-list > *,
#page-container.page-enter .activity-grid > *,
#page-container.page-enter .media-grid > *,
#page-container.page-enter .course-grid > *,
#page-container.page-enter .exchange-grid > *,
#page-container.page-enter .competition-grid > * {
    animation: gccaCardIn 0.36s cubic-bezier(0.34, 1.35, 0.64, 1) both;
}
#page-container.page-enter .entity-grid > *:nth-child(2),
#page-container.page-enter .stats-grid > *:nth-child(2),
#page-container.page-enter .quick-grid > *:nth-child(2),
#page-container.page-enter .bento-2 > *:nth-child(2),
#page-container.page-enter .bento-3 > *:nth-child(2),
#page-container.page-enter .moment-list > *:nth-child(2),
#page-container.page-enter .child-list > *:nth-child(2),
#page-container.page-enter .activity-grid > *:nth-child(2),
#page-container.page-enter .media-grid > *:nth-child(2),
#page-container.page-enter .course-grid > *:nth-child(2),
#page-container.page-enter .exchange-grid > *:nth-child(2),
#page-container.page-enter .competition-grid > *:nth-child(2) { animation-delay: 0.06s; }
#page-container.page-enter .entity-grid > *:nth-child(3),
#page-container.page-enter .stats-grid > *:nth-child(3),
#page-container.page-enter .quick-grid > *:nth-child(3),
#page-container.page-enter .bento-2 > *:nth-child(3),
#page-container.page-enter .bento-3 > *:nth-child(3),
#page-container.page-enter .moment-list > *:nth-child(3),
#page-container.page-enter .child-list > *:nth-child(3),
#page-container.page-enter .activity-grid > *:nth-child(3),
#page-container.page-enter .media-grid > *:nth-child(3),
#page-container.page-enter .course-grid > *:nth-child(3),
#page-container.page-enter .exchange-grid > *:nth-child(3),
#page-container.page-enter .competition-grid > *:nth-child(3) { animation-delay: 0.12s; }
#page-container.page-enter .entity-grid > *:nth-child(4),
#page-container.page-enter .stats-grid > *:nth-child(4),
#page-container.page-enter .quick-grid > *:nth-child(4),
#page-container.page-enter .moment-list > *:nth-child(4),
#page-container.page-enter .child-list > *:nth-child(4),
#page-container.page-enter .activity-grid > *:nth-child(4),
#page-container.page-enter .media-grid > *:nth-child(4),
#page-container.page-enter .course-grid > *:nth-child(4),
#page-container.page-enter .exchange-grid > *:nth-child(4),
#page-container.page-enter .competition-grid > *:nth-child(4) { animation-delay: 0.18s; }
#page-container.page-enter .entity-grid > *:nth-child(5),
#page-container.page-enter .moment-list > *:nth-child(5),
#page-container.page-enter .child-list > *:nth-child(5),
#page-container.page-enter .activity-grid > *:nth-child(5),
#page-container.page-enter .media-grid > *:nth-child(5),
#page-container.page-enter .course-grid > *:nth-child(5) { animation-delay: 0.24s; }
#page-container.page-enter .entity-grid > *:nth-child(6),
#page-container.page-enter .activity-grid > *:nth-child(6),
#page-container.page-enter .media-grid > *:nth-child(6),
#page-container.page-enter .course-grid > *:nth-child(6) { animation-delay: 0.30s; }

@keyframes gccaEnter {
    from { opacity: 0; transform: translateY(14px); }
    to   { opacity: 1; transform: translateY(0); }
}

@keyframes gccaCardIn {
    from { opacity: 0; transform: translateY(12px) scale(0.97); }
    to   { opacity: 1; transform: translateY(0) scale(1); }
}

/* ---- 加载态：柔光呼吸 + 升级spinner ---- */
.page-loading {
    position: relative;
    overflow: hidden;
}

.page-loading::before {
    content: '';
    position: absolute;
    inset: 0;
    background: radial-gradient(closest-side, var(--color-accent-soft), transparent 70%);
    opacity: 0.55;
    animation: gccaBreath 1.6s ease-in-out infinite;
    pointer-events: none;
}

@keyframes gccaBreath {
    0%, 100% { opacity: 0.25; transform: scale(0.96); }
    50%      { opacity: 0.6;  transform: scale(1); }
}

.loading-spinner {
    width: 40px;
    height: 40px;
    border: 3px solid var(--color-border-light);
    border-top-color: var(--color-accent);
    border-radius: 50%;
    animation: spin 0.7s linear infinite;
    position: relative;
    z-index: 1;
}

.loading-spinner::after {
    content: '';
    position: absolute;
    inset: -8px;
    border-radius: 50%;
    border: 1px dashed var(--color-accent);
    opacity: 0.35;
    animation: spin 1.6s linear infinite reverse;
}

/* ---- 模态框：沉稳落地 ---- */
@keyframes gccaModalIn {
    from { transform: translateY(14px) scale(0.96); opacity: 0; }
    to   { transform: translateY(0) scale(1); opacity: 1; }
}

.modal, .modal-content {
    animation: gccaModalIn 0.3s cubic-bezier(0.34, 1.3, 0.64, 1);
}

/* ---- 下拉菜单：快速展开 ---- */
@keyframes gccaDropIn {
    from { opacity: 0; transform: translateY(-6px) scale(0.98); }
    to   { opacity: 1; transform: translateY(0) scale(1); }
}

.nav-dropdown {
    transform-origin: top center;
}

.nav-group.open .nav-dropdown,
.nav-group:hover .nav-dropdown {
    animation: gccaDropIn 0.18s cubic-bezier(0.16, 1, 0.3, 1);
}

/* ---- 底部Tab激活条：生长 ---- */
.mobile-tabbar .tab-item-m.active::before {
    animation: gccaTabIn 0.25s cubic-bezier(0.34, 1.3, 0.64, 1);
}

@keyframes gccaTabIn {
    from { transform: translateX(-50%) scaleX(0); opacity: 0; }
    to   { transform: translateX(-50%) scaleX(1); opacity: 1; }
}

/* ---- 桌面导航链接：悬停/激活下划线生长 ---- */
@media (min-width: 769px) {
    .navbar .nav-link:not(.nav-dropdown .nav-link)::after {
        content: '';
        position: absolute;
        left: 14px;
        right: 14px;
        bottom: 4px;
        height: 2px;
        border-radius: 2px;
        background: var(--color-accent);
        transform: scaleX(0);
        transform-origin: left center;
        transition: transform 0.22s cubic-bezier(0.16, 1, 0.3, 1);
    }

    .navbar .nav-link:not(.nav-dropdown .nav-link):hover::after,
    .navbar .nav-link:not(.nav-dropdown .nav-link).active::after {
        transform: scaleX(1);
    }
}

/* ---- 卡片内容微交互 ---- */
.card {
    transition: transform 0.28s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.28s ease, border-color 0.28s ease, background-color 0.3s ease;
}

.card:hover .card-title { color: var(--color-primary); }

.card-header { transition: border-color 0.3s ease; }

/* 统计数字：等宽数字，滚动更稳 */
.stat-value {
    font-variant-numeric: tabular-nums;
    font-feature-settings: 'tnum';
}

/* ---- 按钮反馈 ---- */
.btn {
    transition: transform 0.18s cubic-bezier(0.16, 1, 0.3, 1), background-color 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}

.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0) scale(0.97); }

.btn:focus-visible,
.form-input:focus-visible {
    outline: 2px solid var(--color-accent);
    outline-offset: 2px;
}

/* ---- 原生表单控件适配主题 ---- */
input[type="checkbox"],
input[type="radio"] {
    accent-color: var(--color-primary);
}

/* ---- Toast：轻滑入场 ---- */
@keyframes gccaToastIn {
    from { opacity: 0; transform: translateY(12px) scale(0.96); }
    to   { opacity: 1; transform: translateY(0) scale(1); }
}

.toast {
    animation: gccaToastIn 0.26s cubic-bezier(0.34, 1.3, 0.64, 1);
}

/* ---- 公告横幅：滑落入场 ---- */
@keyframes gccaBannerIn {
    from { opacity: 0; transform: translateY(-100%); }
    to   { opacity: 1; transform: translateY(0); }
}

.announcement-banner:not(.hidden) {
    animation: gccaBannerIn 0.35s cubic-bezier(0.16, 1, 0.3, 1);
}

/* ---- 尊重系统「减少动态」偏好 ---- */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
}

/* ============================================================
   10. 高端组件库（首页/登录/工作台等展示页专用）
   ============================================================ */

/* ---- 欢迎横幅 Hero ---- */
.hero-panel {
    position: relative;
    overflow: hidden;
    border-radius: var(--radius-lg);
    border: 1px solid var(--color-border-light);
    background: var(--color-surface);
    box-shadow: var(--shadow-sm);
    padding: 26px 28px;
    margin-bottom: 22px;
}

.hero-panel::before,
.hero-panel::after {
    content: '';
    position: absolute;
    border-radius: 50%;
    filter: blur(48px);
    pointer-events: none;
    opacity: 0.5;
}

.hero-panel::before {
    width: 340px;
    height: 340px;
    right: -80px;
    top: -120px;
    background: var(--color-accent-soft);
}

.hero-panel::after {
    width: 260px;
    height: 260px;
    left: 30%;
    bottom: -140px;
    background: color-mix(in srgb, var(--color-primary) 10%, transparent);
}

.hero-content {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
}

.hero-avatar {
    width: 58px;
    height: 58px;
    border-radius: 20px;
    background: linear-gradient(135deg, var(--color-primary), var(--color-accent));
    color: #fff;
    font-size: 24px;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 6px 18px color-mix(in srgb, var(--color-primary) 30%, transparent);
    flex-shrink: 0;
    letter-spacing: 0;
}

.hero-greet {
    font-size: 22px;
    font-weight: 700;
    color: var(--color-ink);
    letter-spacing: -0.3px;
    margin: 0 0 4px;
}

.hero-sub {
    font-size: 13px;
    color: var(--color-text-muted);
    margin: 0;
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}

.hero-role-badge {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 12px;
    font-weight: 600;
    padding: 3px 10px;
    border-radius: 999px;
    background: var(--color-accent-soft);
    color: var(--color-accent);
}

.hero-cta {
    margin-left: auto;
}

/* ---- 统计卡（图标章 + 大数字） ---- */
.stat-card {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 18px;
}

/* 高级感：右上角柔和光晕 + 底部主题色生长线（::before 保留顶部色条） */
.stat-card::after {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: inherit;
    pointer-events: none;
    background:
        radial-gradient(circle at top right, var(--color-accent-soft), transparent 60%),
        linear-gradient(90deg, var(--color-accent), transparent 75%);
    background-size: 58% 58%, 62% 2px;
    background-position: top right, bottom left;
    background-repeat: no-repeat;
    opacity: 0.85;
    transition: opacity 0.3s ease;
}

.stat-card:hover::after {
    opacity: 1;
}

.stat-card .stat-icon {
    width: 42px;
    height: 42px;
    border-radius: 13px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--color-accent-soft);
    color: var(--color-accent);
    transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1);
}

.stat-card:hover .stat-icon {
    transform: scale(1.08) rotate(-4deg);
}

.stat-card .stat-icon svg {
    width: 21px;
    height: 21px;
    stroke: currentColor;
    fill: none;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.stat-card .stat-value {
    font-size: 26px;
    font-weight: 750;
    color: var(--color-ink);
    line-height: 1.1;
    letter-spacing: -0.5px;
}

.stat-card .stat-label {
    font-size: 13px;
    color: var(--color-text-muted);
    font-weight: 450;
}

/* 统计卡配色变体（图标章染色） */
.stat-card .t-blue   { background: var(--color-info-soft);    color: var(--color-info); }
.stat-card .t-green  { background: var(--color-success-soft); color: var(--color-success); }
.stat-card .t-amber  { background: var(--color-warning-soft); color: var(--color-warning); }
.stat-card .t-rose   { background: var(--color-danger-soft);  color: var(--color-danger); }
.stat-card .t-accent { background: var(--color-accent-soft);  color: var(--color-accent); }

/* ---- 快捷操作（图标瓷砖） ---- */
.quick-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
    gap: 12px;
}

.quick-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 9px;
    padding: 18px 10px 14px;
    border-radius: var(--radius-md);
    background: var(--color-surface);
    border: 1px solid var(--color-border-light);
    text-decoration: none;
    color: var(--color-text);
    transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.25s ease, border-color 0.25s ease;
    position: relative;
    overflow: hidden;
}

.quick-item::after {
    content: '→';
    position: absolute;
    right: 10px;
    top: 10px;
    font-size: 13px;
    color: var(--color-text-muted);
    opacity: 0;
    transform: translateX(-4px);
    transition: opacity 0.25s ease, transform 0.25s cubic-bezier(0.16, 1, 0.3, 1);
}

.quick-item:hover {
    transform: translateY(-4px);
    border-color: var(--color-border);
    box-shadow: var(--shadow-md);
}

.quick-item:hover::after {
    opacity: 1;
    transform: translateX(0);
}

.quick-item .qi-icon {
    width: 46px;
    height: 46px;
    border-radius: 15px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--color-accent);
    background: var(--color-accent-soft);
}

.quick-item .qi-icon svg {
    width: 22px;
    height: 22px;
    stroke: currentColor;
    fill: none;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.quick-item .qi-label {
    font-size: 13px;
    font-weight: 550;
    color: var(--color-ink);
}

/* ---- 章节头 ---- */
.section-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 14px;
}

.section-head h3 {
    font-size: 16px;
    font-weight: 700;
    color: var(--color-ink);
    letter-spacing: -0.2px;
    margin: 0;
    display: flex;
    align-items: center;
    gap: 8px;
}

.section-head h3::before {
    content: '';
    width: 4px;
    height: 16px;
    border-radius: 4px;
    background: linear-gradient(180deg, var(--color-accent), var(--color-primary));
}

.section-head .sh-link {
    font-size: 13px;
    color: var(--color-text-muted);
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 3px;
    transition: color 0.2s;
}

.section-head .sh-link:hover { color: var(--color-primary); }

/* ---- Bento 双栏/三栏栅格 ---- */
.bento-2 {
    display: grid;
    grid-template-columns: 2fr 1fr;
    gap: 18px;
}

.bento-3 {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 18px;
}

@media (max-width: 900px) {
    .bento-2, .bento-3 { grid-template-columns: 1fr; }
}

/* ---- 动态流条目 ---- */
.feed-item {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 14px 16px;
    border-radius: var(--radius-md);
    cursor: pointer;
    transition: background 0.2s ease;
}

.feed-item:hover { background: var(--color-surface-2); }

.feed-avatar {
    width: 38px;
    height: 38px;
    border-radius: 12px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 15px;
    font-weight: 600;
    color: #fff;
    background: linear-gradient(135deg, var(--color-primary), var(--color-accent));
}

.feed-body { flex: 1; min-width: 0; }

.feed-title {
    font-size: 14px;
    font-weight: 600;
    color: var(--color-ink);
    margin: 0 0 3px;
}

.feed-text {
    font-size: 13px;
    color: var(--color-text-secondary);
    margin: 0 0 5px;
    line-height: 1.55;
}

.feed-meta {
    font-size: 12px;
    color: var(--color-text-muted);
    display: flex;
    align-items: center;
    gap: 10px;
}

.feed-meta .fm-item {
    display: inline-flex;
    align-items: center;
    gap: 3px;
}

.feed-meta svg {
    width: 13px;
    height: 13px;
    stroke: currentColor;
    fill: none;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

/* ---- 登录页：高端分屏 ---- */
.login-shell {
    display: grid;
    grid-template-columns: 1.05fr 0.95fr;
    min-height: calc(100vh - 130px);
    margin: -24px;
    border-radius: 0;
    overflow: hidden;
    background: var(--color-surface);
}

.login-brand-panel {
    position: relative;
    overflow: hidden;
    background: var(--login-bg);
    padding: 56px 52px;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    color: var(--color-ink);
}

.login-brand-panel::before {
    content: '';
    position: absolute;
    width: 460px;
    height: 460px;
    border-radius: 50%;
    filter: blur(80px);
    opacity: 0.55;
    right: -140px;
    top: -140px;
    background: var(--color-accent-soft);
}

.login-brand-panel::after {
    content: '';
    position: absolute;
    width: 360px;
    height: 360px;
    border-radius: 50%;
    filter: blur(70px);
    opacity: 0.4;
    left: -120px;
    bottom: -120px;
    background: color-mix(in srgb, var(--color-primary) 16%, transparent);
}

.login-brand-logo {
    display: flex;
    align-items: center;
    gap: 14px;
    position: relative;
    z-index: 1;
}

.login-brand-logo .lb-mark {
    width: 52px;
    height: 52px;
    border-radius: 16px;
    background: linear-gradient(135deg, var(--color-primary), var(--color-accent));
    display: flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    font-weight: 800;
    font-size: 20px;
    box-shadow: 0 8px 22px color-mix(in srgb, var(--color-primary) 35%, transparent);
}

.login-brand-logo h2 {
    font-size: 22px;
    font-weight: 800;
    letter-spacing: -0.4px;
    margin: 0;
    color: var(--color-ink);
}

.login-brand-logo p {
    margin: 2px 0 0;
    font-size: 13px;
    color: var(--color-text-muted);
}

.login-brand-points {
    position: relative;
    z-index: 1;
    display: flex;
    flex-direction: column;
    gap: 20px;
    margin: 44px 0;
}

.login-brand-points .lbp-item {
    display: flex;
    align-items: flex-start;
    gap: 14px;
}

.login-brand-points .lbp-icon {
    width: 40px;
    height: 40px;
    border-radius: 12px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: color-mix(in srgb, var(--color-accent) 16%, var(--color-surface));
    color: var(--color-accent);
    box-shadow: var(--shadow-sm);
}

.login-brand-points .lbp-icon svg {
    width: 20px;
    height: 20px;
    stroke: currentColor;
    fill: none;
    stroke-width: 1.8;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.login-brand-points .lbp-title {
    font-size: 15px;
    font-weight: 650;
    color: var(--color-ink);
    margin: 0 0 3px;
}

.login-brand-points .lbp-desc {
    font-size: 13px;
    color: var(--color-text-muted);
    margin: 0;
    line-height: 1.5;
}

.login-brand-foot {
    position: relative;
    z-index: 1;
    font-size: 12px;
    color: var(--color-text-muted);
}

.login-form-panel {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 40px 32px;
    background: var(--color-surface);
}

.login-form-panel .login-card {
    width: 400px;
    max-width: 100%;
    border: none;
    box-shadow: none;
    padding: 8px 12px 28px;
}

.login-form-panel .login-title {
    text-align: left;
    font-size: 26px;
    color: var(--color-ink);
}

.login-form-panel .login-subtitle {
    text-align: left;
    margin-bottom: 26px;
}

@media (max-width: 900px) {
    .login-shell {
        grid-template-columns: 1fr;
        margin: -16px;
        min-height: calc(100vh - 96px);
    }

    .login-brand-panel { display: none; }

    .login-form-panel {
        padding: 40px 20px;
        align-items: flex-start;
    }

    .login-form-panel .login-card {
        width: 100%;
        max-width: 400px;
    }
}

/* ---- 首页栅格细分 ---- */
.home-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 18px;
    align-items: start;
}

@media (max-width: 900px) {
    .home-grid { grid-template-columns: 1fr; }
}

@media (max-width: 768px) {
    .hero-panel { padding: 20px; }
    .hero-cta { margin-left: 0; width: 100%; }
    .hero-cta .btn { width: 100%; }
    .quick-grid { grid-template-columns: repeat(3, 1fr); gap: 9px; }
    .quick-item { padding: 14px 6px 12px; }
    .quick-item .qi-icon { width: 40px; height: 40px; border-radius: 13px; }
    .quick-item .qi-icon svg { width: 19px; height: 19px; }
    .quick-item .qi-label { font-size: 12px; }
}

@media (max-width: 380px) {
    .quick-grid { grid-template-columns: repeat(2, 1fr); }
}

/* ============================================================
   第 11 节 功能页通用组件（页面头/工具条/实体卡片/统计条）
   所有内部功能页复用，零业务逻辑改动
   ============================================================ */

/* ---- 页面头部 ---- */
.page-header {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    margin: 2px 0 18px;
    padding: 0 2px;
}
.page-header h2 {
    margin: 0;
    font-size: 21px;
    font-weight: 720;
    letter-spacing: -0.3px;
    color: var(--color-ink);
    display: flex;
    align-items: center;
    gap: 11px;
}
.page-header h2::before {
    content: '';
    width: 4px;
    height: 19px;
    border-radius: 4px;
    background: linear-gradient(180deg, var(--color-accent), color-mix(in srgb, var(--color-accent) 35%, transparent));
}
.page-header p {
    margin: 5px 0 0;
    color: var(--color-text-muted);
    font-size: 13px;
    line-height: 1.5;
}
.page-header .header-actions {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}
.page-content { padding: 0 2px 26px; }
.page-subtitle { color: var(--color-text-muted); }

/* ---- 工具条 ---- */
.toolbar-card {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
    padding: 12px 14px;
    background: var(--color-surface);
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-sm);
    margin-bottom: 16px;
    position: sticky;
    top: 64px;
    z-index: 5;
}
.toolbar-card .grow { flex: 1; min-width: 120px; }
@media (max-width: 768px) { .toolbar-card { top: 58px; } }

/* ---- 紧凑统计条 ---- */
.page-stats {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(158px, 1fr));
    gap: 12px;
    margin-bottom: 16px;
}
.page-stat {
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 12px 14px;
    background: var(--color-surface);
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-sm);
    transition: transform .2s cubic-bezier(.16,1,.3,1), box-shadow .2s;
}
.page-stat:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.page-stat .ps-icon {
    flex: none;
    width: 36px; height: 36px;
    border-radius: 11px;
    display: flex; align-items: center; justify-content: center;
    background: var(--color-accent-soft);
    color: var(--color-accent);
}
.page-stat .ps-icon.t-blue   { background: var(--color-info-soft);    color: var(--color-info); }
.page-stat .ps-icon.t-green  { background: var(--color-success-soft); color: var(--color-success); }
.page-stat .ps-icon.t-amber  { background: var(--color-warning-soft); color: var(--color-warning); }
.page-stat .ps-icon.t-rose   { background: var(--color-danger-soft);  color: var(--color-danger); }
.page-stat .ps-icon svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.page-stat .ps-value { font-size: 18px; font-weight: 720; color: var(--color-ink); line-height: 1.15; font-variant-numeric: tabular-nums; }
.page-stat .ps-label { font-size: 12px; color: var(--color-text-muted); margin-top: 1px; }

/* ---- 实体卡片网格（班级/学生/文件夹等通用） ---- */
.entity-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 14px;
}
@media (max-width: 640px) { .entity-grid { grid-template-columns: 1fr; } }

.entity-card {
    position: relative;
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 16px 18px;
    background: var(--color-surface);
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-sm);
    cursor: pointer;
    transition: transform .22s cubic-bezier(.16,1,.3,1), box-shadow .22s, border-color .22s;
    overflow: hidden;
}
.entity-card::after {
    content: '';
    position: absolute;
    left: 0; right: 0; bottom: 0;
    height: 2px;
    background: linear-gradient(90deg, var(--color-accent), transparent 72%);
    transform: scaleX(0);
    transform-origin: left;
    transition: transform .32s cubic-bezier(.16,1,.3,1);
}
.entity-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); border-color: var(--color-border); }
.entity-card:hover::after { transform: scaleX(1); }
.entity-card:active { transform: translateY(-1px) scale(0.992); }

.entity-tile {
    flex: none;
    width: 46px; height: 46px;
    border-radius: 14px;
    display: flex; align-items: center; justify-content: center;
    font-size: 19px; font-weight: 720; color: #fff;
    background: linear-gradient(135deg, var(--color-accent), color-mix(in srgb, var(--color-accent) 55%, #fff));
    box-shadow: 0 4px 12px color-mix(in srgb, var(--color-accent) 30%, transparent);
}
.entity-tile.t-blue   { background: linear-gradient(135deg, var(--color-primary), var(--color-info)); box-shadow: 0 4px 12px color-mix(in srgb, var(--color-primary) 30%, transparent); }
.entity-tile.t-green  { background: linear-gradient(135deg, var(--color-success), color-mix(in srgb, var(--color-success) 55%, #fff)); box-shadow: 0 4px 12px color-mix(in srgb, var(--color-success) 30%, transparent); }
.entity-tile.t-amber  { background: linear-gradient(135deg, #E8A23D, color-mix(in srgb, #E8A23D 55%, #fff)); box-shadow: 0 4px 12px color-mix(in srgb, #E8A23D 30%, transparent); }
.entity-tile.t-rose   { background: linear-gradient(135deg, var(--color-danger), color-mix(in srgb, var(--color-danger) 55%, #fff)); box-shadow: 0 4px 12px color-mix(in srgb, var(--color-danger) 30%, transparent); }

.entity-body { flex: 1; min-width: 0; }
.entity-title {
    font-size: 15px;
    font-weight: 660;
    color: var(--color-ink);
    display: flex;
    align-items: center;
    gap: 8px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.entity-title .badge { flex: none; }
.entity-meta {
    margin-top: 7px;
    display: flex;
    align-items: center;
    gap: 6px 10px;
    flex-wrap: wrap;
    color: var(--color-text-muted);
    font-size: 12.5px;
}
.meta-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 3px 9px;
    border-radius: 20px;
    background: var(--color-surface-2);
    color: var(--color-text-secondary);
    font-size: 12px;
    font-variant-numeric: tabular-nums;
}
.meta-chip svg { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.meta-chip.strong { background: var(--color-accent-soft); color: var(--color-accent); }
.meta-chip.warn { background: var(--color-warning-soft); color: var(--color-warning); }

.entity-actions {
    flex: none;
    display: flex;
    gap: 6px;
    opacity: 0;
    transform: translateX(6px);
    transition: opacity .2s ease, transform .2s ease;
}
.entity-card:hover .entity-actions { opacity: 1; transform: translateX(0); }
@media (hover: none) {
    .entity-actions { opacity: 1; transform: none; }
}

/* ---- 区块容器（页面内分区） ---- */
.block-card {
    background: var(--color-surface);
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-sm);
    overflow: hidden;
}
.block-card + .block-card { margin-top: 16px; }
.block-card .block-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 14px 18px;
    border-bottom: 1px solid var(--color-border-light);
}
.block-card .block-head h3 {
    margin: 0;
    font-size: 15px;
    font-weight: 660;
    color: var(--color-ink);
    display: flex;
    align-items: center;
    gap: 8px;
}
.block-card .block-head h3 svg { width: 16px; height: 16px; fill: none; stroke: var(--color-accent); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.block-card .block-body { padding: 14px 18px; }
.block-card .block-body.clean { padding: 0; }

/* ---- 列表式区块行 ---- */
.func-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 16px;
    border-bottom: 1px solid var(--color-border-light);
    transition: background .18s ease;
}
.func-row:last-child { border-bottom: none; }
.func-row:hover { background: var(--color-surface-2); }
.func-row .fr-icon {
    flex: none;
    width: 34px; height: 34px;
    border-radius: 10px;
    display: flex; align-items: center; justify-content: center;
    background: var(--color-accent-soft);
    color: var(--color-accent);
}
.func-row .fr-icon svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.func-row .fr-main { flex: 1; min-width: 0; }
.func-row .fr-title { font-size: 14px; font-weight: 620; color: var(--color-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.func-row .fr-sub { font-size: 12px; color: var(--color-text-muted); margin-top: 2px; }

/* ---- 班级圈（moment）增强 ---- */
.moment-avatar {
    flex: none;
    width: 42px; height: 42px;
    border-radius: 13px;
    display: inline-flex; align-items: center; justify-content: center;
    font-size: 17px; font-weight: 700; color: #fff;
    background: linear-gradient(135deg, var(--color-primary), var(--color-accent));
    box-shadow: 0 3px 10px color-mix(in srgb, var(--color-primary) 28%, transparent);
}
.moment-composer {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 18px;
}
.moment-composer .mc-input {
    flex: 1;
    padding: 10px 16px;
    border: 1px solid var(--color-border);
    border-radius: 22px;
    background: var(--color-surface-2);
    color: var(--color-ink);
    font-size: 14px;
    outline: none;
    cursor: text;
    transition: border-color .2s, background .2s, box-shadow .2s;
}
.moment-composer .mc-input:hover { background: var(--color-surface); }
.moment-card { transition: transform .2s cubic-bezier(.16,1,.3,1), box-shadow .2s; }
.moment-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.moment-card .card-body { padding: 18px 20px; }
.moment-author-name { color: var(--color-ink); font-weight: 660; }
.moment-class-badge { background: var(--color-info-soft); color: var(--color-info); }
.moment-time { color: var(--color-text-muted); }
.moment-content { color: var(--color-text); }
.moment-actions { border-top-color: var(--color-border-light); }
.moment-action-btn { color: var(--color-text-secondary); }
.moment-action-btn:hover { background: var(--color-surface-2); }
.moment-action-btn.liked { color: var(--color-danger); }
.moment-comments { border-top-color: var(--color-border-light); }
.comment-item { color: var(--color-text); }

/* ---- 搜索框 ---- */
.search-box {
    position: relative;
    flex: 1;
    min-width: 180px;
    max-width: 320px;
}
.search-box svg {
    position: absolute;
    left: 12px; top: 50%;
    transform: translateY(-50%);
    width: 15px; height: 15px;
    fill: none; stroke: var(--color-text-muted); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round;
    pointer-events: none;
}
.search-box input {
    width: 100%;
    padding: 9px 14px 9px 34px;
    border: 1px solid var(--color-border);
    border-radius: 22px;
    background: var(--color-surface);
    color: var(--color-ink);
    font-size: 13.5px;
    outline: none;
    transition: border-color .2s, box-shadow .2s;
}
.search-box input:focus { border-color: var(--color-accent); box-shadow: 0 0 0 3px var(--color-accent-soft); }

/* ============================================================
   12. 旧版硬编码色兼容层（跟随主题，不改动结构）
   AI工作台 / 视频剪辑 / PPT / 侧栏等历史蓝色 → 主题令牌
   （gcca 商业系统管理组除外，后续单独改）
   ============================================================ */

/* ---- 侧栏标签 ---- */
.sidebar-tab:hover {
    background: var(--color-accent-soft);
    color: var(--color-accent);
}
.sidebar-tab.active {
    background: var(--color-accent-soft);
    color: var(--color-primary);
    border-left-color: var(--color-accent);
    box-shadow: 0 1px 3px color-mix(in srgb, var(--color-accent) 22%, transparent);
}
.sidebar-tab.active .tab-count {
    background: var(--color-primary);
    color: #fff;
}

/* ---- 统计卡顶部色条（原硬编码蓝绿黄红 → 主题状态色） ---- */
.stat-card:nth-child(1)::before { background: linear-gradient(180deg, var(--color-info), var(--color-info-light)); }
.stat-card:nth-child(2)::before { background: linear-gradient(180deg, var(--color-success), var(--color-success-light)); }
.stat-card:nth-child(3)::before { background: linear-gradient(180deg, var(--color-warning), var(--color-warning-light)); }
.stat-card:nth-child(4)::before { background: linear-gradient(180deg, var(--color-danger), var(--color-danger-light)); }

/* ---- AI 工作台 ---- */
.ai-orbit-ring { border-color: color-mix(in srgb, var(--color-primary) 35%, transparent); }
.ai-orbit-ring.ring2 { border-color: color-mix(in srgb, var(--color-accent) 35%, transparent); }
.ai-orbit-core { background: linear-gradient(135deg, var(--color-primary), var(--color-accent)); box-shadow: 0 0 20px color-mix(in srgb, var(--color-primary) 50%, transparent); }
.ai-studio-feature-tag { background: var(--color-info-soft); color: var(--color-info); }
.ai-studio-card-btn { background: linear-gradient(135deg, var(--color-primary), var(--color-primary-dark)); }
.ai-studio-card-btn:hover { box-shadow: 0 4px 12px color-mix(in srgb, var(--color-primary) 30%, transparent); }
.ai-studio-quick-btn:hover { border-color: var(--color-primary); background: var(--color-accent-soft); color: var(--color-primary); }
.ai-studio-card:hover { border-color: color-mix(in srgb, var(--color-info) 30%, transparent); }

/* ---- PPT 编辑器 ---- */
.ai-ppt-slide-title { color: var(--color-primary); }

/* ---- 视频剪辑（火山引擎） ---- */
.ve-clip.active { background: var(--color-info-soft); border-color: var(--color-primary); }
.ve-clip-num { background: var(--color-primary); }
.ve-tag:hover { background: var(--color-info-soft); color: var(--color-primary); border-color: color-mix(in srgb, var(--color-info) 30%, transparent); }
.ve-tag.active { background: var(--color-primary); color: #fff; border-color: var(--color-primary); }
.ve-progress-fill { background: linear-gradient(90deg, var(--color-primary), var(--color-success)); }
.ve-tab:hover { color: var(--color-primary); }
.ve-tab.active { color: var(--color-primary); }
.ve-count { color: var(--color-primary); background: var(--color-info-soft); }
.ve-upload-progress { color: var(--color-primary); }
.ve-cat { background: var(--color-primary); }
.ve-preset-card.active { border-color: var(--color-primary); background: var(--color-info-soft); }
.ve-thinking { color: var(--color-primary); }

/* ============================================================
   13. 落地页（真正的首页）· 3D 动效欢迎页
   ------------------------------------------------------------
   下滑式单页：3D Hero 舞台 → 平台简介 → 功能预览 → 三种视角 → CTA
   （imagegen-frontend-web: 3D Cascading Card Deck + 视差 + 高级留白）
   ============================================================ */

/* ---- 13.0 全宽铺底：突破 .main-content 的 1200px 限制 ---- */
.lp-hero,
.lp-cta {
    margin-left: calc(50% - 50vw);
    margin-right: calc(50% - 50vw);
}

/* ---- 13.1 Hero 舞台 ---- */
.lp-hero {
    position: relative;
    min-height: calc(100vh - 64px);
    display: flex;
    align-items: center;
    overflow: hidden;
    background:
        radial-gradient(1200px 600px at 85% -10%, color-mix(in srgb, var(--color-accent) 14%, transparent), transparent 60%),
        radial-gradient(900px 500px at -10% 110%, color-mix(in srgb, var(--color-primary) 8%, transparent), transparent 55%),
        linear-gradient(180deg, var(--color-bg-deep) 0%, var(--color-bg) 100%);
    padding: 72px 0 108px;
    isolation: isolate;
}

/* 技术网格背景 */
.lp-hero-grid {
    position: absolute;
    inset: 0;
    z-index: -2;
    background-image:
        linear-gradient(color-mix(in srgb, var(--color-ink) 6%, transparent) 1px, transparent 1px),
        linear-gradient(90deg, color-mix(in srgb, var(--color-ink) 6%, transparent) 1px, transparent 1px);
    background-size: 56px 56px;
    -webkit-mask-image: radial-gradient(ellipse 90% 80% at 50% 30%, #000 30%, transparent 75%);
    mask-image: radial-gradient(ellipse 90% 80% at 50% 30%, #000 30%, transparent 75%);
    opacity: 0.5;
}

/* 浮动光球（3D 氛围） */
.lp-orbs { position: absolute; inset: 0; z-index: -1; pointer-events: none; }
.lp-orb {
    position: absolute;
    border-radius: 50%;
    filter: blur(56px);
    opacity: 0.5;
    will-change: transform;
}
.lp-orb-1 {
    width: 380px; height: 380px; top: -80px; right: 8%;
    background: radial-gradient(circle at 30% 30%, color-mix(in srgb, var(--color-accent) 55%, transparent), transparent 70%);
    animation: lp-orb-drift 16s ease-in-out infinite alternate;
}
.lp-orb-2 {
    width: 300px; height: 300px; bottom: -60px; left: 2%;
    background: radial-gradient(circle at 60% 40%, color-mix(in srgb, var(--color-primary) 40%, transparent), transparent 70%);
    animation: lp-orb-drift 20s ease-in-out infinite alternate-reverse;
}
.lp-orb-3 {
    width: 200px; height: 200px; top: 40%; left: 44%;
    background: radial-gradient(circle at 50% 50%, color-mix(in srgb, var(--color-gold) 45%, transparent), transparent 70%);
    opacity: 0.35;
    animation: lp-orb-drift 24s ease-in-out infinite alternate;
}
@keyframes lp-orb-drift {
    0%   { transform: translate(0, 0) scale(1); }
    100% { transform: translate(40px, -30px) scale(1.12); }
}

.lp-hero-inner {
    width: 100%;
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 32px;
    display: grid;
    grid-template-columns: 1.05fr 0.95fr;
    gap: 64px;
    align-items: center;
}

/* 左侧文案 */
.lp-hero-copy { max-width: 560px; }
.lp-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 7px 16px;
    border-radius: 999px;
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    box-shadow: var(--shadow-sm);
    color: var(--color-text-secondary);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: 0.06em;
}
.lp-eyebrow-dot {
    width: 8px; height: 8px; border-radius: 50%;
    background: var(--color-accent);
    box-shadow: 0 0 0 4px color-mix(in srgb, var(--color-accent) 18%, transparent);
}
.lp-hero-copy h1 {
    margin: 22px 0 18px;
    font-size: clamp(40px, 5.4vw, 64px);
    line-height: 1.06;
    font-weight: 800;
    letter-spacing: -0.03em;
    color: var(--color-ink);
}
.lp-grad {
    background: linear-gradient(92deg, var(--color-accent) 0%, var(--color-gold) 100%);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    color: transparent;
}
.lp-lead {
    font-size: 17px;
    line-height: 1.8;
    color: var(--color-text-secondary);
    max-width: 500px;
    margin: 0 0 30px;
}
.lp-hero-actions { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.lp-hero-cta {
    padding: 14px 30px;
    font-size: 15px;
    font-weight: 700;
    border-radius: 14px;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    box-shadow: 0 8px 28px color-mix(in srgb, var(--color-primary) 30%, transparent);
    transform: translateY(0);
    transition: transform 0.25s cubic-bezier(0.34, 1.35, 0.64, 1), box-shadow 0.25s ease;
}
.lp-hero-cta svg { width: 18px; height: 18px; }
.lp-hero-cta:hover { transform: translateY(-3px); box-shadow: 0 14px 36px color-mix(in srgb, var(--color-primary) 38%, transparent); }
.lp-hero-cta-ghost { padding: 14px 28px; font-size: 15px; font-weight: 600; border-radius: 14px; }

/* 指标数字 */
.lp-hero-metrics {
    display: flex;
    gap: 36px;
    margin-top: 38px;
    padding-top: 26px;
    border-top: 1px solid var(--color-border);
}
.lpm b {
    display: block;
    font-size: 26px;
    font-weight: 800;
    letter-spacing: -0.02em;
    color: var(--color-ink);
    font-variant-numeric: tabular-nums;
}
.lpm b::after { content: '+'; color: var(--color-accent); }
.lpm span { font-size: 12.5px; color: var(--color-text-muted); font-weight: 500; letter-spacing: 0.04em; }

/* ---- 13.2 右侧 3D 舞台 ---- */
.lp-hero-visual {
    perspective: 1400px;
    position: relative;
    min-height: 520px;
    will-change: transform;
}
.lp-stage {
    position: relative;
    width: 100%;
    height: 520px;
    transform-style: preserve-3d;
    animation: lp-stage-enter 1s cubic-bezier(0.22, 1, 0.36, 1) both;
}
@keyframes lp-stage-enter {
    from { opacity: 0; transform: translateY(40px) rotateY(-10deg) scale(0.95); }
    to   { opacity: 1; transform: translateY(0) rotateY(0) scale(1); }
}

/* 主卡片：数据面板样 */
.lp-card {
    position: absolute;
    background: color-mix(in srgb, var(--color-surface) 92%, transparent);
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    border: 1px solid color-mix(in srgb, var(--color-ink) 8%, transparent);
    border-radius: 20px;
    box-shadow: 0 24px 60px -18px color-mix(in srgb, var(--color-ink) 30%, transparent);
}
.lp-card-main {
    top: 50%;
    left: 50%;
    width: 380px;
    padding: 22px;
    transform: translate(-50%, -50%) rotateX(4deg) rotateY(-8deg);
    transform-style: preserve-3d;
    transition: transform 0.5s cubic-bezier(0.22, 1, 0.36, 1);
}
.lp-card-main::after {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: 20px;
    background: linear-gradient(135deg, color-mix(in srgb, var(--color-accent) 10%, transparent), transparent 45%);
    pointer-events: none;
}
.lp-hero-visual:hover .lp-card-main {
    transform: translate(-50%, -50%) rotateX(0deg) rotateY(0deg) translateZ(18px);
}
.lp-card-head {
    display: flex;
    gap: 6px;
    margin-bottom: 20px;
}
.lp-card-head i {
    width: 9px; height: 9px;
    border-radius: 50%;
    background: var(--color-border);
}
.lp-card-head i:first-child { background: var(--color-danger-light); }
.lp-card-head i:nth-child(2) { background: var(--color-warning); }
.lp-card-head i:nth-child(3) { background: var(--color-success); }
.lp-card-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 11px 0;
    border-bottom: 1px dashed var(--color-border);
}
.lp-card-row:last-of-type { border-bottom: none; }
.lp-avatar {
    width: 34px; height: 34px;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    font-weight: 700;
    color: #fff;
    background: linear-gradient(135deg, var(--color-primary), var(--color-primary-light));
    flex-shrink: 0;
}
.lp-avatar.g { background: linear-gradient(135deg, var(--color-accent), var(--color-gold)); }
.lp-avatar.a { background: linear-gradient(135deg, var(--color-info), var(--color-info-light)); }
.lp-line {
    height: 9px;
    border-radius: 6px;
    background: linear-gradient(90deg, color-mix(in srgb, var(--color-ink) 16%, transparent), color-mix(in srgb, var(--color-ink) 5%, transparent));
}
.w50 { width: 50%; } .w55 { width: 55%; } .w60 { width: 60%; }
.w70 { width: 70%; } .w80 { width: 80%; } .w40 { width: 40%; }
.lp-card-bars {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 8px;
    margin-top: 18px;
    align-items: end;
    height: 64px;
}
.lp-card-bars i {
    border-radius: 6px 6px 3px 3px;
    background: linear-gradient(180deg, color-mix(in srgb, var(--color-accent) 80%, var(--color-gold)), color-mix(in srgb, var(--color-accent) 45%, transparent));
    height: 100%;
    opacity: 0.85;
}
.lp-card-bars i.w40 { height: 40%; }
.lp-card-bars i.w55 { height: 55%; }
.lp-card-bars i.w70 { height: 70%; }
.lp-card-bars i.w80 { height: 80%; }

/* 浮动小卡片 */
.lp-card-float {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
    width: 108px;
    height: 108px;
    border-radius: 18px;
    color: var(--color-text);
    will-change: transform;
    animation: lp-float 5.5s ease-in-out infinite;
}
.lp-card-float svg { width: 26px; height: 26px; color: var(--color-accent); }
.lp-card-float b { font-size: 13px; font-weight: 700; letter-spacing: 0.02em; }
.lp-card-f1 {
    top: 6%; left: 4%;
    animation-delay: 0s;
    box-shadow: 0 18px 40px -12px color-mix(in srgb, var(--color-accent) 45%, transparent);
    border-color: color-mix(in srgb, var(--color-accent) 30%, transparent);
}
.lp-card-f2 {
    top: 12%; right: 0;
    animation-delay: 1.1s;
    box-shadow: 0 18px 40px -12px color-mix(in srgb, var(--color-primary) 40%, transparent);
}
.lp-card-f3 {
    bottom: 8%; left: 2%;
    animation-delay: 2.2s;
    box-shadow: 0 18px 40px -12px color-mix(in srgb, var(--color-gold) 50%, transparent);
    border-color: color-mix(in srgb, var(--color-gold) 35%, transparent);
}
.lp-card-f4 {
    bottom: 4%; right: 6%;
    animation-delay: 3.3s;
    box-shadow: 0 18px 40px -12px color-mix(in srgb, var(--color-info) 45%, transparent);
    border-color: color-mix(in srgb, var(--color-info) 30%, transparent);
}
@keyframes lp-float {
    0%, 100% { transform: translateY(0) rotate(var(--lp-tilt, 0deg)); }
    50%      { transform: translateY(-14px) rotate(var(--lp-tilt, 0deg)); }
}
.lp-card-f1 { --lp-tilt: -6deg; }
.lp-card-f2 { --lp-tilt: 5deg; }
.lp-card-f3 { --lp-tilt: 4deg; }
.lp-card-f4 { --lp-tilt: -4deg; }

/* 滚动提示 */
.lp-scroll-hint {
    position: absolute;
    bottom: 26px;
    left: 50%;
    transform: translateX(-50%);
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    color: var(--color-text-muted);
    font-size: 12.5px;
    letter-spacing: 0.12em;
    text-decoration: none;
    z-index: 3;
}
.lp-scroll-hint svg {
    width: 20px; height: 20px;
    animation: lp-scroll-bounce 1.8s ease-in-out infinite;
}
@keyframes lp-scroll-bounce {
    0%, 100% { transform: translateY(0); opacity: 0.6; }
    50%      { transform: translateY(7px); opacity: 1; }
}

/* ---- 13.3 通用区块 ---- */
.lp-section {
    position: relative;
    padding: 108px 0;
    max-width: 1200px;
    margin: 0 auto;
    width: 100%;
}
.lp-section-head {
    max-width: 640px;
    margin: 0 auto 60px;
    text-align: center;
}
.lp-tag {
    display: inline-block;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12.5px;
    font-weight: 700;
    letter-spacing: 0.1em;
    color: var(--color-accent);
    background: var(--color-accent-soft);
    margin-bottom: 16px;
}
.lp-section-head h2 {
    font-size: clamp(28px, 3.4vw, 42px);
    font-weight: 800;
    letter-spacing: -0.025em;
    color: var(--color-ink);
    margin: 0 0 14px;
}
.lp-section-head p {
    font-size: 15.5px;
    line-height: 1.75;
    color: var(--color-text-secondary);
    margin: 0;
}

/* ---- 13.4 平台简介（编号要点） ---- */
.lp-about { background: var(--color-surface); border-radius: 28px; box-shadow: var(--shadow-md); }
.lp-about .lp-section-head { padding-top: 0; }
.lp-about-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 20px;
    padding: 0 44px 56px;
}
.lp-about-item {
    padding: 26px 22px;
    border-radius: 18px;
    background: var(--color-surface-2);
    border: 1px solid var(--color-border-light);
    transition: transform 0.3s cubic-bezier(0.34, 1.35, 0.64, 1), box-shadow 0.3s ease, border-color 0.3s ease;
    position: relative;
    overflow: hidden;
}
.lp-about-item::after {
    content: '';
    position: absolute;
    left: 0; right: 0; bottom: 0;
    height: 3px;
    background: linear-gradient(90deg, var(--color-accent), var(--color-gold));
    transform: scaleX(0);
    transform-origin: left;
    transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1);
}
.lp-about-item:hover {
    transform: translateY(-6px);
    box-shadow: var(--shadow-lg);
    border-color: color-mix(in srgb, var(--color-accent) 25%, transparent);
}
.lp-about-item:hover::after { transform: scaleX(1); }
.lp-about-item b {
    display: block;
    font-size: 13px;
    letter-spacing: 0.14em;
    color: var(--color-accent);
    margin-bottom: 10px;
    font-variant-numeric: tabular-nums;
}
.lp-about-item h3 { font-size: 17px; font-weight: 700; color: var(--color-ink); margin: 0 0 8px; }
.lp-about-item p { font-size: 13.5px; line-height: 1.65; color: var(--color-text-secondary); margin: 0; }

/* ---- 13.5 功能预览卡片 ---- */
.lp-feature-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 18px;
    padding: 0 32px;
}
.lp-feature-card {
    position: relative;
    display: flex;
    align-items: flex-start;
    gap: 14px;
    padding: 24px 20px;
    background: var(--color-surface);
    border: 1px solid var(--color-border-light);
    border-radius: 18px;
    text-decoration: none;
    color: inherit;
    overflow: hidden;
    transition: transform 0.35s cubic-bezier(0.34, 1.35, 0.64, 1), box-shadow 0.35s ease, border-color 0.3s ease;
}
.lp-feature-card::before {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 3px;
    background: linear-gradient(90deg, var(--color-accent), var(--color-gold));
    transform: scaleX(0);
    transform-origin: left;
    transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1);
}
.lp-feature-card:hover {
    transform: translateY(-8px) scale(1.02);
    box-shadow: 0 22px 48px -18px color-mix(in srgb, var(--color-ink) 28%, transparent);
    border-color: color-mix(in srgb, var(--color-accent) 30%, transparent);
}
.lp-feature-card:hover::before { transform: scaleX(1); }
.lp-feature-icon {
    width: 46px; height: 46px;
    border-radius: 14px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--color-accent);
    background: var(--color-accent-soft);
    transition: transform 0.35s cubic-bezier(0.34, 1.35, 0.64, 1), background 0.3s ease, color 0.3s ease;
}
.lp-feature-icon svg { width: 22px; height: 22px; }
.lp-feature-card:hover .lp-feature-icon {
    transform: translateY(-3px) rotate(-4deg);
    background: linear-gradient(135deg, var(--color-accent), var(--color-gold));
    color: #fff;
}
.lp-feature-card h3 {
    font-size: 15.5px;
    font-weight: 700;
    color: var(--color-ink);
    margin: 2px 0 5px;
}
.lp-feature-card p {
    font-size: 12.5px;
    line-height: 1.55;
    color: var(--color-text-muted);
    margin: 0;
}
.lp-feature-go {
    position: absolute;
    right: 14px;
    bottom: 14px;
    width: 28px; height: 28px;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--color-text-muted);
    background: var(--color-surface-2);
    opacity: 0;
    transform: translateX(-6px);
    transition: opacity 0.3s ease, transform 0.35s cubic-bezier(0.34, 1.35, 0.64, 1), background 0.3s ease;
}
.lp-feature-go svg { width: 15px; height: 15px; }
.lp-feature-card:hover .lp-feature-go {
    opacity: 1;
    transform: translateX(0);
    background: var(--color-accent-soft);
    color: var(--color-accent);
}

/* ---- 13.6 三种视角 ---- */
.lp-roles { }
.lp-roles-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 22px;
    padding: 0 32px;
}
.lp-role-card {
    position: relative;
    padding: 40px 30px 34px;
    text-align: center;
    background: var(--color-surface);
    border: 1px solid var(--color-border-light);
    border-radius: 24px;
    transition: transform 0.35s cubic-bezier(0.34, 1.35, 0.64, 1), box-shadow 0.35s ease;
}
.lp-role-card:hover {
    transform: translateY(-8px);
    box-shadow: var(--shadow-lg);
}
.lp-role-mark {
    width: 64px; height: 64px;
    margin: 0 auto 20px;
    border-radius: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
    font-weight: 800;
    color: #fff;
    box-shadow: 0 12px 30px -8px color-mix(in srgb, var(--color-ink) 35%, transparent);
    transform: rotate(-6deg);
    transition: transform 0.35s cubic-bezier(0.34, 1.35, 0.64, 1);
}
.lp-role-card:hover .lp-role-mark { transform: rotate(0deg) scale(1.06); }
.mk-internal { background: linear-gradient(135deg, #1C1917, #57534E); }
.mk-school   { background: linear-gradient(135deg, #0F766E, #0D9488); }
.mk-parent   { background: linear-gradient(135deg, #C2703D, #E8A06A); }
.lp-role-card h3 { font-size: 17px; font-weight: 700; color: var(--color-ink); margin: 0 0 10px; }
.lp-role-card p { font-size: 13.5px; line-height: 1.7; color: var(--color-text-secondary); margin: 0; }

/* ---- 13.7 CTA ---- */
.lp-cta { padding: 0 0 108px; }
.lp-cta-box {
    max-width: 1200px;
    margin: 0 auto;
    padding: 72px 40px;
    border-radius: 32px;
    text-align: center;
    color: #fff;
    background:
        radial-gradient(600px 300px at 80% -20%, color-mix(in srgb, var(--color-gold) 45%, transparent), transparent 60%),
        linear-gradient(120deg, var(--color-primary-dark) 0%, var(--color-primary) 55%, var(--color-primary-light) 100%);
    box-shadow: 0 30px 80px -24px color-mix(in srgb, var(--color-primary) 55%, transparent);
    position: relative;
    overflow: hidden;
}
.lp-cta-box::before {
    content: '';
    position: absolute;
    inset: 0;
    background-image:
        linear-gradient(color-mix(in srgb, #fff 7%, transparent) 1px, transparent 1px),
        linear-gradient(90deg, color-mix(in srgb, #fff 7%, transparent) 1px, transparent 1px);
    background-size: 44px 44px;
    -webkit-mask-image: radial-gradient(ellipse 70% 90% at 50% 0%, #000 20%, transparent 75%);
    mask-image: radial-gradient(ellipse 70% 90% at 50% 0%, #000 20%, transparent 75%);
    pointer-events: none;
}
.lp-cta-box h2 {
    font-size: clamp(26px, 3.2vw, 40px);
    font-weight: 800;
    letter-spacing: -0.025em;
    margin: 0 0 12px;
    color: #fff;
}
.lp-cta-box p { font-size: 15px; color: rgba(255, 255, 255, 0.72); margin: 0 0 30px; }
.lp-cta-actions { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; position: relative; z-index: 1; }
.lp-cta-actions .btn { padding: 14px 32px; border-radius: 14px; font-weight: 700; }
.lp-cta-actions .btn-primary { box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); }
.lp-cta-actions .btn-outline { color: #fff; border-color: rgba(255, 255, 255, 0.4); background: transparent; }
.lp-cta-actions .btn-outline:hover { background: rgba(255, 255, 255, 0.12); }

/* ---- 13.8 滚动浮现动画 ---- */
[data-reveal] {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.7s cubic-bezier(0.22, 1, 0.36, 1), transform 0.7s cubic-bezier(0.22, 1, 0.36, 1);
    transition-delay: calc(var(--i, 0) * 0.06s);
}
[data-reveal][data-delay="1"] { transition-delay: 0.12s; }
[data-reveal][data-delay="2"] { transition-delay: 0.22s; }
[data-reveal][data-delay="3"] { transition-delay: 0.32s; }
[data-reveal][data-delay="4"] { transition-delay: 0.42s; }
.lp-in {
    opacity: 1;
    transform: translateY(0);
}

/* ---- 13.9 落地页移动端适配 ---- */
@media (max-width: 1024px) {
    .lp-hero-inner { grid-template-columns: 1fr; gap: 40px; padding: 0 24px; }
    .lp-hero-copy { max-width: 640px; text-align: center; margin: 0 auto; }
    .lp-lead { margin-left: auto; margin-right: auto; }
    .lp-hero-actions, .lp-hero-metrics { justify-content: center; }
    .lp-hero-visual { min-height: 440px; max-width: 560px; margin: 0 auto; width: 100%; }
    .lp-stage { height: 440px; }
    .lp-card-main { width: 330px; }
    .lp-feature-grid { grid-template-columns: repeat(2, 1fr); }
    .lp-about-grid { grid-template-columns: repeat(2, 1fr); }
    .lp-roles-grid { grid-template-columns: repeat(3, 1fr); padding: 0 24px; }
}

@media (max-width: 768px) {
    .lp-hero { min-height: calc(100vh - 56px); padding: 64px 0 96px; }
    .lp-hero-inner { gap: 32px; padding: 0 18px; }
    .lp-hero-copy h1 { font-size: clamp(32px, 8.5vw, 44px); }
    .lp-lead { font-size: 15px; }
    .lp-hero-actions { flex-direction: column; width: 100%; }
    .lp-hero-actions .lp-hero-cta, .lp-hero-actions .lp-hero-cta-ghost { width: 100%; justify-content: center; }
    .lp-hero-metrics { gap: 22px; }
    .lp-hero-visual { min-height: 380px; }
    .lp-stage { height: 380px; }
    .lp-card-main { width: 280px; }
    .lp-card-float { width: 88px; height: 88px; }
    .lp-card-float svg { width: 22px; height: 22px; }
    .lp-card-float b { font-size: 12px; }
    .lp-section { padding: 76px 0; }
    .lp-section-head { margin-bottom: 40px; }
    .lp-about-grid { grid-template-columns: 1fr; gap: 14px; padding: 0 20px 40px; }
    .lp-feature-grid { grid-template-columns: 1fr; gap: 14px; padding: 0 18px; }
    .lp-feature-card { padding: 20px 16px; }
    .lp-roles-grid { grid-template-columns: 1fr; gap: 14px; padding: 0 18px; }
    .lp-role-card { padding: 30px 24px; }
    .lp-cta { padding-bottom: 72px; }
    .lp-cta-box { padding: 56px 24px; border-radius: 24px; }
    .lp-cta-actions { flex-direction: column; }
    .lp-cta-actions .btn { width: 100%; justify-content: center; }
    .lp-scroll-hint { display: none; }
}

@media (max-width: 480px) {
    .lp-hero { padding-top: 48px; }
    .lp-hero-metrics { gap: 14px; flex-wrap: wrap; }
    .lp-card-float { display: none; }
    .lp-orb-3 { display: none; }
}

/* ---- 13.10 尊重「减少动态」偏好 ---- */
@media (prefers-reduced-motion: reduce) {
    .lp-card-float, .lp-orb, .lp-scroll-hint svg { animation: none; }
    .lp-stage { animation: none; }
    [data-reveal] { opacity: 1; transform: none; transition: none; }
}

/* ============================================================
   14. 全局 3D 质感升级
   ------------------------------------------------------------
   卡片透视悬浮、层级阴影、微交互（impeccable / ui-ux-pro-max）
   ============================================================ */

/* 卡片类通用 3D 悬浮：hover 时轻微抬起 + 立体感 */
.entity-card,
.card,
.stat-card,
.media-card,
.competition-card,
.activity-card,
.exchange-card,
.course-card,
.role-card,
.child-card,
.folder-card,
.file-card {
    transition: transform 0.3s cubic-bezier(0.34, 1.35, 0.64, 1),
                box-shadow 0.35s ease,
                border-color 0.3s ease;
    will-change: transform;
}
.entity-card:hover,
.media-card:hover,
.competition-card:hover,
.activity-card:hover,
.exchange-card:hover,
.course-card:hover,
.role-card:hover,
.child-card:hover,
.folder-card:hover,
.file-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 16px 40px -16px color-mix(in srgb, var(--color-ink) 30%, transparent);
}

/* 卡片内部图标瓦片：hover 时微微弹起 */
.quick-item:hover .quick-icon,
.qaction:hover .qaction-icon,
.stat-card:hover .stat-icon {
    transform: translateY(-2px) scale(1.05);
}

/* 列表行 hover：轻微左移 + 高亮（透视引导） */
.feed-item:hover,
.data-table tbody tr:hover,
.fm-item:hover {
    transform: translateX(2px);
}

/* 章节标题悬浮光 */
.section-head h3 {
    position: relative;
}
.section-head h3::after {
    content: '';
    position: absolute;
    left: 0; bottom: -5px;
    width: 28px; height: 2.5px;
    border-radius: 3px;
    background: linear-gradient(90deg, var(--color-accent), var(--color-gold));
}

/* ============================================================
   15. 家长端 · 温馨涂鸦风（data-theme="soft"）· 完全重构
   ------------------------------------------------------------
   手绘边框 / 蜡笔圆角 / 胶带贴纸 / 波浪线 / 波点底纹，
   温暖友好、保持干净可读（imagegen-frontend-mobile: 涂鸦风）。
   仅家长默认主题生效，功能零改动。
   ============================================================ */

/* 波点底纹 */
[data-theme="soft"] body {
    background-image:
        radial-gradient(color-mix(in srgb, var(--color-accent) 8%, transparent) 1.6px, transparent 1.7px);
    background-size: 28px 28px;
    background-position: 10px 10px;
}

/* 卡片：蜡笔手绘感（不规则圆角 + 彩色描边） */
[data-theme="soft"] .card,
[data-theme="soft"] .stat-card,
[data-theme="soft"] .entity-card,
[data-theme="soft"] .child-card,
[data-theme="soft"] .media-card,
[data-theme="soft"] .task-card,
[data-theme="soft"] .activity-card,
[data-theme="soft"] .competition-card {
    border-radius: 24px 11px 24px 11px;
    border-width: 1.5px;
    border-color: color-mix(in srgb, var(--color-accent) 32%, var(--color-border));
    box-shadow: 0 6px 16px -8px rgba(122, 92, 55, 0.22), 0 2px 6px -2px rgba(122, 92, 55, 0.10);
    position: relative;
}
[data-theme="soft"] .card:hover,
[data-theme="soft"] .stat-card:hover,
[data-theme="soft"] .entity-card:hover,
[data-theme="soft"] .child-card:hover {
    border-radius: 24px 11px 24px 11px;
}

/* 胶带贴纸：hover 浮现的涂鸦小徽章 */
[data-theme="soft"] .card::after,
[data-theme="soft"] .stat-card::after {
    content: '';
    position: absolute;
    top: -7px;
    right: -7px;
    width: 18px; height: 18px;
    border-radius: 50%;
    background:
        radial-gradient(circle at 35% 35%, color-mix(in srgb, var(--color-accent) 75%, #fff) 0 2.5px, transparent 3px),
        radial-gradient(circle at 68% 62%, color-mix(in srgb, var(--color-accent) 55%, #fff) 0 2px, transparent 2.6px);
    opacity: 0;
    transform: rotate(14deg) scale(0);
    transition: opacity 0.3s ease, transform 0.4s cubic-bezier(0.34, 1.35, 0.64, 1);
    z-index: 2;
    pointer-events: none;
}
[data-theme="soft"] .card:hover::after,
[data-theme="soft"] .stat-card:hover::after {
    opacity: 1;
    transform: rotate(0deg) scale(1);
}

/* 卡片顶部：彩色胶带条 */
[data-theme="soft"] .entity-card::before,
[data-theme="soft"] .child-card::before {
    content: '';
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%) rotate(-2deg);
    width: 44%;
    height: 6px;
    border-radius: 0 0 5px 5px;
    background: linear-gradient(90deg, color-mix(in srgb, var(--color-gold) 70%, transparent), color-mix(in srgb, var(--color-accent) 70%, transparent));
    opacity: 0.6;
}

/* 标题：波浪下划线 + 涂鸦圆点 */
[data-theme="soft"] .section-head h3::before {
    width: 8px; height: 8px;
    border-radius: 50%;
    background: var(--color-accent);
}
[data-theme="soft"] .section-head h3::after {
    border-radius: 8px;
    height: 5px;
    background: repeating-linear-gradient(90deg, var(--color-accent) 0 9px, transparent 9px 14px);
}

/* 欢迎 Hero：蜡笔欢迎卡 */
[data-theme="soft"] .hero-panel {
    border-radius: 30px 12px 30px 12px;
    background:
        radial-gradient(340px 300px at 88% -30%, color-mix(in srgb, var(--color-gold) 26%, transparent), transparent 62%),
        linear-gradient(135deg, #FFF8EE 0%, #FBEDDE 100%);
    border: 1.5px dashed color-mix(in srgb, var(--color-accent) 50%, transparent);
    box-shadow: 0 12px 30px -14px rgba(122, 92, 55, 0.35);
}
[data-theme="soft"] .hero-avatar {
    border-radius: 20px 9px 20px 9px;
    background: linear-gradient(135deg, #F2A65E, #E47B4F);
    box-shadow: 0 10px 22px -8px rgba(228, 123, 79, 0.6);
    transform: rotate(-5deg);
}
[data-theme="soft"] .hero-greet {
    font-weight: 800;
    letter-spacing: 0.2px;
}
[data-theme="soft"] .hero-role-badge {
    border-radius: 999px 6px 999px 6px;
    transform: rotate(-2deg);
}

/* 快捷图标：涂鸦圆角章 */
[data-theme="soft"] .quick-item .qi-icon {
    border-radius: 18px 8px 18px 8px;
    background: linear-gradient(135deg, color-mix(in srgb, var(--color-accent) 18%, #fff), color-mix(in srgb, var(--color-gold) 14%, #fff));
    color: var(--color-accent);
    transition: transform 0.35s cubic-bezier(0.34, 1.35, 0.64, 1), box-shadow 0.3s ease;
}
[data-theme="soft"] .quick-item:hover .qi-icon {
    transform: rotate(-7deg) scale(1.1);
    box-shadow: 0 8px 18px -6px color-mix(in srgb, var(--color-accent) 55%, transparent);
}

/* 孩子卡片：蜡笔头像 */
[data-theme="soft"] .child-avatar {
    border-radius: 17px 7px 17px 7px;
    background: linear-gradient(135deg, #8FD3C2, #5FB5A6);
    box-shadow: 0 8px 18px -6px rgba(95, 181, 166, 0.55);
    transform: rotate(-3deg);
}

/* 徽章：贴纸感（轻微旋转） */
[data-theme="soft"] .badge {
    border-radius: 11px 5px 11px 5px;
    transform: rotate(-1.5deg);
    box-shadow: 0 3px 8px -3px rgba(122, 92, 55, 0.3);
}

/* 按钮：圆润 + 暖橙渐变 */
[data-theme="soft"] .btn {
    border-radius: 999px;
}
[data-theme="soft"] .btn-primary {
    background: linear-gradient(135deg, #F2A65E, #E47B4F);
    box-shadow: 0 8px 20px -8px rgba(228, 123, 79, 0.55);
}
[data-theme="soft"] .btn-primary:hover {
    box-shadow: 0 12px 26px -8px rgba(228, 123, 79, 0.65);
    transform: translateY(-2px);
}

/* 列表/动态条：手绘虚线分隔 */
[data-theme="soft"] .feed-item {
    border-bottom: 1.5px dashed color-mix(in srgb, var(--color-accent) 25%, var(--color-border));
}
[data-theme="soft"] .feed-avatar {
    border-radius: 14px 6px 14px 6px;
    background: linear-gradient(135deg, #8FD3C2, #5FB5A6);
}

/* 表单：圆润手绘输入框 */
[data-theme="soft"] .form-input,
[data-theme="soft"] .form-select,
[data-theme="soft"] .form-textarea,
[data-theme="soft"] .search-box input {
    border-radius: 14px 7px 14px 7px;
    border-width: 1.5px;
}

/* 登录卡：涂鸦化 */
[data-theme="soft"] .login-card {
    border-radius: 32px 14px 32px 14px;
    border: 1.5px dashed color-mix(in srgb, var(--color-accent) 45%, transparent);
}

/* 导航：底部波浪装饰 */
[data-theme="soft"] .navbar {
    border-bottom: none;
}
[data-theme="soft"] .navbar::after {
    content: '';
    position: absolute;
    left: 0; right: 0; bottom: -1px;
    height: 4px;
    background: repeating-linear-gradient(90deg, color-mix(in srgb, var(--color-accent) 55%, transparent) 0 10px, transparent 10px 18px);
    opacity: 0.5;
    pointer-events: none;
}

/* 移动端涂鸦微调 */
@media (max-width: 768px) {
    [data-theme="soft"] .hero-panel { padding: 22px 20px; }
    [data-theme="soft"] .quick-item .qi-icon { border-radius: 15px 7px 15px 7px; }
}

/* ============================================================
   16. 学校合作端 · 高端极简风（data-theme="vibrant"）
   ------------------------------------------------------------
   克制配色 / 大留白 / 精致排版（imagegen-frontend-web: Mini Minimalist）
   ============================================================ */
[data-theme="vibrant"] .lp-section,
[data-theme="vibrant"] .page-header,
[data-theme="vibrant"] .stats-grid { letter-spacing: 0.02em; }
[data-theme="vibrant"] .stat-card,
[data-theme="vibrant"] .entity-card,
[data-theme="vibrant"] .card {
    border-radius: 6px;
    box-shadow: none;
    border-width: 1px;
}
[data-theme="vibrant"] .stat-card:hover,
[data-theme="vibrant"] .entity-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 14px 30px -18px rgba(13, 148, 136, 0.35);
}
/* 细线分隔，减少色块 */
[data-theme="vibrant"] .stat-card { background: var(--color-surface); }
[data-theme="vibrant"] .btn { border-radius: 4px; }
[data-theme="vibrant"] .section-head h3::after {
    height: 2px;
    width: 24px;
    background: var(--color-accent);
}

/* ============================================================
   17. 报纸风格（班级圈 / 家庭任务）· 所有账号统一
   ------------------------------------------------------------
   报刊剪贴风：泛黄纸底 / 衬线大报头 / 新闻卡 / 花线分隔 / 启事。
   作用域：newspaper-page 标记页（classList 由 showMomentsPage /
   showFamilyTasksPage 在登录后添加，全角色统一生效）。
   ============================================================ */
.newspaper-page {
    --np-paper: #F4EDDC;
    --np-paper-2: #FAF6E9;
    --np-ink: #2E2A23;
    --np-red: #A63A2B;
    --np-line: #CBBFA4;
    --np-serif: Georgia, "Noto Serif SC", "Songti SC", "SimSun", serif;

    background:
        repeating-linear-gradient(0deg, transparent 0 27px, rgba(46, 42, 35, 0.05) 27px 28px),
        var(--np-paper);
    padding: 24px 20px 34px;
    border-radius: 4px;
    box-shadow: inset 0 0 46px rgba(122, 100, 60, 0.14);
}

/* ---- 报头（Masthead） ---- */
.newspaper-page .page-header {
    position: relative;
    text-align: center;
    margin-bottom: 22px;
    padding: 4px 0 16px;
    border-bottom: 3px double var(--np-ink);
}
.newspaper-page .page-header::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0; right: 0;
    border-top: 2px solid var(--np-ink);
}
.newspaper-page .page-header h2 {
    font-family: var(--np-serif);
    font-size: clamp(30px, 5vw, 44px);
    font-weight: 800;
    letter-spacing: 0.32em;
    text-indent: 0.32em;
    color: var(--np-ink);
    margin: 4px 0 6px;
}
.newspaper-page .page-header .page-subtitle {
    font-family: var(--np-serif);
    font-style: italic;
    font-size: 13px;
    letter-spacing: 0.14em;
    color: var(--np-red);
    margin: 0;
}

/* ---- 班级圈：新闻卡 ---- */
.newspaper-page .moment-composer-card {
    background: var(--np-paper-2);
    border: 1px solid var(--np-line);
    border-radius: 2px;
    box-shadow: none;
}
.newspaper-page .moments-list > .card {
    position: relative;
    margin-top: 30px;
    overflow: visible;
    background: linear-gradient(180deg, var(--np-paper-2), var(--np-paper));
    border: 1px solid var(--np-line);
    border-radius: 2px;
    box-shadow: 0 2px 10px -6px rgba(46, 42, 35, 0.25);
}
.newspaper-page .moments-list > .card:first-child { margin-top: 0; }
/* 头条之间：花线分隔 */
.newspaper-page .moments-list > .card:not(:first-child)::before {
    content: '❦';
    position: absolute;
    top: -22px;
    left: 50%;
    transform: translateX(-50%);
    font-size: 14px;
    color: var(--np-red);
    background: var(--np-paper);
    padding: 0 8px;
    line-height: 1;
}
/* 报纸照片框 */
.newspaper-page .moment-images {
    background: var(--np-ink);
    padding: 4px;
    border-radius: 1px;
    margin-top: 12px;
}
.newspaper-page .moment-image {
    border-radius: 0;
    border: 1px solid #E9E2CF;
    filter: sepia(0.16) contrast(1.04);
}
/* 作者行：记者署名风 */
.newspaper-page .moment-author-name {
    font-family: var(--np-serif);
    font-size: 15px;
    font-weight: 700;
    color: var(--np-ink);
}
.newspaper-page .moment-class-badge {
    background: transparent;
    border: 1px solid var(--np-red);
    color: var(--np-red);
    font-family: var(--np-serif);
    letter-spacing: 0.1em;
    font-size: 11px;
    border-radius: 0;
}
.newspaper-page .moment-time {
    font-family: var(--np-serif);
    font-style: italic;
    color: var(--np-ink);
}
/* 正文：衬线排版 */
.newspaper-page .moment-content {
    font-family: var(--np-serif);
    font-size: 15px;
    line-height: 1.9;
    color: var(--np-ink);
    text-align: justify;
}
/* 点赞/评论：剪报脚注 */
.newspaper-page .moment-action-btn {
    font-family: var(--np-serif);
    font-size: 13px;
    color: var(--np-ink);
    background: var(--np-paper-2);
    border: 1px dashed var(--np-line);
    border-radius: 2px;
}
.newspaper-page .moment-action-btn:hover { background: var(--np-paper); }
.newspaper-page .moment-action-btn.liked { color: var(--np-red); border-color: var(--np-red); }
/* 评论 */
.newspaper-page .comment-input-row .form-input {
    border-radius: 2px;
    font-family: var(--np-serif);
}

/* ---- 家庭任务：启事公告栏 ---- */
.newspaper-page .task-list > .card {
    position: relative;
    overflow: visible;
    background: var(--np-paper-2);
    border: 1.5px dashed var(--np-ink);
    border-radius: 2px;
    box-shadow: none;
    margin-top: 22px;
}
.newspaper-page .task-list > .card:first-child { margin-top: 0; }
/* 启事编号章 */
.newspaper-page .task-list > .card:not(:first-child)::before {
    content: '· 启 事 ·';
    position: absolute;
    top: -11px;
    left: 16px;
    background: var(--np-paper);
    color: var(--np-red);
    font-family: var(--np-serif);
    font-size: 12px;
    letter-spacing: 0.22em;
    padding: 0 8px;
}
.newspaper-page .task-title {
    font-family: var(--np-serif);
    font-size: 19px;
    font-weight: 800;
    color: var(--np-ink);
}
.newspaper-page .task-card .badge {
    background: transparent;
    border: 1px solid var(--np-red);
    color: var(--np-red);
    font-family: var(--np-serif);
    letter-spacing: 0.08em;
    border-radius: 0;
    transform: none;
    box-shadow: none;
}
.newspaper-page .task-content {
    font-family: var(--np-serif);
    font-size: 14.5px;
    line-height: 1.85;
    color: var(--np-ink);
    text-align: justify;
}
.newspaper-page .task-meta {
    font-family: var(--np-serif);
    font-style: italic;
    color: var(--np-ink);
}
.newspaper-page .submission-done,
.newspaper-page .submission-pending {
    background: var(--np-paper);
    border: 1px solid var(--np-line);
    border-radius: 2px;
    font-family: var(--np-serif);
    font-size: 13.5px;
    color: var(--np-ink);
}
.newspaper-page .submission-note {
    font-family: var(--np-serif);
    font-style: italic;
}

/* ---- 报纸风移动端 ---- */
@media (max-width: 768px) {
    .newspaper-page { padding: 16px 12px 26px; }
    .newspaper-page .page-header h2 { letter-spacing: 0.22em; text-indent: 0.22em; }
    .newspaper-page .moment-content { font-size: 14px; line-height: 1.8; }
    .newspaper-page .task-title { font-size: 17px; }
}

/* ============================================================
   18. 登录页 · 微信登录图标
   ------------------------------------------------------------
   微信绿渐变圆章 + 旋转虚线环 + 呼吸光晕（全部主题通用）
   ============================================================ */
.wx-login-wrap {
    position: relative;
    width: 150px;
    height: 150px;
    margin: 0 auto 22px;
    display: flex;
    align-items: center;
    justify-content: center;
}
.wx-login-ring {
    position: absolute;
    inset: 0;
    border-radius: 50%;
    background:
        radial-gradient(circle at 34% 28%, rgba(255, 255, 255, 0.55), rgba(255, 255, 255, 0) 52%),
        linear-gradient(145deg, #34d37a 0%, #07a34d 58%, #059643 100%);
    box-shadow:
        0 20px 46px -14px rgba(7, 163, 77, 0.55),
        inset 0 2px 6px rgba(255, 255, 255, 0.45),
        inset 0 -8px 16px rgba(0, 80, 40, 0.28);
    transition: transform 0.35s cubic-bezier(0.34, 1.35, 0.64, 1), box-shadow 0.35s ease;
}
.wx-login-wrap:hover .wx-login-ring {
    transform: rotate(-6deg) scale(1.04);
    box-shadow: 0 26px 54px -14px rgba(7, 163, 77, 0.6), inset 0 2px 6px rgba(255, 255, 255, 0.45);
}
.wx-login-ring::before {
    content: '';
    position: absolute;
    inset: -12px;
    border-radius: 50%;
    border: 2px dashed rgba(7, 163, 77, 0.38);
    animation: wx-orbit 16s linear infinite;
}
.wx-login-ring::after {
    content: '';
    position: absolute;
    inset: -34px;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(7, 163, 77, 0.16), transparent 68%);
    z-index: -1;
}
.wx-login-badge {
    position: relative;
    z-index: 1;
    width: 66px;
    height: 66px;
    color: #fff;
    filter: drop-shadow(0 5px 12px rgba(0, 80, 40, 0.35));
    animation: wx-breathe 3.2s ease-in-out infinite;
}
.wx-login-badge svg { width: 100%; height: 100%; }
@keyframes wx-orbit { to { transform: rotate(360deg); } }
@keyframes wx-breathe {
    0%, 100% { transform: scale(1); }
    50%      { transform: scale(1.05); }
}
@media (prefers-reduced-motion: reduce) {
    .wx-login-ring::before,
    .wx-login-badge { animation: none; }
}
@media (max-width: 480px) {
    .wx-login-wrap { width: 132px; height: 132px; }
    .wx-login-badge { width: 58px; height: 58px; }
}

/* ============================================================
   19. 使用方向域语言
   ------------------------------------------------------------
   账号皮肤（三主题）管全局色调；页面级「域语言」按功能方向
   叠加。全部使用主题令牌，三主题通用、功能零改动。
   ============================================================ */

/* ---- 19.1 数据管理域 · 数据看板语言 ----
   班级管理 / 学生记录 / 签到考勤 / 数据统计 / 媒体库
   等宽数字、网格刻度、表格斑马纹、行透视强调 ---- */

/* 工具条：面板化（顶部主题色细条 + 轻微网格刻度） */
.toolbar-card {
    background:
        linear-gradient(180deg, color-mix(in srgb, var(--color-accent) 5%, var(--color-surface)), var(--color-surface) 46%);
    border-top: 2px solid var(--color-accent);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
}

/* 统计区：数字看板化（加大加粗 + 等宽） */
.stat-card .stat-value {
    font-size: 30px;
    font-weight: 800;
    letter-spacing: -0.02em;
    color: var(--color-ink);
}
.stat-card .stat-label {
    letter-spacing: 0.04em;
}
.page-stats .ps-value {
    font-size: 20px;
    font-weight: 760;
}
.page-stat {
    position: relative;
    overflow: hidden;
}
.page-stat::after {
    content: '';
    position: absolute;
    left: 0; right: 0; bottom: 0;
    height: 2px;
    background: linear-gradient(90deg, var(--color-accent), transparent 70%);
    opacity: 0.5;
}

/* 数据表格：看板化（表头加深 / 斑马纹 / 行左侧强调条） */
.data-table table,
table {
    border-collapse: separate;
    border-spacing: 0;
}
.data-table th,
table th {
    background: var(--color-surface-2);
    color: var(--color-text-secondary);
    font-weight: 700;
    font-size: 12.5px;
    letter-spacing: 0.05em;
    border-bottom: 1px solid var(--color-border);
    padding: 10px 12px;
}
.data-table td,
table td {
    border-bottom: 1px solid var(--color-border-light);
    padding: 10px 12px;
}
table tbody tr:nth-child(even) td {
    background: color-mix(in srgb, var(--color-ink) 2.5%, transparent);
}
table tbody tr {
    border-left: 3px solid transparent;
    transition: border-color 0.25s ease, transform 0.25s cubic-bezier(0.34, 1.35, 0.64, 1);
}
table tbody tr:hover td {
    background: color-mix(in srgb, var(--color-accent-soft) 60%, transparent);
}
table tbody tr:hover {
    border-left-color: var(--color-accent);
}

/* 实体数据卡（班级/学生）：hover 左侧强调条 + 信息分层 */
.entity-card {
    padding: 18px 20px;
}
.entity-card::before {
    content: '';
    position: absolute;
    left: 0; top: 14%; bottom: 14%;
    width: 3px;
    border-radius: 3px;
    background: linear-gradient(180deg, var(--color-accent), var(--color-gold));
    opacity: 0;
    transition: opacity 0.25s ease;
}
.entity-card:hover::before { opacity: 1; }
.entity-tile {
    width: 50px; height: 50px;
    font-size: 20px;
}
.entity-meta {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}

/* 媒体库：相框化 + 缩略图微光 */
.media-grid {
    gap: 18px;
}
.media-card {
    border: 1px solid var(--color-border-light);
    background: var(--color-surface);
}
.media-card:hover {
    border-color: color-mix(in srgb, var(--color-accent) 35%, var(--color-border));
}
.media-card-thumb img {
    filter: saturate(0.92);
}
.media-card:hover .media-card-thumb img {
    filter: saturate(1.05) contrast(1.03);
}

/* 搜索框：数据筛选感 */
.search-box input {
    background: var(--color-surface-2);
    border-color: transparent;
}
.search-box input:focus {
    background: var(--color-surface);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-accent) 18%, transparent);
}

/* ---- 19.2 教学备课域 · 纸面备课语言 ----
   教案中心 / 课程 / 课表 / PPT / 草稿 / 作业
   档案夹与纸页质感：暖纸底、书签条、折角、批注线
   （替换教案中心旧硬编码蓝/绿气泡 → 主题令牌纸感卡） ---- */

/* 教案中心：气泡 → 纸稿卡片 */
.lp-bubble-grid {
    gap: 22px;
    padding: 10px 0;
}
.lp-bubble {
    border-radius: 12px;
    border: 1px solid var(--color-border-light);
    box-shadow: var(--shadow-sm);
    transition: transform 0.3s cubic-bezier(0.34, 1.35, 0.64, 1),
                box-shadow 0.35s ease,
                border-color 0.3s ease;
}

/* 文件夹 → 米色档案袋（顶部书签条） */
.lp-bubble-folder {
    background: linear-gradient(160deg,
        color-mix(in srgb, var(--color-accent) 14%, var(--color-surface)),
        color-mix(in srgb, var(--color-accent) 6%, var(--color-surface)));
    border: 1px solid color-mix(in srgb, var(--color-accent) 28%, var(--color-border));
}
.lp-bubble-folder::before {
    content: '';
    position: absolute;
    top: 0;
    left: 14px;
    width: 34px;
    height: 11px;
    border-radius: 0 0 6px 6px;
    background: linear-gradient(180deg, var(--color-accent), color-mix(in srgb, var(--color-accent) 55%, #fff));
    box-shadow: 0 2px 6px -2px rgba(0, 0, 0, 0.28);
    z-index: 3;
}
.lp-bubble-folder:hover {
    background: linear-gradient(160deg,
        color-mix(in srgb, var(--color-accent) 22%, var(--color-surface)),
        color-mix(in srgb, var(--color-accent) 9%, var(--color-surface)));
    transform: translateY(-6px) rotate(-0.6deg);
    box-shadow: 0 16px 34px -14px color-mix(in srgb, var(--color-accent) 50%, transparent);
    border-color: color-mix(in srgb, var(--color-accent) 45%, transparent);
}
.lp-bubble-folder:active {
    transform: translateY(-2px) scale(0.98);
}

/* 教案 → 白纸页 + 折角 */
.lp-bubble-plan {
    background: linear-gradient(180deg,
        var(--color-surface),
        color-mix(in srgb, var(--color-success) 7%, var(--color-surface)));
    border: 1px solid color-mix(in srgb, var(--color-success) 25%, var(--color-border));
}
.lp-bubble-plan::after {
    content: '';
    position: absolute;
    top: 0; right: 0;
    width: 20px; height: 20px;
    background: linear-gradient(225deg, transparent 50%, color-mix(in srgb, var(--color-success) 28%, transparent) 51%);
    border-top-right-radius: 10px;
    z-index: 3;
}
.lp-bubble-plan:hover {
    background: linear-gradient(180deg,
        var(--color-surface),
        color-mix(in srgb, var(--color-success) 12%, var(--color-surface)));
    transform: translateY(-6px) rotate(0.6deg);
    box-shadow: 0 16px 34px -14px color-mix(in srgb, var(--color-success) 45%, transparent);
    border-color: color-mix(in srgb, var(--color-success) 40%, transparent);
}
.lp-bubble-plan:active {
    transform: translateY(-2px) scale(0.98);
}

/* 图标与文字：跟随主题 */
.lp-bubble-icon {
    color: var(--color-accent);
    text-shadow: none;
}
.lp-bubble-icon-plan { color: var(--color-success); }
.lp-folder-svg { color: var(--color-accent); opacity: 0.28; }
.lp-file-svg { color: var(--color-success); opacity: 0.28; }
.lp-bubble-folder:hover .lp-folder-svg,
.lp-bubble-plan:hover .lp-file-svg { opacity: 0.45; }
.lp-bubble-name {
    color: var(--color-ink);
    font-weight: 700;
}
.lp-bubble-meta { color: var(--color-text-muted); }

/* 面包屑：纸面路径（下划线批注） */
.lp-breadcrumb-item {
    color: var(--color-text-secondary);
    border-bottom: 1px dashed transparent;
    transition: color 0.2s, border-color 0.2s;
}
.lp-breadcrumb-item:hover {
    color: var(--color-accent);
    border-bottom-color: var(--color-accent);
}

/* 课程卡：教学课程卡片（纸面封皮感） */
.course-grid {
    gap: 18px;
}
.course-card {
    position: relative;
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-md);
    background: var(--color-surface);
    box-shadow: var(--shadow-sm);
    overflow: hidden;
}
.course-card::before {
    content: '';
    position: absolute;
    left: 0; top: 0; bottom: 0;
    width: 4px;
    background: linear-gradient(180deg, var(--color-accent), var(--color-gold));
    opacity: 0;
    transition: opacity 0.25s ease;
}
.course-card:hover::before { opacity: 1; }

/* ---- 19.3 积分域 · 游乐卡包语言（轻量） ----
   积分管理 / 积分商城
   注：页面内积分数字为内联硬编码色，纯 CSS 不改动；
   此域将通用徽章升级为「印章卡券」描边，复用域1 表格/统计语言 ---- */
.badge-success,
.badge-warning,
.badge-danger,
.badge-info {
    border: 1px solid color-mix(in srgb, currentColor 32%, transparent);
    font-weight: 650;
    letter-spacing: 0.02em;
}

/* ---- 19.4 个人档案域 · 档案夹语言（轻量） ----
   个人设置 / 我的孩子 / 成长档案
   档案卡、成长时间线、印章式头像 ---- */

/* 孩子档案卡：头像印章 + 箭头滑入 */
.child-card {
    position: relative;
    overflow: hidden;
}
.child-avatar {
    font-weight: 800;
    letter-spacing: 0;
}
.child-card .child-arrow {
    font-size: 20px;
    font-weight: 700;
    color: var(--color-text-muted);
    transition: transform 0.3s cubic-bezier(0.34, 1.35, 0.64, 1), color 0.3s ease;
}
.child-card:hover .child-arrow {
    transform: translateX(4px);
    color: var(--color-accent);
}

/* 成长时间线：节点徽章 + 连线 */
.timeline-item {
    position: relative;
    padding-left: 22px;
}
.timeline-item::before {
    content: '';
    position: absolute;
    left: 6px; top: 6px;
    width: 9px; height: 9px;
    border-radius: 50%;
    background: var(--color-accent);
    box-shadow: 0 0 0 4px color-mix(in srgb, var(--color-accent) 18%, transparent);
}
.timeline-item::after {
    content: '';
    position: absolute;
    left: 10px; top: 20px; bottom: -14px;
    width: 1.5px;
    background: linear-gradient(180deg, color-mix(in srgb, var(--color-accent) 45%, transparent), transparent);
}
.timeline-item:last-child::after { display: none; }

/* ---- 19.5 效率工具域 · 智能控制台语言 ----
   AI工作台 / 视频处理 / 飞书文档 / 数据大屏
   硬编码色收敛为主题令牌 + 控制台灯条 + 状态流光 ---- */

/* AI 工作台：卡面主题化 + 顶部控制台灯条 */
.ai-studio-card {
    background: var(--color-surface);
    border: 1px solid var(--color-border-light);
    box-shadow: var(--shadow-sm);
    position: relative;
    overflow: hidden;
}
.ai-studio-card::before {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 3px;
    background: linear-gradient(90deg, var(--color-primary), var(--color-accent), var(--color-info));
    opacity: 0.75;
}
.ai-studio-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 16px 40px -16px color-mix(in srgb, var(--color-ink) 32%, transparent);
    border-color: color-mix(in srgb, var(--color-info) 35%, var(--color-border));
}
.ai-studio-card-title-row h3 { color: var(--color-ink); }
.ai-studio-card-desc { color: var(--color-text-secondary); }
.ai-studio-stat-value { color: var(--color-ink); }
.ai-studio-stat-label { color: var(--color-text-muted); }
.ai-studio-section-title { color: var(--color-ink); }

/* 视频处理：进度流光 */
.ve-progress-fill {
    position: relative;
    overflow: hidden;
}
.ve-progress-fill::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.45), transparent);
    transform: translateX(-100%);
    animation: ve-shimmer 1.8s ease-in-out infinite;
}
@keyframes ve-shimmer {
    0%   { transform: translateX(-100%); }
    60%, 100% { transform: translateX(100%); }
}

/* ---- 19.6 家校互动域 · 海报风扩展 ----
   活动管理 / 活动报名 / 赛事中心 / 教育基地 / 人才库
   海报色带、日期章感、hover 浮起（家长端已有报纸/涂鸦叠加） ---- */
.activity-grid,
.competition-grid {
    gap: 18px;
}
.activity-card,
.competition-card {
    position: relative;
    overflow: hidden;
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-md);
    background: var(--color-surface);
    box-shadow: var(--shadow-sm);
}
.activity-card::before,
.competition-card::before {
    content: '';
    position: absolute;
    left: 0; right: 0; top: 0;
    height: 4px;
    background: linear-gradient(90deg, var(--color-accent), var(--color-gold));
    opacity: 0.8;
}
.activity-card:hover,
.competition-card:hover {
    transform: translateY(-5px) scale(1.01);
    box-shadow: 0 18px 42px -18px color-mix(in srgb, var(--color-ink) 32%, transparent);
    border-color: color-mix(in srgb, var(--color-accent) 35%, var(--color-border));
}

/* ---- 19.7 通用组件补强（覆盖全部剩余功能页） ----
   工作台 / 经营面板 / 数据大屏 / 飞书文档 / 教育基地 /
   人才库 / 我的工作 / 智能相册 / 系统管理 等
   均在页面内联色已主题化（style 内旧色→CSS 变量）之上叠加 ---- */

/* 卡片头：左侧主题色条 */
.card-header {
    position: relative;
    padding-left: 14px;
}
.card-header::before {
    content: '';
    position: absolute;
    left: 0; top: 20%; bottom: 20%;
    width: 3px;
    border-radius: 3px;
    background: linear-gradient(180deg, var(--color-accent), var(--color-gold));
    opacity: 0.85;
}

/* 智能相册：封面硬编码渐变 → 主题令牌 */
.media-album-cover {
    background: linear-gradient(135deg, var(--color-info-soft), color-mix(in srgb, var(--color-info) 22%, var(--color-info-soft)));
}
.media-album-card {
    border: 1px solid var(--color-border-light);
}
.media-album-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 16px 40px -16px color-mix(in srgb, var(--color-ink) 30%, transparent);
    border-color: color-mix(in srgb, var(--color-accent) 30%, var(--color-border));
}

/* 空状态：图标光晕 + 更柔 */
.empty-state {
    border-style: dashed;
    border-width: 1.5px;
    background:
        radial-gradient(280px 160px at 50% -20%, color-mix(in srgb, var(--color-accent) 7%, transparent), transparent 70%),
        var(--color-surface);
}
.empty-state p:first-child {
    filter: drop-shadow(0 6px 14px color-mix(in srgb, var(--color-accent) 30%, transparent));
}

/* 行列表（待办/学校列表/账户列表等）：hover 背景过渡 */
.table-row {
    transition: background 0.25s ease, transform 0.25s cubic-bezier(0.34, 1.35, 0.64, 1);
    border-radius: 8px;
}
.table-row:hover {
    background: color-mix(in srgb, var(--color-accent-soft) 55%, transparent);
}

/* 标签页激活：渐变指示 */
.tab-item {
    position: relative;
}

/* ============================================================
   18. GCCA 商业系统 · 纸质商品书·咖啡金主题（与小程序 book-theme 同步）
   ------------------------------------------------------------
   设计语言：米白纸张 + 油墨文字 + 铜金点缀（同步小程序 book-theme.wxss）
   paper #faf5ec / paper-2 #f6eedd / paper-3 #f3ead9
   card #fffdf8 / ink #4a3320 / ink-2 #8a6f52 / ink-3 #b39b7e
   gold #c19352 / gold-hi #d4a76a / gold-pale #e0c9a5
   作用域：gcca-book-page 标记页（handleRoute 对 #/gcca 路由自动添加，
   含 GCCA 落地页/仪表盘/库存/财务/订单/商品/门店等全部小程序联动页面）
   ============================================================ */
.gcca-book-page {
    --gb-paper: #faf5ec;
    --gb-paper-2: #f6eedd;
    --gb-paper-3: #f3ead9;
    --gb-card: #fffdf8;
    --gb-ink: #4a3320;
    --gb-ink-2: #8a6f52;
    --gb-ink-3: #b39b7e;
    --gb-gold: #c19352;
    --gb-gold-hi: #d4a76a;
    --gb-gold-pale: #e0c9a5;
    --gb-serif: Georgia, "Noto Serif SC", "Songti SC", "SimSun", serif;

    position: relative;
    background:
        radial-gradient(ellipse at 18% -8%, rgba(212, 167, 106, 0.14) 0%, rgba(212, 167, 106, 0) 55%),
        radial-gradient(ellipse at 92% 108%, rgba(193, 147, 82, 0.12) 0%, rgba(193, 147, 82, 0) 55%),
        linear-gradient(180deg, var(--gb-paper) 0%, var(--gb-paper-2) 45%, var(--gb-paper-3) 100%);
    padding: 24px 20px 40px;
    border-radius: 4px;
    box-shadow: inset 0 0 40px rgba(139, 108, 60, 0.10);
}

/* 纸张纤维噪点 */
.gcca-book-page::before {
    content: '';
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    background-image:
        radial-gradient(rgba(138, 111, 82, 0.05) 1px, transparent 1.4px),
        radial-gradient(rgba(138, 111, 82, 0.04) 1px, transparent 1.2px);
    background-size: 32px 32px, 48px 48px;
    background-position: 0 0, 16px 24px;
    pointer-events: none;
    z-index: 0;
    border-radius: 4px;
}
.gcca-book-page > * { position: relative; z-index: 1; }

/* ---- 页头：书章标题 ---- */
.gcca-book-page .page-header h2 {
    font-family: var(--gb-serif);
    color: var(--gb-ink);
    letter-spacing: 0.06em;
}
.gcca-book-page .page-header h2::before {
    background: linear-gradient(180deg, var(--gb-gold-hi), var(--gb-gold));
}
.gcca-book-page .page-header p { color: var(--gb-ink-2); }
.gcca-book-page h3 { font-family: var(--gb-serif); color: var(--gb-ink); }

/* ---- 金色主按钮 ---- */
.gcca-book-page .btn-primary {
    background: linear-gradient(135deg, #e0c9a5 0%, #d4a76a 55%, #c19352 100%);
    border: none;
    color: #fff;
    box-shadow: 0 4px 14px rgba(193, 147, 82, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.45);
}
.gcca-book-page .btn-primary:hover {
    background: linear-gradient(135deg, #e0c9a5 0%, #d4a76a 45%, #c19352 90%);
    box-shadow: 0 6px 18px rgba(193, 147, 82, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.5);
    filter: none;
}
.gcca-book-page .btn-outline {
    border-color: rgba(193, 147, 82, 0.55);
    color: var(--gb-ink-2);
    background: rgba(255, 253, 248, 0.6);
}
.gcca-book-page .btn-outline:hover {
    border-color: var(--gb-gold-hi);
    color: var(--gb-ink);
    background: rgba(212, 167, 106, 0.14);
}

/* ---- Tab 激活金色 ---- */
.gcca-book-page .tab-bar { border-bottom-color: rgba(193, 147, 82, 0.3); }
.gcca-book-page .tab-item { color: var(--gb-ink-2); display: inline-flex; align-items: center; gap: 6px; }
.gcca-book-page .tab-item:hover { color: var(--gb-gold); background: rgba(212, 167, 106, 0.10); }
.gcca-book-page .tab-item.active,
.gcca-book-page .tab-item.tab-active {
    color: var(--gb-gold);
    border-bottom-color: var(--gb-gold);
    font-weight: 600;
}

/* ---- 数据表：书页表头 ---- */
.gcca-book-page .data-table th,
.gcca-book-page table th {
    background: linear-gradient(180deg, var(--gb-gold-pale), #ecd9b6);
    color: var(--gb-ink);
    font-family: var(--gb-serif);
    letter-spacing: 0.04em;
    border-bottom: 1px solid rgba(193, 147, 82, 0.4);
}
.gcca-book-page .data-table td,
.gcca-book-page table td {
    border-bottom-color: rgba(193, 147, 82, 0.2);
    color: var(--gb-ink);
}
.gcca-book-page .data-table tbody tr:hover,
.gcca-book-page table tr:hover td {
    background: rgba(212, 167, 106, 0.09);
}

/* ---- 卡片：书页卡（左金书脊 + 3D 厚度） ---- */
.gcca-book-page .card {
    position: relative;
    background: var(--gb-card);
    border: 1px solid rgba(193, 147, 82, 0.28);
    border-left: 4px solid var(--gb-gold-hi);
    border-radius: 4px 12px 12px 4px;
    box-shadow: 0 2px 3px rgba(139, 108, 60, 0.14), 0 8px 20px rgba(139, 108, 60, 0.10);
}
.gcca-book-page .card:hover {
    border-color: rgba(193, 147, 82, 0.5);
    box-shadow: 0 4px 6px rgba(139, 108, 60, 0.16), 0 12px 28px rgba(139, 108, 60, 0.14);
}
.gcca-book-page .card-header { border-bottom-color: rgba(193, 147, 82, 0.22); }
.gcca-book-page .card-title { color: var(--gb-ink); font-family: var(--gb-serif); }

/* ---- 统计卡 ---- */
.gcca-book-page .stat-card {
    background: var(--gb-card);
    border: 1px solid rgba(193, 147, 82, 0.28);
    box-shadow: 0 2px 3px rgba(139, 108, 60, 0.12), 0 8px 18px rgba(139, 108, 60, 0.08);
}
.gcca-book-page .stat-card::before {
    background: linear-gradient(90deg, var(--gb-gold-pale), var(--gb-gold));
}
.gcca-book-page .stat-value { color: var(--gb-ink); }
.gcca-book-page .stat-label { color: var(--gb-ink-2); }

/* ---- 徽章 ---- */
.gcca-book-page .badge-info { background: rgba(212, 167, 106, 0.16); color: #8a6f52; }
.gcca-book-page .badge-success { background: rgba(139, 151, 95, 0.16); color: #5f6b3c; }
.gcca-book-page .badge-warning { background: rgba(220, 160, 80, 0.16); color: #a0762e; }
.gcca-book-page .badge-danger { background: rgba(188, 88, 70, 0.14); color: #a04434; }

/* ---- 表单聚焦金色 ---- */
.gcca-book-page .form-input:focus,
.gcca-book-page .form-select:focus,
.gcca-book-page .form-textarea:focus {
    border-color: var(--gb-gold);
    box-shadow: 0 0 0 3px rgba(212, 167, 106, 0.20);
}

/* ---- GCCA 落地页菜单 ---- */
.gcca-book-page .gcca-menu-item {
    background: var(--gb-card);
    border: 1px solid rgba(193, 147, 82, 0.28);
    border-radius: 12px;
    box-shadow: 0 1px 3px rgba(139, 108, 60, 0.08);
    transition: all .22s ease;
}
.gcca-book-page .gcca-menu-item:hover {
    border-color: var(--gb-gold);
    box-shadow: 0 8px 22px rgba(193, 147, 82, 0.22);
    transform: translateY(-3px);
}
.gcca-book-page .gcca-menu-name { color: var(--gb-ink); }
/* 图标统一金/咖啡色系（替代原蓝系） */
.gcca-book-page .gcca-menu-icon {
    background: rgba(212, 167, 106, 0.16);
    color: #8a6f52;
    transition: transform .22s ease;
}
.gcca-book-page .gcca-menu-item:hover .gcca-menu-icon {
    transform: scale(1.10) rotate(-3deg);
}
.gcca-book-page .gcca-icon-money,
.gcca-book-page .gcca-icon-bank,
.gcca-book-page .gcca-icon-vip,
.gcca-book-page .gcca-icon-tag {
    background: rgba(212, 167, 106, 0.22);
    color: #a0762e;
}
.gcca-book-page .gcca-icon-cart,
.gcca-book-page .gcca-icon-package,
.gcca-book-page .gcca-icon-box {
    background: rgba(139, 111, 66, 0.14);
    color: #6f5326;
}

/* ---- GCCA 门店选择器 / 角色徽章 / 模式切换 ---- */
.gcca-book-page .gcca-store-selector {
    background: var(--gb-card);
    border-color: rgba(193, 147, 82, 0.4);
}
.gcca-book-page .gcca-store-option.active {
    background: rgba(212, 167, 106, 0.16);
    color: #8a6f52;
    font-weight: 500;
}
.gcca-book-page .gcca-store-option:hover { background: rgba(212, 167, 106, 0.10); }
.gcca-book-page .gcca-role-badge.admin { background: rgba(212, 167, 106, 0.18); color: #8a6f52; }
.gcca-book-page .gcca-mode-option.active {
    background: var(--gb-card);
    color: var(--gb-gold);
    box-shadow: 0 1px 3px rgba(139, 108, 60, 0.2);
}

/* ---- 小统计条/信息块：纸感底色 ---- */
.gcca-book-page .gcca-store-option,
.gcca-book-page .gcca-section-title { color: var(--gb-ink-2); }
.gcca-book-page .gcca-section-line { background: var(--gb-gold-hi); }

/* ============================================================
   文档中心 · 飞书风格升级（2026-08-23）
   ============================================================ */

/* 卡片网格 */
.fs-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); gap:12px; }
.fs-card { position:relative; background:#fff; border:1px solid #e8eaed; border-radius:10px; padding:16px; cursor:pointer;
    transition:box-shadow .2s ease, transform .2s ease, border-color .2s ease; display:flex; gap:12px; align-items:flex-start; }
.fs-card:hover { box-shadow:0 6px 20px rgba(0,0,0,.08); transform:translateY(-2px); border-color:#c6d3e6; }
.fs-folder-icon { font-size:24px; width:46px; height:46px; border-radius:12px; background:#f5e9d7; color:#b8860b;
    display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.fs-doc-icon { font-size:22px; width:46px; height:46px; border-radius:12px;
    display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.fs-card-body { flex:1; min-width:0; }
.fs-card-name { font-size:14px; font-weight:500; color:#1f2328; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fs-card-tags { display:flex; gap:4px; margin-top:5px; flex-wrap:wrap; align-items:center; }
.fs-tag { font-size:10px; background:#f1f3f4; color:#5f6368; padding:1px 7px; border-radius:5px; font-weight:500; }
.fs-card-meta { font-size:11px; color:#9aa0a6; margin-top:5px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fs-card-ops { margin-top:8px; display:flex; gap:6px; align-items:center; flex-wrap:wrap; }

/* Markdown 阅读器（飞书文档风格排版） */
.md-reader-body { max-width:880px; margin:0 auto; padding:34px 48px 64px; background:#fff; border-radius:8px;
    box-shadow:0 1px 8px rgba(0,0,0,.06); font-family:-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;
    font-size:15px; line-height:1.85; color:#202124; word-break:break-word; }
.md-reader-body .md-h1 { font-size:26px; font-weight:700; margin:28px 0 14px; padding-bottom:10px; border-bottom:1px solid #f1f3f4; line-height:1.4; }
.md-reader-body .md-h2 { font-size:21px; font-weight:700; margin:26px 0 12px; line-height:1.4; }
.md-reader-body .md-h3 { font-size:17px; font-weight:600; margin:20px 0 10px; }
.md-reader-body .md-h4, .md-reader-body .md-h5, .md-reader-body .md-h6 { font-size:15px; font-weight:600; margin:16px 0 8px; }
.md-reader-body .md-p { margin:10px 0; }
.md-reader-body strong { font-weight:700; color:#16181d; }
.md-reader-body .md-code-inline { background:#f1f3f4; color:#c7254e; padding:2px 6px; border-radius:4px;
    font-family:'JetBrains Mono','Consolas',monospace; font-size:13px; }
.md-reader-body .md-code { background:#282c34; color:#e6e6e6; border-radius:8px; padding:14px 18px;
    overflow-x:auto; margin:14px 0; line-height:1.6; font-size:13px; }
.md-reader-body .md-code code { font-family:'JetBrains Mono','Consolas',monospace; }
.md-reader-body .md-quote { border-left:4px solid #1a73e8; background:#f6f9ff; margin:14px 0;
    padding:10px 16px; color:#4a5568; border-radius:0 8px 8px 0; }
.md-reader-body .md-list { margin:8px 0; padding-left:24px; }
.md-reader-body .md-list li { margin:4px 0; }
.md-reader-body .md-table-wrap { overflow-x:auto; margin:14px 0; }
.md-reader-body .md-table { width:100%; border-collapse:collapse; font-size:14px; }
.md-reader-body .md-table th { background:#f7f9fc; font-weight:600; text-align:left; padding:9px 12px; border:1px solid #e2e8f0; }
.md-reader-body .md-table td { padding:8px 12px; border:1px solid #e8edf3; }
.md-reader-body .md-table tr:nth-child(even) td { background:#fafbfc; }
.md-reader-body .md-img { max-width:100%; border-radius:8px; margin:8px 0; }
.md-reader-body .md-link { color:#1a73e8; text-decoration:none; }
.md-reader-body .md-link:hover { text-decoration:underline; }
.md-reader-body .md-hr { border:none; border-top:1px solid #e8eaed; margin:24px 0; }
.md-reader-body .md-task { list-style:none; margin-left:-18px; }
.md-reader-body .md-task input { margin-right:8px; }
.md-reader-body .md-task-done span { color:#999; text-decoration:line-through; }

/* 嵌套列表（阅读器） */
.md-reader-body ul.md-list ul, .md-reader-body ul.md-list ol,
.md-reader-body ol.md-list ul, .md-reader-body ol.md-list ol { margin:4px 0 4px; padding-left:26px; }
.md-reader-body ul.md-list ul { list-style:circle; }
.md-reader-body ul.md-list ul ul { list-style:square; }
.md-reader-body li { margin:5px 0; line-height:1.8; }

/* 富文本 HTML 内容（阅读器内直接渲染的 Quill 内容） */
.md-reader-rich { font-size:15px; line-height:1.85; }
.md-reader-rich h1, .md-reader-rich h2, .md-reader-rich h3 { margin:22px 0 10px; line-height:1.4; }
.md-reader-rich h1 { font-size:24px; border-bottom:1px solid #f1f3f4; padding-bottom:10px; }
.md-reader-rich h2 { font-size:20px; }
.md-reader-rich h3 { font-size:16.5px; }
.md-reader-rich p { margin:10px 0; }
.md-reader-rich ul, .md-reader-rich ol { margin:8px 0; padding-left:26px; }
.md-reader-rich li { margin:4px 0; }
.md-reader-rich blockquote { border-left:4px solid #1a73e8; background:#f6f9ff; margin:14px 0; padding:10px 16px; color:#4a5568; border-radius:0 8px 8px 0; }
.md-reader-rich img { max-width:100%; border-radius:8px; }
.md-reader-rich table { border-collapse:collapse; width:100%; margin:14px 0; font-size:14px; }
.md-reader-rich table td, .md-reader-rich table th { border:1px solid #e2e8f0; padding:8px 12px; }
.md-reader-rich table th { background:#f7f9fc; font-weight:600; }
.md-reader-rich pre { background:#282c34; color:#e6e6e6; border-radius:8px; padding:14px 18px; overflow-x:auto; font-size:13px; }
.md-reader-rich a { color:#1a73e8; }

/* 文档中心 · 当前文件夹操作栏 */
.fs-folder-actions { display:flex; align-items:center; gap:8px; flex-wrap:wrap;
    background:#fff; border:1px solid #e8eaed; border-radius:10px; padding:8px 12px; margin:0 0 12px; }

/* AI 找文件 / AI 助手 [doc:ID] 链接样式 */
.ai-doc-link { color:#1a73e8; font-weight:600; cursor:pointer; border-bottom:1px dashed #a8c7fa; }
.ai-doc-link:hover { color:#174ea6; }

/* Markdown 编辑器工具栏按钮 */
.md-tool-btn { border:none; background:transparent; padding:5px 9px; border-radius:6px; font-size:12px;
    cursor:pointer; color:#444; font-family:inherit; line-height:1.4; }
.md-tool-btn:hover { background:#f1f3f4; }
.md-tool-btn b, .md-tool-btn i { font-family:inherit; }

/* Quill 富文本增强样式 */
.ql-editor table { border-collapse:collapse; width:100%; margin:10px 0; }
.ql-editor table td, .ql-editor table th { border:1px solid #d5dce6; padding:6px 10px; }
.ql-editor img { max-width:100%; border-radius:6px; }
.ql-editor .ql-table { cursor:pointer; }

/* ============================================================
   文档中心 · 美术翻新（2026-08-23 v2：SVG 图标 / 排版 / 响应式 / 飞书内嵌）
   ============================================================ */

/* 通用：图标 + 文字的按钮 */
.fs-btn-with-icon { display:inline-flex; align-items:center; gap:6px; }
.fs-icon-btn { display:inline-flex; align-items:center; justify-content:center; }
.fs-btn-with-icon svg, .fs-icon-btn svg { flex-shrink:0; }

/* 列表页头部 */
.fs-header { align-items:center; flex-wrap:wrap; gap:10px; }
.fs-header-actions { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.fs-search { display:flex; align-items:center; gap:4px; height:34px; padding:0 10px;
    border:1px solid #d4dde8; border-radius:8px; background:#fff; width:220px; }
.fs-search input { border:none; outline:none; flex:1; font-size:13px; background:transparent; height:100%; }
.fs-search:focus-within { border-color:var(--color-primary,#4285f4); box-shadow:0 0 0 3px rgba(66,133,244,.12); }

/* 工具栏（分类 chips + 排序） */
.fs-toolbar { display:flex; align-items:center; gap:10px; margin:10px 0 14px; flex-wrap:wrap; }
.fs-chips { display:flex; gap:6px; overflow-x:auto; flex:1; min-width:0; padding-bottom:2px; }
.fs-chip { display:inline-flex; align-items:center; gap:5px; cursor:pointer; padding:6px 13px;
    border-radius:999px; font-size:12px; white-space:nowrap; color:#5f6368; background:#f1f3f4;
    border:1px solid transparent; transition:all .18s ease; flex-shrink:0; }
.fs-chip:hover { background:#e8eaed; }
.fs-chip-active { background:var(--color-primary,#4285f4); color:#fff; }
.fs-chip-active:hover { background:var(--color-primary,#4285f4); }
.fs-sort { height:30px; border:1px solid #d4dde8; border-radius:8px; font-size:12px; padding:0 8px; background:#fff; color:#3c4043; }

/* 面包屑 */
.fs-breadcrumb { display:flex; align-items:center; gap:4px; margin-bottom:12px; font-size:13px; color:#555; flex-wrap:wrap; }
.fs-breadcrumb-link { color:var(--color-primary,#4285f4); cursor:pointer; }
.fs-breadcrumb-link:hover { text-decoration:underline; }
.fs-breadcrumb-sep { display:inline-flex; color:#b0b6c0; margin:0 2px; }

/* 空状态 */
.fs-empty { padding:56px 16px !important; }
.fs-empty-icon { width:72px; height:72px; margin:0 auto 16px; border-radius:20px; background:#f1f3f4;
    color:#9aa0a6; display:flex; align-items:center; justify-content:center; }

/* 查看器 */
.fs-viewer { display:flex; flex-direction:column; height:calc(100vh - 100px); }
.fs-viewer-toolbar { display:flex; align-items:center; justify-content:space-between; gap:12px;
    padding:10px 20px; background:#fff; border-bottom:1px solid #e8eaed; flex-shrink:0; }
.fs-viewer-type { display:inline-block; background:#f1f3f4; color:#5f6368; font-size:10px;
    padding:1px 8px; border-radius:5px; margin-right:6px; font-weight:500; }
.fs-viewer-empty { flex:1; display:flex; align-items:center; justify-content:center;
    flex-direction:column; gap:14px; background:#f6f7f9; }

/* Markdown 编辑器 */
.md-toolbar { display:flex; align-items:center; gap:2px; padding:6px 16px; background:#fff;
    border-bottom:1px solid #e8eaed; flex-wrap:wrap; flex-shrink:0; }
.md-toolbar-sep { width:1px; height:18px; background:#e8eaed; margin:0 6px; }
.md-tool-btn { border:none; background:transparent; padding:6px 8px; border-radius:6px; font-size:12px;
    cursor:pointer; color:#4a5058; font-family:inherit; line-height:1; display:inline-flex; align-items:center; }
.md-tool-btn:hover { background:#f1f3f4; }
.md-tool-btn b, .md-tool-btn i { font-family:inherit; font-weight:700; }
.md-tool-btn-heading { font-weight:700; }
.md-split { flex:1; display:flex; min-height:0; }
.md-pane { flex:1; display:flex; flex-direction:column; min-width:0; border-right:1px solid #e8eaed; }
.md-pane-preview { background:#f6f7f9; border-right:none; }
.md-pane-label { padding:5px 16px; font-size:11px; color:#8a919e; background:#fafbfc; border-bottom:1px solid #f0f1f3; }

/* Quill 编辑器布局 */
.quill-layout { display:flex; gap:20px; height:calc(100vh - 160px); }
.quill-side { width:200px; flex-shrink:0; }

/* 飞书移动端文件库 */
.ff-header { padding:6px 2px 10px; }
.ff-header h2 { font-size:19px; font-weight:700; color:#1f2328; margin:0 0 4px; }
.ff-header p { color:#8a919e; font-size:12px; margin:0; }
.ff-search { display:flex; align-items:center; height:38px; padding:0 12px; margin-bottom:10px;
    border:1px solid #d4dde8; border-radius:9px; background:#fff; }
.ff-search input { border:none; outline:none; flex:1; font-size:14px; background:transparent; height:100%; }
.ff-tabs { display:flex; gap:6px; overflow-x:auto; padding:2px 0 10px; margin-bottom:2px; white-space:nowrap; }
.ff-tab { display:inline-flex; align-items:center; gap:5px; cursor:pointer; padding:7px 13px;
    border-radius:999px; font-size:13px; flex-shrink:0; color:#5f6368; background:#f1f3f4; transition:all .18s ease; }
.ff-tab-active { background:var(--color-primary,#4285f4); color:#fff; }

/* ===== 飞书内嵌精简模式：隐藏全局导航栏/顶栏 ===== */
body.fs-embed #navbar { display:none !important; }
body.fs-embed #main-content { padding:16px !important; margin:0 !important; max-width:none !important; }
body.fs-embed .nav-hamburger { display:none !important; }

/* ===== 响应式适配 ===== */
@media (max-width: 900px) {
    .fs-grid { grid-template-columns:repeat(auto-fill,minmax(160px,1fr)); gap:10px; }
    .fs-card { padding:12px; flex-direction:column; gap:10px; }
    .fs-doc-icon, .fs-folder-icon { width:40px; height:40px; font-size:20px; }
    .quill-layout { flex-direction:column; height:auto; }
    .quill-side { width:100%; display:flex; gap:12px; }
    .quill-side .card { flex:1; margin-bottom:0; }
    .md-split { flex-direction:column; }
    .md-pane { border-right:none; border-bottom:1px solid #e8eaed; min-height:240px; }
    .md-pane-preview { min-height:280px; }
    .fs-header-actions { width:100%; }
    .fs-search { width:100%; }
}
@media (max-width: 600px) {
    .fs-viewer { height:calc(100vh - 56px); }
    .fs-viewer-toolbar { padding:8px 12px; }
    .md-reader-body { padding:24px 18px 48px; font-size:15px; }
    .fs-card-name { font-size:13px; }
    .fs-toolbar { margin-top:8px; }
    .ff-tabs { padding-bottom:8px; }
}

/* ============================================================
   移动端表格兜底：数据表格容器横向滚动，避免撑破页面
   ============================================================ */
@media (max-width: 768px) {
    .data-table {
        display: block;
        width: 100%;
        overflow-x: auto;
        white-space: nowrap;
        -webkit-overflow-scrolling: touch;
    }

    /* 页面头/工具条/按钮组允许换行，避免横向撑破 */
    .page-header,
    .toolbar-card,
    .header-actions,
    .card-header,
    .page-stats,
    .filter-bar,
    .form-actions {
        flex-wrap: wrap;
        gap: 8px;
    }

    /* 页面头内联 flex 按钮行（无 class）也允许换行 */
    .page-header > div,
    .toolbar-card > div {
        flex-wrap: wrap;
        max-width: 100%;
    }

    /* Tab 栏移动端横向滚动，避免溢出 */
    .tab-bar {
        overflow-x: auto;
        white-space: nowrap;
        -webkit-overflow-scrolling: touch;
        flex-wrap: nowrap;
    }
    .tab-bar .tab-item {
        flex-shrink: 0;
    }
}

/* ===== 旧内核（Android 6 系统 WebView ≈ Chrome 44）不支持 CSS Grid 的降级 ===== */
@supports not (display:grid) {
    .stats-grid, .quick-grid, .home-grid, .skin-grid, .entity-grid,
    .form-grid, .bento-grid, .bento-1, .bento-2, .bento-3 {
        display: flex !important;
        flex-wrap: wrap !important;
        gap: 10px;
    }
    .stats-grid > *, .quick-grid > *, .home-grid > *, .skin-grid > *,
    .entity-grid > *, .form-grid > *, .bento-grid > *, .bento-1, .bento-2, .bento-3 {
        flex: 1 1 auto;
        width: calc(33.333% - 10px);
        min-width: 120px;
    }
    @media (max-width: 900px) {
        .stats-grid > *, .quick-grid > *, .home-grid > *, .skin-grid > *,
        .entity-grid > *, .form-grid > *, .bento-grid > *, .bento-1, .bento-2, .bento-3 {
            width: calc(50% - 10px);
            min-width: 110px;
        }
    }
    @media (max-width: 480px) {
        .stats-grid > *, .quick-grid > *, .home-grid > *, .skin-grid > *,
        .entity-grid > *, .form-grid > *, .bento-grid > *, .bento-1, .bento-2, .bento-3 {
            width: 100%;
            min-width: 0;
        }
    }
}

/* ===== GCCA收银 POS App 精简模式：隐藏主站导航，只显示收银功能 ===== */
body.pos-app-mode .navbar { display: none !important; }
body.pos-app-mode #page-container { padding-top: 0 !important; }


/* ==================== 移动端专属适配（库存管理/调拨/概览，简约风格） ==================== */
@media (max-width: 640px) {
  .page-header { flex-direction: column; align-items: stretch !important; gap: 8px; padding: 0 2px; }
  .page-header h2 { font-size: 17px; margin: 0 0 2px; }
  .page-header > div { flex-wrap: wrap; gap: 6px !important; }
  .page-header .btn { flex: 1 1 30%; min-width: 88px; padding: 7px 6px; font-size: 12.5px; }
  .page-header .form-select, .page-header .form-input { width: 100% !important; min-width: 0 !important; }
  .tab-bar.inv-tabbar { overflow-x: auto; -webkit-overflow-scrolling: touch; white-space: nowrap; padding-bottom: 4px; margin-bottom: 10px !important; }
  .tab-bar.inv-tabbar .tab-item { flex-shrink: 0; padding: 7px 12px; font-size: 13px; }
  .inv-tabbar + .card, .inv-tabbar ~ .card { border-radius: 10px; box-shadow: none !important; }
  /* 库存品表格 -> 卡片式列表 */
  #gcca-inventory-table { display: block; border: none !important; }
  #gcca-inventory-table thead { display: none; }
  #gcca-inventory-table tbody { display: block; }
  #gcca-inventory-table tbody tr { display: block; border: 1px solid #e8eaed; border-radius: 12px; margin: 0 0 10px; padding: 6px 4px; background: #fff; box-shadow: none !important; }
  #gcca-inventory-table tbody td { display: flex; justify-content: space-between; align-items: center; border: none; padding: 5px 10px; font-size: 13px; text-align: right; }
  #gcca-inventory-table tbody td::before { content: attr(data-label); color: #98a0a8; font-weight: 600; font-size: 12px; margin-right: 12px; flex-shrink: 0; }
  #gcca-inventory-table tbody td[data-label="操作"] { flex-wrap: wrap; justify-content: flex-start; }
  #gcca-inventory-table tbody td[data-label="操作"]::before { content: '操作'; }
  #gcca-inventory-table tbody td[data-label="名称"] { flex-direction: column; align-items: flex-start; gap: 2px; }
  /* 调拨/概览 卡片全宽紧凑 */
  .card { border-radius: 10px; }
  #gcca-transfer-container .card-header, #gcca-overview-container .card-header { flex-direction: column; align-items: flex-start !important; gap: 6px; }
  #gcca-transfer-container .card-body { padding: 10px 8px !important; }
  #gcca-transfer-container .card-header > div:last-child { width: 100%; }
  #gcca-transfer-container .card-header .btn { flex: 1 1 44%; font-size: 12px; padding: 6px 4px; }
  #gcca-transfer-container table.data-table { font-size: 12px; }
  /* 概览 KPI 两列铺满 */
  #gcca-overview-container > div > div { width: 100% !important; min-width: 0 !important; }
  #gcca-overview-container [style*="min-width:130px"] { min-width: 0 !important; flex: 1 1 44% !important; padding: 10px 12px !important; }
  #gcca-overview-container [style*="min-width:300px"], #gcca-overview-container [style*="min-width:280px"], #gcca-overview-container [style*="min-width:260px"] { min-width: 0 !important; width: 100% !important; }
  /* 模态框铺满 */
  .modal { width: 96% !important; max-height: 88vh !important; }
  /* 页面两侧无空缺 */
  .page-content, #page-container { padding-left: 6px !important; padding-right: 6px !important; }
  body { background: #fff; }
  .card { box-shadow: none !important; }
}
/* ==================== 桌面左侧全局导航（2026-09：隐藏顶部导航栏，改为左侧可折叠侧栏） ==================== */
@media (min-width: 769px) {
    body.nav-side { --side-w: 232px; }
    body.nav-side .navbar {
        position: fixed; left: 0; top: 0; bottom: 0; width: var(--side-w);
        flex-direction: column; align-items: stretch; justify-content: flex-start; height: auto;
        margin: 0; padding: 0 0 10px; border-radius: 0; border: none;
        border-right: 1px solid #e8edf3; background: #fff; box-shadow: none;
        overflow: hidden auto; z-index: 1200; transition: width .18s, transform .18s;
    }
    body.nav-side #main-content, body.nav-side .footer { margin-left: var(--side-w); max-width: none; }
    body.nav-side .nav-hamburger { display: inline-flex; align-self: flex-end; position: static; margin: 12px 12px 0; }
    body.nav-side .nav-brand { padding: 10px 16px 6px; }
    body.nav-side .nav-menu {
        display: flex; flex-direction: column; align-items: stretch; gap: 2px;
        position: static; transform: none; width: 100%; height: auto; max-height: none;
        overflow: visible auto; box-shadow: none; border: none; border-radius: 0;
        padding: 4px 8px 10px; background: transparent; text-align: left;
    }
    body.nav-side .drawer-user { display: block !important; order: 99; margin: 10px 4px 0; padding: 10px 4px 0; border-top: 1px solid #f0f1f3; }
    body.nav-side .drawer-user-actions { display: flex; gap: 6px; margin-top: 8px; }
    body.nav-side .drawer-user-actions a, body.nav-side .drawer-user-actions button {
        flex: 1; text-align: center; font-size: 12px; padding: 6px 4px; color: #5f6b7a;
        background: #f6f8fa; border: none; border-radius: 6px; cursor: pointer; text-decoration: none;
    }
    body.nav-side .nav-user { display: none; }
    body.nav-side .nav-group { display: block; width: 100%; }
    body.nav-side .nav-group-label {
        display: flex; align-items: center; justify-content: space-between; width: 100%;
        padding: 9px 12px; border-radius: 8px; cursor: pointer; font-size: 14px;
    }
    body.nav-side .nav-group-label:hover { background: #f2f6fb; }
    body.nav-side .nav-group-label::after {
        content: ''; width: 7px; height: 7px; border-right: 1.6px solid #98a6b8;
        border-bottom: 1.6px solid #98a6b8; transform: rotate(45deg); transition: transform .15s;
        margin-right: 2px; flex-shrink: 0;
    }
    body.nav-side .nav-group.open .nav-group-label::after { transform: rotate(-135deg); }
    body.nav-side .nav-dropdown {
        position: static; display: none; width: 100%; box-shadow: none; border: none;
        border-radius: 0; padding: 2px 0 4px 10px; background: transparent;
    }
    body.nav-side .nav-group.open .nav-dropdown { display: flex; flex-direction: column; gap: 1px; }
    body.nav-side .nav-dropdown .nav-link, body.nav-side .nav-menu > .nav-link {
        display: block; width: 100%; padding: 8px 12px; border-radius: 8px;
        font-size: 13.5px; color: #40506b; box-sizing: border-box;
    }
    body.nav-side .nav-dropdown .nav-link:hover, body.nav-side .nav-menu > .nav-link:hover { background: #f2f6fb; }
    body.nav-side .nav-link.active { background: #e8f0fe; color: #1a73e8; }
    /* 折叠态：侧栏整体滑出，左上角悬浮按钮展开 */
    body.nav-side.nav-collapsed { --side-w: 0px; }
    body.nav-side.nav-collapsed .navbar { transform: translateX(-100%); }
}
#nav-float-open {
    display: none; position: fixed; left: 14px; top: 14px; z-index: 1300;
    width: 38px; height: 38px; border-radius: 10px; border: 1px solid #e0e6ee;
    background: #fff; color: #40506b; cursor: pointer; box-shadow: 0 2px 10px rgba(20,40,80,.10);
    align-items: center; justify-content: center; padding: 0;
}
body.nav-side.nav-collapsed #nav-float-open { display: inline-flex; }
@media (max-width: 768px) { #nav-float-open { display: none !important; } }

/* ==================== 侧栏补充（2026-09-03）：首页按钮 / 用户区优化 / 内容居中自适应 ==================== */
body.nav-side #nav-home-btn {
    display: inline-flex; align-items: center; justify-content: center;
    width: 32px; height: 32px; margin: 12px 0 0 12px; padding: 0;
    border: none; border-radius: 8px; background: #eef4ff; color: #1a73e8;
    cursor: pointer; align-self: flex-start; flex-shrink: 0;
}
body.nav-side #nav-home-btn:hover { background: #dbe9fe; }
body.nav-side .nav-hamburger { margin: 12px 12px 0 auto; }
body.nav-side .drawer-user-top { display: flex; align-items: center; gap: 8px; min-width: 0; }
body.nav-side .drawer-user-avatar {
    width: 34px; height: 34px; border-radius: 50%; overflow: hidden; flex-shrink: 0;
    background: #e8f0fe; color: #1a73e8; display: flex; align-items: center; justify-content: center; font-weight: 600;
}
body.nav-side .drawer-user-avatar img { width: 100%; height: 100%; object-fit: cover; }
body.nav-side .drawer-user-meta { min-width: 0; }
body.nav-side .drawer-user-name { font-size: 13px; font-weight: 600; color: #1c2b3a; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
body.nav-side .drawer-user-role { font-size: 11.5px; color: #8a97a8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
body.nav-side .drawer-user-actions a:hover, body.nav-side .drawer-user-actions button:hover { background: #e8f0fe; color: #1a73e8; }
/* 内容自适应：展开时内容区缩短并居中，折叠后自适应占满居中；侧栏不遮挡内容 */
body.nav-side #main-content { display: flex; justify-content: center; }
body.nav-side #page-container { width: 100%; max-width: 1450px; }

/* 侧栏用户操作：个人设置在上、退出登录在下（2026-09-03） */
body.nav-side .drawer-user-actions { flex-direction: column; gap: 4px; }


/* ==== 布局修正：消除 .main-content 横向溢出 ==== */
/* .main-content 同时有 width:100% 与 margin-left:232px（侧栏宽度），
   导致整站右侧溢出 232px 并出现横向滚动条。改为按剩余空间自适应。 */
body.nav-side #main-content{ width:auto; min-width:0; }
