/* ============================
   陈易工作台 - 液态金属 · 浅色
   ============================ */

* { margin: 0; padding: 0; box-sizing: border-box; }

:root {
    /* 浅灰银底色 */
    --bg-base: #eaecf0;
    --bg-deep: #e1e4e9;
    --bg-panel: #f3f5f8;
    --bg-card: #fbfcfd;
    /* 液态金属三段色 */
    --metal-1: #ffffff;
    --metal-2: #f1f3f6;
    --metal-3: #e0e4ea;
    --border: rgba(122, 132, 148, 0.22);
    --border-light: rgba(255, 255, 255, 0.75);
    /* 文字 */
    --text-primary: #2d323b;
    --text-secondary: #67707d;
    --text-muted: #9aa3b0;
    /* 香槟金强调（液态金属环境光） */
    --gold: #c29a4b;
    --gold-light: #e9cf8a;
    --gold-dark: #9c7a31;
    --gold-grad: linear-gradient(135deg, #eed48c, #c9a24e 50%, #a67f30);
    /* 状态色（柔和不刺眼） */
    --success: #3f9d6e;
    --warning: #cf9839;
    --danger: #d65b5b;
    --purple: #9684c9;
    --teal: #3f9d96;
    --radius: 16px;
    --radius-sm: 10px;
    --shadow: 0 5px 16px rgba(28, 34, 45, 0.07), 0 1px 3px rgba(28, 34, 45, 0.05);
    --sidebar-w: 220px;
    --bottom-nav-h: 78px;
}

/* 液态流光动画（金色光泽缓慢流动） */
@keyframes liquidFlow {
    0% { background-position: 0% 50%; }
    50% { background-position: 100% 50%; }
    100% { background-position: 0% 50%; }
}

html, body {
    height: 100%;
    overflow: hidden;
}

body {
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Microsoft YaHei', sans-serif;
    background: linear-gradient(180deg, var(--bg-base) 0%, var(--bg-deep) 100%);
    color: var(--text-primary);
    font-size: 14px;
    line-height: 1.5;
    -webkit-font-smoothing: antialiased;
}

/* ============================
   侧边栏（桌面端）· 液态银
   ============================ */
.sidebar {
    position: fixed;
    left: 0; top: 0; bottom: 0;
    width: var(--sidebar-w);
    background: linear-gradient(160deg, #f7f8fa 0%, #e9ebf0 60%, #dfe3e9 100%);
    border-right: 1px solid var(--border);
    box-shadow: inset -1px 0 0 var(--border-light), 2px 0 14px rgba(28, 34, 45, 0.05);
    display: flex;
    flex-direction: column;
    z-index: 100;
}

.sidebar-logo {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 20px 18px;
    border-bottom: 1px solid var(--border);
}

.logo-icon {
    font-size: 22px;
    background: linear-gradient(180deg, #e9d38e, #b89043);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

.logo-text {
    font-size: 16px;
    font-weight: 700;
    background: linear-gradient(180deg, #8a7a52, #5c5138);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

.nav-list {
    list-style: none;
    flex: 1;
    padding: 14px 12px;
}

.sidebar .nav-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 13px 16px;
    border-radius: 14px;
    cursor: pointer;
    transition: all 0.25s;
    color: var(--text-secondary);
    margin-bottom: 6px;
    font-size: 15px;
    font-weight: 500;
    position: relative;
}

.sidebar .nav-item:hover {
    background: linear-gradient(150deg, #ffffff, #eef0f4);
    color: var(--text-primary);
    box-shadow: inset 0 1px 0 var(--border-light), 0 2px 8px rgba(28, 34, 45, 0.06);
}

.sidebar .nav-item.active {
    background: linear-gradient(120deg, #ecd490, #c9a252 40%, #a98131 70%, #c9a252);
    background-size: 240% 100%;
    animation: liquidFlow 7s ease-in-out infinite;
    color: #fff;
    font-weight: 600;
    box-shadow: 0 4px 12px rgba(178, 140, 60, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.45);
    text-shadow: 0 1px 2px rgba(120, 88, 25, 0.35);
}

.sidebar-footer {
    padding: 16px;
    border-top: 1px solid var(--border);
    font-size: 12px;
    color: var(--text-muted);
}

/* ============================
   主内容区
   ============================ */
.content {
    margin-left: var(--sidebar-w);
    height: 100vh;
    overflow-y: auto;
    padding: 20px 24px 80px;
    -webkit-overflow-scrolling: touch;
}

.tab-content { display: none; }
.tab-content.active { display: block; animation: fadeIn 0.3s ease; }

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

.page-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 20px;
}

.page-header h1 {
    font-size: 24px;
    font-weight: 700;
    letter-spacing: 0.5px;
    background: linear-gradient(180deg, #3a3f48, #5c636e);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

.page-date {
    font-size: 13px;
    color: var(--text-secondary);
}

/* ============================
   统计卡片 · 液态金属块
   ============================ */
.stat-row {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
    margin-bottom: 18px;
}

.stat-card {
    background: linear-gradient(150deg, #ffffff 0%, #f4f6f8 45%, #e6e9ee 100%);
    border: 1px solid var(--border-light);
    border-radius: var(--radius);
    padding: 11px 8px;
    text-align: center;
    transition: all 0.25s;
    box-shadow: inset 0 1px 0 #fff, inset 0 -1px 0 rgba(0, 0, 0, 0.04), var(--shadow);
    position: relative;
    overflow: hidden;
}

/* 金属块顶部镜面高光 */
.stat-card::before {
    content: '';
    position: absolute;
    top: 0; left: 8%; right: 8%;
    height: 50%;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0));
    border-radius: 0 0 50% 50%;
    pointer-events: none;
}

.stat-card:hover {
    transform: translateY(-2px);
    box-shadow: inset 0 1px 0 #fff, 0 8px 22px rgba(28, 34, 45, 0.10);
}

.stat-today::after, .stat-doing::after, .stat-tomorrow::after, .stat-reminder::after {
    content: '';
    position: absolute;
    left: 18%; right: 18%;
    bottom: 0;
    height: 3px;
    border-radius: 3px 3px 0 0;
}
.stat-today::after { background: linear-gradient(90deg, #e9cf8a, #c9a252, #e9cf8a); }
.stat-doing::after { background: linear-gradient(90deg, #7fa8d8, #4d73a8, #7fa8d8); }
.stat-tomorrow::after { background: linear-gradient(90deg, #b3a3d8, #9684c9, #b3a3d8); }
.stat-reminder::after { background: linear-gradient(90deg, #e0b15f, #cf9839, #e0b15f); }

.stat-num {
    font-size: 25px;
    font-weight: 800;
    line-height: 1.15;
    position: relative;
    background: linear-gradient(180deg, #dcc07a, #b58d3c 60%, #9c7a31);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

.stat-tomorrow .stat-num {
    background: linear-gradient(180deg, #b9abd9, #8f7cc0 60%, #7d6ab0);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

.stat-doing .stat-num {
    background: linear-gradient(180deg, #93b8e0, #5d83b3 60%, #4a6e9e);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

.stat-reminder .stat-num {
    background: linear-gradient(180deg, #e2b76e, #c7923b 60%, #ad7d2d);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

.stat-label {
    font-size: 11px;
    color: var(--text-secondary);
    margin-top: 3px;
    position: relative;
}

/* ============================
   面板 · 液态金属块
   ============================ */
.panel {
    background: linear-gradient(150deg, #ffffff 0%, #f3f5f8 45%, #e6e9ee 100%);
    border: 1px solid var(--border-light);
    border-radius: var(--radius);
    padding: 16px;
    margin-bottom: 16px;
    box-shadow: inset 0 1px 0 #fff, inset 0 -1px 0 rgba(0, 0, 0, 0.04), var(--shadow);
    position: relative;
}

.panel-reminder {
    border-color: rgba(207, 152, 57, 0.4);
    background: linear-gradient(150deg, #fffdf6 0%, #f7f2e6 45%, #efe7d6 100%);
}

/* 进程中面板（2026-09-07）：淡蓝科技色调，区分提醒(金)/普通(灰白) */
.panel-doing {
    border-color: rgba(93, 131, 179, 0.35);
    background: linear-gradient(150deg, #f8fbff 0%, #eef3fa 45%, #e5ecf5 100%);
}

.panel-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 12px;
}

.panel-header h2 {
    font-size: 15px;
    font-weight: 600;
    display: flex;
    align-items: center;
    gap: 6px;
    color: var(--text-primary);
}

.panel-badge {
    background: linear-gradient(135deg, #e5b76c, #cf9839);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    padding: 2px 8px;
    border-radius: 10px;
    min-width: 20px;
    text-align: center;
    box-shadow: 0 2px 6px rgba(207, 152, 57, 0.35);
}

.panel-hint {
    font-size: 12px;
    color: var(--text-muted);
    margin-bottom: 10px;
}

/* ============================
   任务列表
   ============================ */
.task-list { display: flex; flex-direction: column; gap: 8px; }

.task-group-label {
    font-size: 12px;
    color: var(--text-secondary);
    padding: 10px 4px 4px;
    font-weight: 600;
    display: flex;
    align-items: center;
    gap: 4px;
    border-bottom: 1px solid var(--border);
    margin-bottom: 4px;
}

.task-item {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 12px;
    background: linear-gradient(150deg, #ffffff 0%, #f6f7f9 60%, #edf0f3 100%);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-sm);
    transition: all 0.2s;
    cursor: pointer;
    box-shadow: inset 0 1px 0 #fff, 0 2px 8px rgba(28, 34, 45, 0.05);
}

.task-item:hover {
    border-color: rgba(194, 154, 75, 0.5);
    box-shadow: inset 0 1px 0 #fff, 0 4px 14px rgba(178, 140, 60, 0.14);
    transform: translateY(-1px);
}

.task-item.completed {
    opacity: 0.55;
}

.task-item.completed .task-title {
    text-decoration: line-through;
    color: var(--text-muted);
}

.task-item.delayed {
    border-left: 3px solid var(--warning);
    background: linear-gradient(150deg, #fffdf6 0%, #f7f1e4 100%);
}

/* 进程中任务（2026-09-07）：左侧科技蓝边 + 淡蓝卡片 */
.task-item.doing {
    border-left: 3px solid #5d83b3;
    background: linear-gradient(150deg, #f8fbff 0%, #eef3fa 100%);
}
.task-item.doing .task-title::before {
    content: '⏳ ';
    font-weight: 400;
}

.task-checkbox {
    width: 22px;
    height: 22px;
    border: 2px solid #c3c9d2;
    border-radius: 8px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: all 0.2s;
    margin-top: 1px;
    background: linear-gradient(150deg, #ffffff, #eef0f4);
    box-shadow: inset 0 1px 0 #fff;
}

.task-checkbox:hover { border-color: var(--gold); }

.task-checkbox.checked {
    background: linear-gradient(135deg, #e9cf8a, #c29a4b 55%, #a67f30);
    border-color: #b08a3e;
    box-shadow: 0 2px 6px rgba(178, 140, 60, 0.35);
}

.task-checkbox.checked::after {
    content: '✓';
    color: #fff;
    font-size: 13px;
    font-weight: 700;
}

.task-content { flex: 1; min-width: 0; }

/* 任务备注：默认单行省略，点击任务展开完整内容 */
.task-note {
    font-size: 12px;
    color: var(--text-secondary);
    margin-top: 4px;
    line-height: 1.6;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    display: flex;
    align-items: center;
    gap: 4px;
}
.task-note::before {
    content: '▸';
    font-size: 10px;
    color: var(--gold);
    flex-shrink: 0;
}
.note-expanded .task-note {
    display: block;
    white-space: normal;
    word-break: break-word;
    max-height: 140px;
    overflow-y: auto;
    padding-right: 4px;
}
.note-expanded .task-note::before {
    content: '▾';
    margin-right: 4px;
}
.note-expanded .task-note::-webkit-scrollbar { width: 4px; }
.note-expanded .task-note::-webkit-scrollbar-thumb { background: rgba(128, 128, 128, 0.35); border-radius: 2px; }
.note-expanded .task-note::-webkit-scrollbar-track { background: transparent; }
/* 有备注的任务给标题一个可点击展开的视觉暗示 */
.task-item .task-content { cursor: pointer; }

.task-title {
    font-size: 14px;
    font-weight: 500;
    word-break: break-word;
}

.task-meta {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 4px;
    flex-wrap: wrap;
}

.task-tag {
    font-size: 11px;
    padding: 1px 8px;
    border-radius: 6px;
    font-weight: 500;
}

.tag-ads { background: rgba(194, 154, 75, 0.16); color: #a67f30; }
.tag-ai { background: rgba(150, 132, 201, 0.16); color: #7d6ab0; }
.tag-study { background: rgba(63, 157, 150, 0.16); color: #2f7d77; }
.tag-general { background: rgba(122, 132, 148, 0.14); color: var(--text-secondary); }

.task-priority {
    font-size: 11px;
    padding: 1px 6px;
    border-radius: 6px;
}

.priority-high { background: rgba(214, 91, 91, 0.14); color: #c04a4a; }
.priority-medium { background: rgba(207, 152, 57, 0.15); color: #b07c2c; }
.priority-low { background: rgba(122, 132, 148, 0.14); color: var(--text-secondary); }

.task-delayed-badge {
    font-size: 11px;
    color: var(--warning);
    font-weight: 600;
}

/* v5.57：子任务标注来源主任务 */
.task-from-badge {
    font-size: 11px;
    padding: 1px 7px;
    border-radius: 6px;
    background: rgba(24, 95, 165, 0.10);
    color: #3f6f9f;
    font-weight: 500;
    max-width: 200px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.task-delete {
    color: var(--text-muted);
    cursor: pointer;
    padding: 2px 6px;
    border-radius: 4px;
    font-size: 16px;
    line-height: 1;
    transition: all 0.2s;
    opacity: 0;
}

.task-item:hover .task-delete { opacity: 1; }
.task-delete:hover { color: var(--danger); background: rgba(214, 91, 91, 0.1); }

.task-edit {
    color: var(--text-muted);
    cursor: pointer;
    padding: 2px 6px;
    border-radius: 4px;
    font-size: 15px;
    line-height: 1;
    transition: all 0.2s;
    opacity: 0;
}

.task-item:hover .task-edit { opacity: 1; }
.task-edit:hover { color: var(--gold); background: rgba(194, 154, 75, 0.12); }

.task-empty {
    text-align: center;
    color: var(--text-muted);
    padding: 20px;
    font-size: 13px;
}

/* 已完成面板折叠（2026-08-24） */
.done-panel-header { cursor: pointer; user-select: none; }
.done-panel-header:hover h2 { color: var(--gold-dark); }
.done-count {
    font-size: 11px;
    font-weight: 500;
    color: var(--text-muted);
    background: #eef1f5;
    border-radius: 10px;
    padding: 1px 8px;
    margin-left: 4px;
    vertical-align: middle;
}
.done-toggle {
    font-size: 12px;
    color: var(--text-muted);
}
.done-collapsed { display: none; }

/* ============================
   任务 · 父子结构（2026-08-20）
   ============================ */
.task-parent {
    background: linear-gradient(150deg, #FFF9EC, #FBF3E2);
    border: 1px solid #E8D5A8;
    box-shadow: inset 0 1px 0 #fff;
}
.task-child {
    margin-left: 34px;
    border-left: 2px solid #E0C98F;
    border-radius: 0 8px 8px 0;
    background: linear-gradient(150deg, #F7FAFF, #F0F5FC);
}
.task-child .task-title { font-weight: 500; color: #40506b; }
.task-collapse {
    cursor: pointer;
    color: var(--gold-dark);
    background: rgba(194, 154, 75, 0.12);
    border-radius: 4px;
    padding: 1px 7px;
    font-size: 11px;
    font-weight: 600;
    margin-left: 6px;
    user-select: none;
}
.task-collapse:hover { background: rgba(194, 154, 75, 0.22); }
.task-addsub {
    cursor: pointer;
    color: #185FA5;
    background: rgba(24, 95, 165, 0.08);
    border-radius: 4px;
    padding: 1px 7px;
    font-size: 11px;
    font-weight: 600;
    margin-left: 4px;
    user-select: none;
}
.task-addsub:hover { background: rgba(24, 95, 165, 0.16); }
/* 「＋ 子任务」按钮（示意图样式，点击展开内联输入框） */
.task-addsub-btn {
    cursor: pointer;
    color: var(--gold-dark);
    background: rgba(194, 154, 75, 0.12);
    border: 1px solid #e0c98f;
    border-radius: 4px;
    padding: 1px 8px;
    font-size: 11px;
    font-weight: 600;
    margin-left: 6px;
    user-select: none;
    transition: all 0.2s;
}
.task-addsub-btn:hover { background: rgba(194, 154, 75, 0.22); }

/* 「⏳ 进程」按钮（2026-09-07）：任务卡上切换到进程中栏 */
.task-do-btn {
    cursor: pointer;
    color: #3569a8;
    background: rgba(53, 105, 168, 0.10);
    border: 1px solid #b6cde6;
    border-radius: 4px;
    padding: 1px 8px;
    font-size: 11px;
    font-weight: 600;
    margin-left: 6px;
    user-select: none;
    transition: all 0.2s;
    white-space: nowrap;
}
.task-do-btn:hover { background: rgba(53, 105, 168, 0.20); }
.task-do-btn.doing {
    color: #2f7d77;
    background: rgba(63, 157, 150, 0.10);
    border-color: #a7d4cf;
}
.task-do-btn.doing:hover { background: rgba(63, 157, 150, 0.20); }
/* 内联添加输入框（点击按钮展开，不常驻占空间） */
.task-sub-inline {
    flex-basis: 100%;
    order: 10;
    width: 100%;
    padding: 6px 0 0 34px;
    display: none;
}
.task-sub-inline.show { display: block; }
.task-sub-inline input {
    width: 100%;
    box-sizing: border-box;
    padding: 7px 12px;
    border: 1px dashed #d9c08a;
    border-radius: 6px;
    background: rgba(194, 154, 75, 0.06);
    font-size: 12px;
    color: #40506b;
    outline: none;
    transition: all 0.2s;
}
.task-sub-inline input:focus {
    border-color: #c29a4b;
    background: #fffaf0;
}
.task-sub-inline input::placeholder { color: #b0a284; }

/* ============================
   业务概要
   ============================ */
.biz-overview {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px;
    margin-bottom: 16px;
}

.biz-overview-item {
    background: linear-gradient(150deg, #ffffff 0%, #f4f6f8 45%, #e6e9ee 100%);
    border: 1px solid var(--border-light);
    border-radius: var(--radius);
    padding: 14px;
    text-align: center;
    box-shadow: inset 0 1px 0 #fff, inset 0 -1px 0 rgba(0, 0, 0, 0.04), var(--shadow);
}

.biz-overview-item .label {
    display: block;
    font-size: 12px;
    color: var(--text-secondary);
    margin-bottom: 4px;
}

.biz-overview-item .value {
    font-size: 18px;
    font-weight: 700;
    background: linear-gradient(180deg, #dcc07a, #b58d3c 60%, #9c7a31);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
}

/* ============================
   业务状态卡片 · 液态金属
   ============================ */
.biz-status-row {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px;
}

.biz-status-card {
    background: linear-gradient(150deg, #ffffff 0%, #f4f6f8 45%, #e6e9ee 100%);
    border: 1px solid var(--border-light);
    border-radius: var(--radius);
    padding: 16px 12px;
    text-align: center;
    cursor: pointer;
    transition: all 0.25s;
    box-shadow: inset 0 1px 0 #fff, inset 0 -1px 0 rgba(0, 0, 0, 0.04), var(--shadow);
    position: relative;
    overflow: hidden;
}

.biz-status-card::before {
    content: '';
    position: absolute;
    top: 0; left: 10%; right: 10%;
    height: 45%;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.85), rgba(255, 255, 255, 0));
    border-radius: 0 0 50% 50%;
    pointer-events: none;
}

.biz-status-card:hover {
    transform: translateY(-2px);
    box-shadow: inset 0 1px 0 #fff, 0 8px 22px rgba(28, 34, 45, 0.10);
}

.biz-status-icon { font-size: 24px; margin-bottom: 6px; position: relative; }
.biz-ads .biz-status-icon { color: var(--gold); }
.biz-ai .biz-status-icon { color: var(--purple); }
.biz-study .biz-status-icon { color: var(--teal); }

.biz-status-name {
    font-size: 14px;
    font-weight: 600;
    margin-bottom: 4px;
    position: relative;
}

.biz-status-info {
    font-size: 12px;
    color: var(--text-secondary);
    position: relative;
}

/* ============================
   上传区域 · 液态金属
   ============================ */
.upload-area {
    border: 2px dashed rgba(194, 154, 75, 0.45);
    border-radius: var(--radius);
    padding: 24px;
    text-align: center;
    cursor: pointer;
    transition: all 0.2s;
    background: linear-gradient(150deg, #ffffff 0%, #f5f6f9 100%);
}

.upload-area:hover, .upload-area.dragover {
    border-color: var(--gold);
    background: linear-gradient(150deg, #fffdf5 0%, #f7f1e2 100%);
}

.upload-prompt { pointer-events: none; }

.upload-icon {
    display: inline-block;
    width: 52px;
    height: 52px;
    line-height: 52px;
    border-radius: 50%;
    /* 球形金属按钮：径向渐变模拟球面高光 */
    background: radial-gradient(circle at 32% 28%, #f7e9bd 0%, #d9b96c 28%, #b58d3c 62%, #8f6d26 100%);
    color: #fff;
    font-size: 26px;
    font-weight: 700;
    margin-bottom: 8px;
    box-shadow: inset 0 -3px 6px rgba(0, 0, 0, 0.18), inset 0 2px 4px rgba(255, 255, 255, 0.5), 0 4px 12px rgba(178, 140, 60, 0.35);
}

.upload-prompt p { font-size: 14px; color: var(--text-primary); }
.upload-sub { font-size: 12px; color: var(--text-secondary); margin-top: 4px !important; }

.upload-biz-select {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-top: 12px;
    font-size: 13px;
    color: var(--text-secondary);
}

.upload-biz-select select {
    flex: 1;
    background: linear-gradient(150deg, #ffffff, #f0f2f6);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    color: var(--text-primary);
    padding: 7px 10px;
    font-size: 13px;
    box-shadow: inset 0 1px 0 #fff;
}

.upload-list {
    margin-top: 12px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.upload-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 12px;
    background: linear-gradient(150deg, #ffffff 0%, #f5f6f9 100%);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-sm);
    box-shadow: inset 0 1px 0 #fff, 0 2px 8px rgba(28, 34, 45, 0.05);
}

.upload-thumb {
    width: 40px;
    height: 40px;
    border-radius: 8px;
    object-fit: cover;
    background: var(--metal-3);
    flex-shrink: 0;
}

.upload-file-icon {
    width: 40px;
    height: 40px;
    border-radius: 8px;
    background: linear-gradient(150deg, #f7f8fa, #e2e6ec);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    flex-shrink: 0;
}

.upload-info { flex: 1; min-width: 0; }

.upload-name {
    font-size: 13px;
    font-weight: 500;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.upload-meta {
    font-size: 11px;
    color: var(--text-muted);
    margin-top: 2px;
}

.upload-status {
    font-size: 11px;
    padding: 2px 8px;
    border-radius: 6px;
}

.upload-status.pending { background: rgba(207, 152, 57, 0.14); color: #b07c2c; }
.upload-status.analyzed { background: rgba(63, 157, 110, 0.14); color: var(--success); }

/* ============================
   投放数据监控面板
   ============================ */
.metrics-empty {
    padding: 18px;
    text-align: center;
    color: var(--text-secondary);
    font-size: 13px;
    background: rgba(255, 255, 255, 0.55);
    border: 1px dashed var(--border);
    border-radius: var(--radius-sm);
}
.metrics-summary {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
    margin-bottom: 4px;
}
.metric-card {
    background: linear-gradient(150deg, #ffffff, #f4f6f9);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-sm);
    padding: 12px;
    box-shadow: inset 0 1px 0 #fff;
    min-height: 92px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}
.metric-label { display: block; font-size: 12px; color: var(--text-secondary); margin-bottom: 4px; }
.metric-value { display: block; font-size: 20px; font-weight: 700; color: var(--text-primary); }
.metric-value.time { font-size: 17px; }
.metric-value.up { color: var(--danger); }
.metric-value.down { color: var(--success); }
.metric-delta { display: inline-block; margin-top: 2px; font-size: 12px; font-weight: 600; }
.metric-delta.up { color: var(--danger); }
.metric-delta.down { color: var(--success); }
.metric-delta.flat { color: var(--text-muted); font-weight: 400; }
.metrics-subtitle {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-primary);
    margin: 12px 0 8px;
    display: flex;
    align-items: center;
    gap: 6px;
}
.metrics-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.metrics-table th {
    text-align: left;
    font-size: 12px;
    font-weight: 600;
    color: var(--text-secondary);
    padding: 6px 8px;
    border-bottom: 1px solid var(--border);
}
.metrics-table td { padding: 7px 8px; border-bottom: 1px solid rgba(122, 132, 148, 0.10); }
.metrics-table tr:last-child td { border-bottom: none; }
.metrics-table .m-name { color: var(--text-primary); font-weight: 500; }
.metrics-table .m-roi { color: var(--text-secondary); text-align: right; }
.metrics-table .m-cost { color: var(--text-primary); text-align: right; }
.metrics-table th:nth-child(2) { text-align: right; }
.metrics-bars {
    display: flex;
    align-items: flex-end;
    gap: 6px;
    padding: 6px 0 0;
}
.metrics-bar-item { display: flex; flex-direction: column; align-items: center; flex: 1; min-width: 0; }
.metrics-bar {
    width: 100%;
    max-width: 34px;
    background: linear-gradient(180deg, #e8837a, #d65b5b);
    border-radius: 5px 5px 2px 2px;
    display: flex;
    align-items: flex-start;
    justify-content: center;
    min-height: 6px;
}
.metrics-bar span { font-size: 10px; color: #fff; padding-top: 2px; }
.metrics-bar-time { font-size: 10px; color: var(--text-muted); margin-top: 4px; }

/* ============================
   巨量投放监控面板
   ============================ */
.julang-summary { grid-template-columns: repeat(4, 1fr); }
.julang-chart { margin-top: 6px; }
.julang-table { margin-top: 4px; }
.julang-hist-head {
    cursor: pointer;
    user-select: none;
    transition: color .15s;
}
.julang-hist-head:hover { color: var(--gold-dark); }
.julang-hist-arrow {
    display: inline-block;
    font-size: 11px;
    color: var(--text-muted);
    margin-left: 4px;
    transition: transform .15s;
}
.julang-hist-arrow.open { transform: rotate(90deg); }
.julang-hist-body { display: none; }
.julang-hist-body.open { display: block; }
.metrics-import-hint {
    margin-top: 8px;
    font-size: 12px;
    color: var(--text-muted);
    line-height: 1.6;
}
.metrics-import-hint b { color: var(--gold-dark); font-weight: 600; }
.panel-actions { display: flex; gap: 8px; align-items: center; }

/* ============================
   一直想板块（思维区 / 工作流）
   ============================ */
/* ============================
   企划 · 时间线/内容线/目标线（思维导图式）
   ============================ */
.plan-list {
    /* 列宽变量：时间列/目标列固定宽，内容列自适应；hconn=列间距（内容卡之间的间距同此值） */
    --plan-time-w: 150px;
    --plan-goal-w: 170px;
    --plan-hconn: 18px;
    position: relative;
}
/* 跨卡片上下游箭头层：覆盖整张企划列表，画在卡片之上但不挡点击 */
.plan-cross-svg {
    position: absolute;
    left: 0; top: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
    overflow: visible;
    z-index: 4;
}
.plan-cols-head {
    display: grid;
    /* 三列轨道 + 列间距与下方 flex 布局逐像素对齐（gap 数一致） */
    grid-template-columns: var(--plan-time-w) 1fr var(--plan-goal-w);
    column-gap: var(--plan-hconn);
    padding: 0 15px 10px;
}
.plan-cols-head span {
    font-size: 12px;
    font-weight: 600;
    color: var(--text-secondary);
    text-align: center;
    padding: 4px 0;
    border-radius: 8px;
    background: rgba(122, 132, 148, 0.08);
}
.plan-cols-head .plan-head-hint {
    font-size: 10px;
    font-weight: 400;
    color: var(--text-muted);
    margin-left: 6px;
}
.plan-item {
    position: relative;
    background: linear-gradient(150deg, #ffffff 0%, #f6f8fa 100%);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-sm);
    padding: 12px 14px;
    box-shadow: inset 0 1px 0 #fff, 0 2px 8px rgba(28, 34, 45, 0.05);
}
.plan-del {
    position: absolute;
    top: 5px; right: 8px;
    z-index: 6;
    width: 24px; height: 24px;
    border: none;
    background: transparent;
    color: var(--text-muted);
    font-size: 16px;
    cursor: pointer;
    border-radius: 6px;
    line-height: 1;
}
.plan-del:hover { background: rgba(220, 80, 80, 0.12); color: #c05050; }
/* 「待解决」按钮：在编辑弹窗里，每条内容各一个（只标记这一条） */
.plan-node-pending {
    flex: 0 0 auto;
    height: 24px;
    padding: 0 9px;
    border: 1px solid rgba(200, 70, 70, 0.35);
    background: transparent;
    color: #c05050;
    font-size: 11px;
    line-height: 22px;
    border-radius: 999px;
    cursor: pointer;
    white-space: nowrap;
    box-sizing: border-box;
}
.plan-node-pending:hover { background: rgba(214, 69, 69, 0.12); }
.plan-node-pending.active {
    background: rgba(214, 69, 69, 0.92);
    border-color: rgba(214, 69, 69, 0.92);
    color: #fff;
    font-weight: 600;
}
/* 弹窗里被标记的那一行：整行淡红 */
.plan-node.pending {
    background: rgba(214, 69, 69, 0.06);
    border-color: rgba(214, 69, 69, 0.45);
}
/* 弹窗里对应的那一行内容：待办已完成 → 淡绿 */
.plan-node.st-done {
    background: rgba(63, 157, 110, 0.07);
    border-color: rgba(63, 157, 110, 0.4);
}
/* 列表里对应的那张内容卡变红（同卡片里的其它内容不受影响） */
.plan-card-content.pending {
    background: linear-gradient(150deg, #fff5f5 0%, #fbdcdc 100%);
    border-color: rgba(214, 69, 69, 0.42);
    color: #8d3535;
}
.plan-card-content.pending .plan-seq-badge {
    background: rgba(214, 69, 69, 0.16);
    border-color: rgba(214, 69, 69, 0.45);
    color: #a63c3c;
}
/* 这张内容卡对应的企划待办已完成 → 整张内容卡变绿（写在 pending 之后：已完成优先于待解决） */
.plan-card-content.st-done {
    background: linear-gradient(150deg, #f6fdf8 0%, #dcf2e6 100%);
    border-color: rgba(63, 157, 110, 0.46);
}
.plan-card-content.st-done .plan-card-text { color: #2c6b4c; }
.plan-card-content.st-done .plan-seq-badge {
    background: rgba(63, 157, 110, 0.16);
    border-color: rgba(63, 157, 110, 0.45);
    color: #2f7554;
}
/* 上移 / 下移整张卡片：卡片顺序决定上下游顺序 */
.plan-card-move {
    display: none;
    position: absolute;
    top: 5px;
    z-index: 6;
    width: 22px; height: 22px;
    border: none;
    background: transparent;
    color: var(--text-muted);
    font-size: 12px;
    cursor: pointer;
    border-radius: 6px;
    line-height: 1;
    padding: 0;
}
.plan-card-move.down { right: 32px; }
.plan-card-move.up { right: 58px; }
.plan-card-move:hover { background: rgba(122, 132, 148, 0.16); color: var(--text-secondary); }
/* 一行企划：时间卡 —横线→ 内容卡(并排) —横线→ 目标卡，垂直居中对齐保证连线在同一水平线上 */
.plan-grid {
    display: flex;
    align-items: center;
    gap: var(--plan-hconn);
}
.plan-card {
    border-radius: 10px;
    padding: 12px;
    font-size: 13px;
    line-height: 1.55;
    cursor: pointer;
    word-break: break-word;
    transition: transform .15s, box-shadow .15s;
    border: 1px solid transparent;
    box-sizing: border-box;
}
.plan-card:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(28, 34, 45, 0.08); }
.plan-card-time,
.plan-card-goal {
    flex: 0 0 var(--plan-time-w);
    width: var(--plan-time-w);
    align-self: center;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.plan-card-goal {
    flex-basis: var(--plan-goal-w);
    width: var(--plan-goal-w);
}
/* 时间线 / 目标线：纯文字，不画框 */
.plan-card-time {
    background: none;
    border-color: transparent;
    color: #3d5a80;
    font-weight: 600;
    padding: 6px 2px;
    text-align: center;
}
.plan-card-time:hover,
.plan-card-goal:hover { transform: none; box-shadow: none; }
.plan-card-content {
    background: linear-gradient(150deg, #fffdf6 0%, #f7f1e2 100%);
    border-color: rgba(194, 154, 75, 0.3);
    color: #6b5722;
}
.plan-card-goal {
    background: none;
    border-color: transparent;
    color: #5a4a8a;
    font-weight: 600;
    padding: 6px 2px;
    text-align: center;
}
/* 内容线：多条内容卡并排，随数量增多每张自动缩小 */
.plan-content-wrap {
    flex: 1 1 0;
    min-width: 0;
    display: flex;
    align-items: stretch;
    gap: var(--plan-hconn);
    position: relative;
}
.plan-card-content {
    flex: 1 1 0;
    min-width: 0;
    display: flex;
    flex-direction: column;
    align-items: center;   /* 内容线文字居中 */
    min-height: 58px;
    position: relative;
}
/* 内容卡序号：卡片内第一行，所有端都显示（顺序即序号，序号相邻即上下游） */
.plan-seq-badge {
    align-self: center;
    width: 15px;
    height: 15px;
    box-sizing: border-box;
    border-radius: 50%;
    background: rgba(194, 154, 75, 0.22);
    border: 1px solid rgba(194, 154, 75, 0.45);
    color: #8a6d2f;
    font-size: 10px;
    font-weight: 700;
    line-height: 13px;
    text-align: center;
    margin-bottom: 3px;
    flex-shrink: 0;
    pointer-events: none;
}
.plan-card-content .plan-card-text {
    flex: 1 1 auto;
    min-height: 0;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    width: 100%;
    text-align: center;    /* 内容线文字居中 */
}
/* 内容卡定长折叠：溢出时显示展开/收起 */
.plan-card-content.expanded .plan-card-text { display: block; -webkit-line-clamp: unset; overflow: visible; }
.plan-fold {
    display: none;
    border: none;
    background: rgba(194, 154, 75, 0.14);
    color: #8a6d2f;
    font-size: 11px;
    padding: 1px 8px;
    border-radius: 6px;
    cursor: pointer;
    align-self: center;
    margin-top: 3px;
    flex-shrink: 0;
    line-height: 1.5;
}
.plan-card-content.has-more .plan-fold { display: inline-block; }
/* 企划与企划之间的纵向引导线：时间/内容/目标三列各一条，带向下箭头
   左右内边距与 .plan-item 的 padding+border 一致（14+1=15px），保证三列严格对齐
   z-index 高于企划卡，避免引导线与箭头被卡片背景遮住 */
.plan-connector {
    display: grid;
    grid-template-columns: var(--plan-time-w) 1fr var(--plan-goal-w);
    column-gap: var(--plan-hconn);
    height: 34px;
    padding: 0 15px;
    box-sizing: border-box;
    position: relative;
    z-index: 3;
}
.pc-cell { position: relative; }
.pc-spine {
    position: absolute;
    left: 50%; top: -6px; bottom: 10px;
    width: 2px;
    transform: translateX(-50%);
    background: linear-gradient(180deg, #d3bd8d, #b09455);
    border-radius: 2px;
}
.pc-spine::after {
    content: '';
    position: absolute;
    left: 50%; bottom: -9px;
    transform: translateX(-50%);
    border-top: 7px solid #b09455;
    border-left: 4px solid transparent;
    border-right: 4px solid transparent;
}
/* 企划弹窗 · 内容线多行 */
.plan-content-row {
    display: flex;
    gap: 6px;
    margin-bottom: 8px;
    align-items: center;
}
.plan-content-row .plan-content-input { flex: 1; }
/* 序号圆形徽标：顺序即序号，序号相邻即上下游 */
.plan-seq {
    flex: 0 0 20px;
    height: 20px;
    border-radius: 50%;
    background: rgba(194, 154, 75, 0.16);
    border: 1px solid rgba(194, 154, 75, 0.4);
    color: #8a6d2f;
    font-size: 11px;
    font-weight: 600;
    line-height: 18px;
    text-align: center;
    flex-shrink: 0;
}
/* 上移 / 下移：挪动序号即调整上下游对应关系 */
/* 弹窗内容行的上移/下移（功能保留，按钮不展示） */
.plan-move {
    display: none;
    width: 22px; height: 26px;
    border: none;
    background: rgba(122, 132, 148, 0.12);
    color: var(--text-secondary);
    border-radius: 6px;
    cursor: pointer;
    font-size: 12px;
    flex-shrink: 0;
    line-height: 1;
    padding: 0;
}
.plan-move:hover:not(:disabled) { background: rgba(122, 132, 148, 0.24); }
.plan-move:disabled { opacity: .3; cursor: default; }
.plan-row-del {
    width: 26px; height: 26px;
    border: none;
    background: rgba(122, 132, 148, 0.12);
    color: var(--text-secondary);
    border-radius: 6px;
    cursor: pointer;
    font-size: 14px;
    flex-shrink: 0;
    line-height: 1;
}
.plan-row-del:hover { background: rgba(220, 80, 80, 0.14); color: #c05050; }
.plan-add-row { margin-top: 2px; }
/* 企划弹窗 · 每条内容块（内容 + 上游/下游对应关系） */
.plan-node {
    border: 1px solid var(--border-light);
    border-radius: 10px;
    padding: 8px 10px 6px;
    margin-bottom: 10px;
    background: rgba(246, 248, 250, 0.75);
}
.plan-node .plan-content-row { margin-bottom: 2px; }
.plan-rel-row {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    margin-top: 6px;
}
.plan-rel-label {
    flex: 0 0 30px;
    font-size: 11px;
    color: var(--text-muted);
    line-height: 24px;
}
.plan-rel-chips {
    flex: 1;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    min-width: 0;
}
/* 上游 / 下游：勾选对象 = 上一张 / 下一张卡片里的内容，可点选一个或多个 */
.plan-rel-src {
    font-size: 10px;
    color: var(--text-muted);
    line-height: 22px;
    white-space: nowrap;
}
.plan-chip {
    border: 1px solid var(--border-light);
    background: #fff;
    color: var(--text-secondary);
    font-size: 11px;
    line-height: 1.7;
    padding: 0 9px;
    border-radius: 999px;
    cursor: pointer;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    transition: all .15s;
}
.plan-chip:hover { border-color: rgba(194, 154, 75, 0.5); }
.plan-chip.active {
    background: rgba(194, 154, 75, 0.16);
    border-color: rgba(194, 154, 75, 0.55);
    color: #8a6d2f;
    font-weight: 600;
}
.plan-chip.active::before { content: '✓ '; font-size: 10px; }
.plan-rel-none { color: var(--text-muted); font-size: 11px; line-height: 22px; }

.think-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.think-empty {
    padding: 18px;
    text-align: center;
    color: var(--text-muted);
    font-size: 13px;
    background: rgba(255, 255, 255, 0.55);
    border: 1px dashed var(--border);
    border-radius: var(--radius-sm);
}

/* ============================
   动力源（图片卡片墙）
   ============================ */
.power-card {
    background: linear-gradient(150deg, #ffffff 0%, #f7f8fb 100%);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-sm);
    padding: 10px;
    margin-bottom: 14px;
    box-shadow: inset 0 1px 0 #fff, 0 2px 8px rgba(28, 34, 45, 0.06);
}
.power-card-head {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 8px;
}
.power-card-name {
    font-weight: 600;
    font-size: 14px;
    color: var(--text-primary);
    flex: 1;
}
.power-card-time {
    font-size: 11px;
    color: var(--text-muted);
}
.power-card-imgs {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.power-img-wrap {
    position: relative;
    width: 100%;
    overflow: hidden;
    border-radius: 8px;
    background: #eef1f5;
    line-height: 0;
}
/* 图片满铺卡片宽度，高度随图片原始比例（清晰不裁切） */
.power-img-wrap img {
    display: block;
    width: 100%;
    height: auto;
    object-fit: contain;
}
.power-card-add {
    margin-top: 8px;
    padding: 8px;
    text-align: center;
    font-size: 13px;
    color: var(--gold-dark);
    background: rgba(194, 154, 75, 0.08);
    border: 1px dashed #d9c08a;
    border-radius: 8px;
    cursor: pointer;
    transition: all 0.2s;
}
.power-card-add:hover {
    background: rgba(194, 154, 75, 0.16);
}

/* 工作流卡片 */
.think-card {
    background: linear-gradient(150deg, #ffffff 0%, #f4f6f8 100%);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-sm);
    padding: 12px;
    box-shadow: inset 0 1px 0 #fff, 0 2px 8px rgba(28, 34, 45, 0.05);
}
.think-card-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 10px;
}
.think-card-name {
    font-size: 14px;
    font-weight: 600;
    color: var(--text-primary);
    cursor: pointer;
    padding: 2px 6px;
    border-radius: 6px;
    transition: background .15s, color .15s;
}
.think-card-name:hover { background: rgba(194, 154, 75, 0.12); color: var(--gold-dark); }
.think-card-del {
    width: 24px; height: 24px;
    border: none;
    border-radius: 50%;
    background: transparent;
    color: var(--text-muted);
    font-size: 15px;
    line-height: 1;
    cursor: pointer;
    transition: background .15s, color .15s;
}
.think-card-del:hover { background: rgba(214, 91, 91, 0.14); color: var(--danger); }
.think-card-imgs {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 10px;
}
.think-img-wrap {
    position: relative;
    width: 96px;
    height: 64px;
    border-radius: 8px;
    overflow: hidden;
    border: 1px solid var(--border-light);
    background: #fff;
}
.think-img-wrap img { width: 100%; height: 100%; object-fit: cover; display: block; }
.think-img-del {
    position: absolute;
    top: 2px; right: 2px;
    width: 18px; height: 18px;
    border: none;
    border-radius: 50%;
    background: rgba(28, 34, 45, 0.55);
    color: #fff;
    font-size: 11px;
    line-height: 1;
    cursor: pointer;
}
.think-img-del:hover { background: rgba(214, 91, 91, 0.85); }
.think-img-add {
    width: 96px;
    height: 64px;
    border: 1px dashed var(--border);
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 22px;
    color: var(--text-muted);
    cursor: pointer;
    transition: border-color .15s, color .15s, background .15s;
}
.think-img-add:hover { border-color: var(--gold); color: var(--gold-dark); background: rgba(194, 154, 75, 0.06); }
.think-card-note {
    width: 100%;
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 8px 10px;
    font-size: 13px;
    font-family: inherit;
    color: var(--text-primary);
    background: rgba(255, 255, 255, 0.7);
    resize: vertical;
    min-height: 54px;
}
.think-card-note:focus { outline: none; border-color: var(--gold); }

/* ============================
   思维区（头脑风暴）
   ============================ */
.zone-card { display: flex; flex-direction: column; gap: 10px; }
.zone-created {
    font-size: 11px;
    color: var(--text-muted);
    margin-left: auto;
    margin-right: 8px;
    white-space: nowrap;
}
.zone-row { margin-bottom: 0; }
.zone-row label { min-width: 34px; }
.zone-input {
    flex: 1;
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 7px 10px;
    font-size: 13px;
    font-family: inherit;
    background: rgba(255, 255, 255, 0.7);
    color: var(--text-primary);
}
.zone-input:focus { outline: none; border-color: var(--gold); }
.zone-time-row {
    display: flex;
    gap: 12px;
    font-size: 12px;
    color: var(--text-secondary);
}
.zone-time-row label { display: flex; align-items: center; gap: 6px; }
.zone-time-row input[type="date"] {
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 5px 8px;
    font-size: 12px;
    font-family: inherit;
    background: rgba(255, 255, 255, 0.7);
    color: var(--text-primary);
}
.zone-mindmap {
    border: 1px dashed var(--border);
    border-radius: 10px;
    padding: 8px;
    background: rgba(255, 255, 255, 0.5);
}
.zone-mmap-toolbar {
    display: flex;
    gap: 8px;
    margin-bottom: 6px;
}
.mm-hint {
    font-size: 11px;
    color: var(--text-muted);
    margin-bottom: 6px;
}
.mm-svg {
    width: 100%;
    height: auto;
    background: #fbfcfe;
    border-radius: 8px;
    display: block;
    touch-action: none;
    cursor: grab;
}
.mm-thumb { min-height: 120px; }

/* 思维导图全屏画板 */
.mm-board-overlay {
    position: fixed;
    top: 0; left: 0; right: 0; bottom: 0;
    background: linear-gradient(180deg, #e8ebf0 0%, #dde1e7 100%);
    z-index: 1000;
    display: flex;
    flex-direction: column;
}
.mm-board-top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 10px 12px;
    background: rgba(255, 255, 255, 0.85);
    border-bottom: 1px solid var(--border);
    flex-wrap: wrap;
}
.mm-board-title {
    font-size: 14px;
    font-weight: 600;
    color: var(--text-primary);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    max-width: 40vw;
}
.mm-board-tools {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
}
.mm-board-tools .btn-small { padding: 4px 10px; font-size: 12px; }
.mm-board-tools .mm-mode-btn.mm-active {
    background: linear-gradient(135deg, #e5b76c, #cf9839) !important;
    color: #fff !important;
    box-shadow: 0 2px 6px rgba(207, 152, 57, 0.4);
}
.board-close { background: linear-gradient(135deg, #e8837a, #d65b5b) !important; color: #fff !important; }
.board-close:hover { background: linear-gradient(135deg, #d65b5b, #b84545) !important; }
.mm-board-body {
    flex: 1;
    position: relative;
    overflow: hidden;
}
.mm-board-hint {
    position: absolute;
    top: 8px; left: 50%;
    transform: translateX(-50%);
    font-size: 11px;
    color: var(--text-muted);
    background: rgba(255, 255, 255, 0.8);
    padding: 4px 10px;
    border-radius: 12px;
    z-index: 5;
    white-space: nowrap;
    max-width: 92vw;
    overflow: hidden;
    text-overflow: ellipsis;
}
.mm-board-svg {
    width: 100%;
    height: 100%;
    display: block;
    background: #fbfcfe;
    touch-action: none;
    cursor: grab;
}
@media (max-width: 600px) {
    .julang-summary { grid-template-columns: repeat(2, 1fr); }
}

/* ============================
   个人资料库表单
   ============================ */
.profile-form { display: flex; flex-direction: column; gap: 20px; }

.profile-section {
    background: linear-gradient(150deg, #ffffff 0%, #f4f6f8 100%);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-sm);
    padding: 14px;
    box-shadow: inset 0 1px 0 #fff, 0 2px 8px rgba(28, 34, 45, 0.05);
}

.profile-section h3 {
    font-size: 14px;
    font-weight: 600;
    margin-bottom: 12px;
    color: var(--text-primary);
    display: flex;
    align-items: center;
    gap: 6px;
}

.profile-section h3::before {
    content: '';
    width: 4px;
    height: 14px;
    border-radius: 2px;
    background: linear-gradient(180deg, #e9cf8a, #c29a4b);
}

.form-row {
    margin-bottom: 12px;
}

.form-row:last-child { margin-bottom: 0; }

.form-row label {
    display: block;
    font-size: 12px;
    color: var(--text-secondary);
    margin-bottom: 4px;
}

.form-row input,
.form-row textarea,
.form-row select {
    width: 100%;
    background: linear-gradient(150deg, #ffffff, #f0f2f6);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    color: var(--text-primary);
    padding: 9px 12px;
    font-size: 13px;
    font-family: inherit;
    transition: border-color 0.2s;
    box-shadow: inset 0 1px 0 #fff;
}

.form-row input:focus,
.form-row textarea:focus,
.form-row select:focus {
    outline: none;
    border-color: var(--gold);
    box-shadow: 0 0 0 3px rgba(194, 154, 75, 0.16);
}

.form-row textarea { resize: vertical; }

/* 日期选择按钮组 */
.date-options, .priority-options {
    display: flex;
    gap: 8px;
    align-items: center;
}

.date-btn, .priority-btn {
    padding: 7px 16px;
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    background: linear-gradient(150deg, #ffffff, #eef0f4);
    color: var(--text-secondary);
    font-size: 13px;
    cursor: pointer;
    transition: all 0.2s;
    box-shadow: inset 0 1px 0 #fff;
}

.date-btn:hover, .priority-btn:hover {
    border-color: var(--gold);
    color: var(--text-primary);
}

.date-btn.active, .priority-btn.active {
    background: linear-gradient(135deg, #e9cf8a, #c29a4b 55%, #a67f30);
    border-color: #b08a3e;
    color: #fff;
    box-shadow: 0 2px 8px rgba(178, 140, 60, 0.35);
}

#task-date-custom {
    flex: 1;
    max-width: 160px;
    padding: 7px 10px;
    background: linear-gradient(150deg, #ffffff, #f0f2f6);
    border: 1px solid var(--border);
    border-radius: var(--radius-sm);
    color: var(--text-primary);
    font-size: 13px;
}

.priority-btn[data-priority="high"].active { background: linear-gradient(135deg, #e88f7d, #d65b5b); border-color: #c04a4a; }
.priority-btn[data-priority="medium"].active { background: linear-gradient(135deg, #e5b76c, #cf9839); border-color: #b07c2c; }
.priority-btn[data-priority="low"].active { background: linear-gradient(135deg, #b9c0ca, #8d95a1); border-color: #7c8490; }

/* ============================
   按钮 · 金色液态金属
   ============================ */
.btn-small {
    background: linear-gradient(135deg, #e9cf8a 0%, #c9a24e 50%, #a67f30 100%);
    background-size: 200% 100%;
    color: #fff;
    border: none;
    border-radius: 10px;
    padding: 6px 14px;
    font-size: 12px;
    cursor: pointer;
    transition: all 0.25s;
    font-weight: 600;
    box-shadow: 0 3px 8px rgba(178, 140, 60, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.4);
}

.btn-small:hover {
    background-position: 100% 0;
    box-shadow: 0 4px 12px rgba(178, 140, 60, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.4);
}

/* ============================
   云端同步
   ============================ */
.cloud-status {
    font-size: 11px;
    padding: 3px 10px;
    border-radius: 20px;
    font-weight: 600;
}
.cloud-status.on { background: rgba(63, 157, 110, 0.15); color: #2f8a5e; }
.cloud-status.off { background: rgba(207, 152, 57, 0.15); color: #b07c2c; }
.cloud-tip {
    font-size: 12px;
    color: var(--text-secondary);
    margin: 0 0 12px;
    line-height: 1.6;
}
.cloud-actions {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    margin-top: 12px;
}
.cloud-msg {
    margin-top: 10px;
    font-size: 12px;
    line-height: 1.5;
    color: var(--text-secondary);
}
.cloud-msg.ok { color: #2f8a5e; }
.cloud-msg.err { color: #c04a4a; }
/* 同步状态（v5.48）：上次成功时间 / 失败原因，让"没同步上去"一眼可见 */
.cloud-state {
    margin-top: 8px;
    font-size: 12px;
    line-height: 1.7;
    color: var(--text-secondary);
}
.cloud-state .sync-ok { color: #2f8a5e; }
.cloud-state .sync-bad { color: #c04a4a; font-weight: 600; }
.cloud-ver {
    margin-top: 8px;
    font-size: 11px;
    color: var(--text-secondary);
    opacity: 0.7;
}

/* 开关 */
.switch {
    position: relative;
    display: inline-block;
    width: 46px;
    height: 26px;
    flex-shrink: 0;
}
.switch input { opacity: 0; width: 0; height: 0; }
.switch .slider {
    position: absolute;
    cursor: pointer;
    inset: 0;
    background: linear-gradient(150deg, #e3e7ec, #d4d9e0);
    border-radius: 26px;
    transition: 0.3s;
    box-shadow: inset 0 2px 4px rgba(28, 34, 45, 0.12);
}
.switch .slider::before {
    content: '';
    position: absolute;
    height: 20px;
    width: 20px;
    left: 3px;
    top: 3px;
    background: linear-gradient(150deg, #ffffff, #e8ebf0);
    border-radius: 50%;
    transition: 0.3s;
    box-shadow: 0 1px 3px rgba(28, 34, 45, 0.25);
}
.switch input:checked + .slider {
    background: linear-gradient(135deg, #e9cf8a, #c29a4b 60%, #a67f30);
    box-shadow: inset 0 2px 4px rgba(120, 88, 25, 0.25);
}
.switch input:checked + .slider::before { transform: translateX(20px); }

.btn-outline {
    background: linear-gradient(150deg, #ffffff, #eef0f4);
    border: 1px solid var(--border);
    color: var(--text-primary);
    border-radius: var(--radius-sm);
    padding: 8px 16px;
    font-size: 13px;
    cursor: pointer;
    transition: all 0.2s;
    box-shadow: inset 0 1px 0 #fff;
}

.btn-outline:hover { border-color: var(--gold); color: #a67f30; }
.btn-danger:hover { border-color: var(--danger); color: #c04a4a; }

.btn-cancel, .btn-confirm {
    flex: 1;
    padding: 11px;
    border: none;
    border-radius: 12px;
    font-size: 14px;
    cursor: pointer;
    transition: all 0.2s;
    font-weight: 600;
}

.btn-cancel {
    background: linear-gradient(150deg, #ffffff, #e7eaef);
    color: var(--text-secondary);
    box-shadow: inset 0 1px 0 #fff, 0 2px 6px rgba(28, 34, 45, 0.06);
}

.btn-confirm {
    background: linear-gradient(135deg, #e9cf8a 0%, #c9a24e 50%, #a67f30 100%);
    color: #fff;
    box-shadow: 0 3px 10px rgba(178, 140, 60, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.4);
}

.btn-confirm:hover { filter: brightness(1.05); }

.data-mgmt-row {
    display: flex;
    gap: 10px;
}

/* ============================
   弹窗
   ============================ */
.modal-overlay {
    position: fixed;
    inset: 0;
    background: rgba(40, 46, 56, 0.4);
    backdrop-filter: blur(6px);
    display: none;
    align-items: flex-end;
    justify-content: center;
    z-index: 200;
    animation: fadeIn 0.2s ease;
}

.modal-overlay.active { display: flex; }

.modal {
    background: linear-gradient(165deg, #ffffff 0%, #f2f4f7 70%, #e7eaef 100%);
    border: 1px solid var(--border-light);
    border-radius: 20px 20px 0 0;
    width: 100%;
    max-width: 500px;
    max-height: 85vh;
    overflow-y: auto;
    animation: slideUp 0.3s ease;
    box-shadow: inset 0 1px 0 #fff, 0 -8px 30px rgba(28, 34, 45, 0.12);
}

@keyframes slideUp {
    from { transform: translateY(100%); }
    to { transform: translateY(0); }
}

.modal-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 20px;
    border-bottom: 1px solid var(--border);
    position: sticky;
    top: 0;
    background: linear-gradient(165deg, #ffffff 0%, #f2f4f7 80%);
    z-index: 1;
    backdrop-filter: blur(8px);
}

.modal-header h3 { font-size: 16px; font-weight: 600; }

.modal-close {
    background: linear-gradient(150deg, #ffffff, #e7eaef);
    border: 1px solid var(--border);
    color: var(--text-secondary);
    font-size: 22px;
    cursor: pointer;
    line-height: 1;
    padding: 0;
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    transition: all 0.2s;
    box-shadow: inset 0 1px 0 #fff;
}

.modal-close:hover { background: linear-gradient(150deg, #fdf6e8, #f0e4c8); color: #a67f30; }

.modal-body { padding: 20px; }

.modal-footer {
    display: flex;
    gap: 10px;
    padding: 16px 20px;
    border-top: 1px solid var(--border);
    position: sticky;
    bottom: 0;
    background: linear-gradient(180deg, rgba(242, 244, 247, 0.92), #e9ecf1);
    backdrop-filter: blur(8px);
}

/* ============================
   Toast
   ============================ */
.toast {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%) scale(0.92);
    opacity: 0;
    background: linear-gradient(150deg, #ffffff 0%, #eceff3 100%);
    border: 1px solid var(--border-light);
    color: var(--text-primary);
    padding: 12px 16px;
    border-radius: 14px;
    font-size: 13px;
    font-weight: 500;
    z-index: 300;
    transition: transform 0.25s ease, opacity 0.25s ease;
    pointer-events: auto;
    box-shadow: inset 0 1px 0 #fff, 0 8px 26px rgba(28, 34, 45, 0.18);
    display: flex;
    align-items: center;
    gap: 10px;
    max-width: 82vw;
}

.toast.show {
    transform: translate(-50%, -50%) scale(1);
    opacity: 1;
}

#toast-text {
    flex: 1;
    min-width: 0;
    word-break: break-word;
}

.toast-close {
    flex-shrink: 0;
    background: none;
    border: none;
    color: var(--text-muted);
    font-size: 17px;
    line-height: 1;
    cursor: pointer;
    padding: 3px 6px;
    border-radius: 6px;
    transition: all 0.2s;
}
.toast-close:hover { color: var(--danger); background: rgba(214, 91, 91, 0.1); }

/* ============================
   底部导航（移动端）· 液态金属放大版
   ============================ */
.bottom-nav {
    display: none;
    position: fixed;
    bottom: 0; left: 0; right: 0;
    height: calc(var(--bottom-nav-h) + env(safe-area-inset-bottom));
    padding-bottom: env(safe-area-inset-bottom);
    background: linear-gradient(180deg, #fbfcfd 0%, #eef0f4 55%, #e3e6ec 100%);
    border-top: 1px solid var(--border-light);
    box-shadow: 0 -1px 0 rgba(255, 255, 255, 0.8), 0 -8px 24px rgba(28, 34, 45, 0.07);
    z-index: 100;
}

.bottom-nav .nav-item {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    color: var(--text-muted);
    transition: color 0.25s;
    position: relative;
}

/* 激活项：金色液态胶囊 + 流光 */
.bottom-nav .nav-item.active {
    color: #fff;
}

.bottom-nav .nav-item.active .nav-label {
    background: linear-gradient(120deg, #ecd490, #c9a252 40%, #a98131 70%, #c9a252, #ecd490);
    background-size: 260% 100%;
    animation: liquidFlow 7s ease-in-out infinite;
    color: #fff;
    padding: 8px 15px;
    border-radius: 22px;
    box-shadow: 0 4px 14px rgba(178, 140, 60, 0.38), inset 0 1px 0 rgba(255, 255, 255, 0.45);
    text-shadow: 0 1px 2px rgba(120, 88, 25, 0.4);
}

.bottom-nav .nav-label {
    font-size: 15px;
    font-weight: 600;
    padding: 8px 12px;
    border-radius: 22px;
    transition: all 0.25s;
    letter-spacing: 0.3px;
}

.bottom-nav .nav-item:not(.active) .nav-label {
    color: var(--text-secondary);
}

/* ============================
   响应式
   ============================ */
@media (max-width: 768px) {
    .sidebar { display: none; }
    .bottom-nav { display: flex; }
    .content {
        margin-left: 0;
        padding: 16px 14px calc(var(--bottom-nav-h) + env(safe-area-inset-bottom) + 20px);
    }

    .stat-row { grid-template-columns: repeat(4, 1fr); gap: 6px; margin-bottom: 14px; }
    .stat-card { padding: 10px 4px; border-radius: 12px; }
    .stat-num { font-size: 21px; }
    .stat-label { font-size: 10px; margin-top: 2px; white-space: nowrap; }

    /* 手机端同样横向并排：极致收紧时间/目标列与内边距，把宽度让给内容列
       （connector/列头的左右内边距 = item padding 6 + border 1 = 7，保证三列对齐） */
    .plan-list { --plan-time-w: 50px; --plan-goal-w: 54px; --plan-hconn: 3px; }
    .plan-cols-head { padding: 0 7px 8px; }
    .plan-connector { padding: 0 7px; height: 26px; }
    .plan-cols-head span { font-size: 9.5px; padding: 3px 0; }
    .plan-cols-head .plan-head-hint { display: none; }
    /* 企划卡片右上角的 × 独占顶部一行，避免压住目标线文字 */
    .plan-item { padding: 22px 6px 9px; }
    .plan-del { top: 2px; right: 3px; width: 22px; height: 20px; font-size: 15px; }
    /* 弹窗内容行的「待解决」按钮小一号 */
    .plan-node-pending { height: 22px; padding: 0 6px; font-size: 10px; line-height: 20px; }
    .plan-card { padding: 6px 3px; font-size: 10px; line-height: 1.4; }
    /* 时间/目标列窄，允许多显示几行，避免长文本被截断看不全 */
    .plan-card-time,
    .plan-card-goal { -webkit-line-clamp: 5; }
    .plan-card-content { min-height: 42px; }
    .plan-seq-badge { width: 12px; height: 12px; line-height: 10px; font-size: 8px; margin-bottom: 2px; }
    .plan-rel-label { flex-basis: 26px; font-size: 10px; }
    .plan-rel-src { font-size: 9px; }
    .plan-chip { font-size: 10px; padding: 0 7px; }
    .plan-fold { font-size: 9px; padding: 0 3px; margin-top: 2px; }

    .biz-overview { grid-template-columns: repeat(3, 1fr); gap: 8px; }
    .biz-overview-item { padding: 10px 6px; }
    .biz-overview-item .value { font-size: 15px; }

    .biz-status-row { grid-template-columns: 1fr; }

    .page-header h1 { font-size: 20px; }
    .panel { padding: 12px; }

    .modal { border-radius: 20px 20px 0 0; }
}

@media (min-width: 769px) and (max-width: 1024px) {
    .content { padding: 20px 20px 20px; }
    .biz-status-row { grid-template-columns: repeat(3, 1fr); }
}


/* ================= 企划 → 待办（v5.30 新增） ================= */
/* 弹窗内容行「生成待办」按钮（在「待解决」右边） */
.plan-node-todo {
    flex: 0 0 auto;
    height: 24px;
    padding: 0 10px;
    border: 1px solid rgba(194, 154, 75, 0.45);
    background: rgba(194, 154, 75, 0.1);
    color: #8a6d2f;
    font-size: 11px;
    line-height: 22px;
    border-radius: 999px;
    cursor: pointer;
    white-space: nowrap;
    box-sizing: border-box;
    font-weight: 600;
    transition: all 0.18s;
}
.plan-node-todo:hover { background: rgba(194, 154, 75, 0.24); }
.plan-node-todo:disabled { opacity: 0.55; cursor: default; }

/* 生成结果容器：展开在该条内容下方 */
.plan-todo-box { margin: 8px 0 2px; }
.plan-todo-loading {
    font-size: 11.5px;
    color: var(--text-muted);
    padding: 8px 10px;
    border: 1px dashed rgba(194, 154, 75, 0.35);
    border-radius: 10px;
    background: rgba(194, 154, 75, 0.05);
}
.plan-todo-card {
    border: 1px solid rgba(194, 154, 75, 0.35);
    border-radius: 12px;
    background: linear-gradient(150deg, #fffdf7 0%, #f7f2e4 100%);
    padding: 10px;
    box-shadow: inset 0 1px 0 #fff, 0 2px 10px rgba(150, 120, 60, 0.08);
}
.plan-todo-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.plan-todo-badge {
    font-size: 10.5px;
    font-weight: 700;
    color: #7c8794;
    background: rgba(122, 132, 148, 0.12);
    border-radius: 999px;
    padding: 1px 8px;
}
.plan-todo-badge.ai { color: #fff; background: linear-gradient(135deg, #b79ae8, #8a6ee0); }
.plan-todo-src { font-size: 11px; color: var(--text-muted); }
/* 字段排布：标题独占一行，分类 + 日期在下一行 */
.plan-todo-fields { display: grid; grid-template-columns: 1fr 152px; gap: 6px; margin-bottom: 6px; }
.plan-todo-title { grid-column: 1 / -1; }
.plan-todo-biz,
.plan-todo-date { width: 100%; min-width: 0; }
.plan-todo-title,
.plan-todo-biz,
.plan-todo-date,
.plan-todo-note {
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 6px 8px;
    font-size: 12px;
    color: var(--text-primary);
    background: #fff;
    font-family: inherit;
    box-sizing: border-box;
}
.plan-todo-note { width: 100%; resize: vertical; line-height: 1.6; margin-bottom: 6px; }
.plan-todo-subs { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; }
.plan-todo-sub {
    font-size: 11px;
    color: #7a6326;
    background: rgba(194, 154, 75, 0.14);
    border: 1px solid rgba(194, 154, 75, 0.3);
    border-radius: 999px;
    padding: 2px 9px;
}
.plan-todo-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.plan-todo-save { padding: 5px 12px; }
.plan-todo-drop {
    background: transparent;
    color: var(--text-secondary);
    border: 1px solid var(--border);
    border-radius: 10px;
    padding: 5px 12px;
    font-size: 12px;
    cursor: pointer;
}
.plan-todo-tip { font-size: 11px; color: var(--text-muted); }
.plan-todo-done {
    font-size: 12px;
    color: #35755a;
    background: rgba(63, 157, 110, 0.08);
    border: 1px solid rgba(63, 157, 110, 0.28);
    border-radius: 10px;
    padding: 8px 10px;
}
.plan-todo-done-tip { color: var(--text-muted); font-size: 11px; }

/* 内容卡上的待办状态角标：在企划列表里直接看到任务是否完成（v5.31） */
.plan-todo-pill {
    flex-shrink: 0;
    margin-top: 3px;
    padding: 0 6px;
    border-radius: 999px;
    border: 1px solid transparent;
    font-size: 9.5px;
    line-height: 1.7;
    font-weight: 600;
    white-space: nowrap;
    pointer-events: none;
}
.plan-todo-pill.todo { color: #8a6d2f; background: rgba(194, 154, 75, 0.16); border-color: rgba(194, 154, 75, 0.34); }
.plan-todo-pill.doing { color: #2f5f8a; background: rgba(90, 140, 200, 0.14); border-color: rgba(90, 140, 200, 0.34); }
.plan-todo-pill.done { color: #35755a; background: rgba(63, 157, 110, 0.14); border-color: rgba(63, 157, 110, 0.34); }
.plan-todo-pill.gone { color: #9a6a6a; background: rgba(214, 69, 69, 0.1); border-color: rgba(214, 69, 69, 0.28); }

/* 企划卡片底部：这张企划的待办进度 */
.plan-todo-stat {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    margin-top: 8px;
    padding-top: 7px;
    border-top: 1px dashed var(--border-light);
    font-size: 11px;
}
.pts-label { font-weight: 600; color: var(--text-secondary); }
.plan-todo-stat.all-done .pts-label { color: #2f7554; }
.pts-item {
    padding: 1px 8px;
    border-radius: 999px;
    background: rgba(122, 132, 148, 0.1);
    color: var(--text-secondary);
}
.pts-item.done { background: rgba(63, 157, 110, 0.12); color: #35755a; font-weight: 600; }
.pts-item.doing { background: rgba(90, 140, 200, 0.12); color: #2f5f8a; }
.pts-item.gone { background: rgba(214, 69, 69, 0.1); color: #9a6a6a; }

/* 已保存方案的完整查看（弹窗内） */
.plan-todo-card.saved.done {
    border-color: rgba(63, 157, 110, 0.4);
    background: linear-gradient(150deg, #f8fdf9 0%, #eaf7ef 100%);
}
.plan-todo-state {
    font-size: 10.5px;
    font-weight: 700;
    padding: 1px 8px;
    border-radius: 999px;
}
.plan-todo-state.todo { color: #8a6d2f; background: rgba(194, 154, 75, 0.16); }
.plan-todo-state.doing { color: #2f5f8a; background: rgba(90, 140, 200, 0.14); }
.plan-todo-state.done { color: #35755a; background: rgba(63, 157, 110, 0.16); }
.plan-todo-state.gone { color: #9a6a6a; background: rgba(214, 69, 69, 0.1); }
.plan-todo-toggle {
    margin-left: auto;
    border: 1px solid var(--border);
    background: #fff;
    color: var(--text-secondary);
    font-size: 11px;
    padding: 2px 9px;
    border-radius: 999px;
    cursor: pointer;
}
.plan-todo-toggle:hover { border-color: rgba(194, 154, 75, 0.5); color: #8a6d2f; }
.plan-todo-full { display: flex; flex-direction: column; gap: 4px; margin: 2px 0 8px; }
.plan-todo-line { display: flex; align-items: flex-start; gap: 8px; font-size: 12px; line-height: 1.7; }
.ptl-k { flex: 0 0 44px; color: var(--text-muted); font-size: 11px; }
.ptl-v { flex: 1; min-width: 0; color: var(--text-primary); word-break: break-word; }
.ptl-v.strong { font-weight: 600; }
.plan-todo-full .plan-todo-subs { display: inline-flex; flex-wrap: wrap; gap: 6px; margin: 0; }
.pts-sub {
    font-size: 11px;
    padding: 1px 8px;
    border-radius: 999px;
    background: rgba(122, 132, 148, 0.1);
    color: var(--text-secondary);
}
.pts-sub.on { background: rgba(63, 157, 110, 0.14); color: #35755a; }
.plan-todo-edit,
.plan-todo-regen,
.plan-todo-remove { padding: 4px 10px; font-size: 11.5px; }
.plan-todo-remove { color: #c05050; border-color: rgba(200, 70, 70, 0.35); background: transparent; }

/* 一直想页面下方：企划待办区 */
.plan-todo-list { display: flex; flex-direction: column; gap: 8px; }
.pt-item {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    background: linear-gradient(150deg, #ffffff 0%, #f4f6f9 100%);
    border: 1px solid var(--border-light);
    border-radius: var(--radius-sm);
    padding: 9px 10px;
    box-shadow: inset 0 1px 0 #fff;
}
.pt-item.done {
    background: linear-gradient(150deg, #f6fdf8 0%, #e2f5ea 100%);
    border-color: rgba(63, 157, 110, 0.38);
}
.pt-item.done .pt-title { text-decoration: line-through; color: #2c6b4c; }
.pt-check {
    flex: 0 0 18px;
    width: 18px;
    height: 18px;
    margin-top: 1px;
    border: 1.5px solid rgba(63, 157, 110, 0.55);
    border-radius: 50%;
    color: #fff;
    font-size: 12px;
    line-height: 15px;
    text-align: center;
    cursor: pointer;
    background: #fff;
    box-sizing: border-box;
    user-select: none;
}
.pt-check.on { background: linear-gradient(135deg, #55b385, #3f9d6e); border-color: #3f9d6e; }
.pt-main { flex: 1; min-width: 0; }
.pt-title { font-size: 13px; font-weight: 600; color: var(--text-primary); line-height: 1.5; word-break: break-word; }
.pt-meta { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; margin-top: 3px; }
.pt-biz { font-size: 10.5px; font-weight: 600; border-radius: 999px; padding: 1px 8px; color: #fff; }
.pt-biz-ads { background: linear-gradient(135deg, #e2a05f, #cf7d33); }
.pt-biz-ai { background: linear-gradient(135deg, #8fb4e8, #5a86c9); }
.pt-biz-study { background: linear-gradient(135deg, #9ac3a8, #5f9c78); }
.pt-biz-general { background: linear-gradient(135deg, #b6bcc6, #8d95a1); }
.pt-date { font-size: 11px; color: var(--text-secondary); }
.pt-src { font-size: 11px; color: var(--text-muted); }
.pt-note { font-size: 11.5px; color: var(--text-secondary); margin-top: 4px; line-height: 1.6; word-break: break-word; }
.pt-subs { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.pt-sub {
    font-size: 11px;
    color: var(--text-secondary);
    background: rgba(122, 132, 148, 0.1);
    border: 1px solid var(--border);
    border-radius: 999px;
    padding: 2px 9px;
    cursor: pointer;
    transition: all 0.15s;
}
.pt-sub.on { color: var(--text-muted); text-decoration: line-through; background: rgba(63, 157, 110, 0.1); border-color: rgba(63, 157, 110, 0.3); }
.pt-del {
    flex: 0 0 auto;
    width: 20px;
    height: 20px;
    border: none;
    background: transparent;
    color: var(--text-muted);
    font-size: 16px;
    line-height: 1;
    cursor: pointer;
    border-radius: 6px;
}
.pt-del:hover { background: rgba(220, 80, 80, 0.12); color: #c05050; }
.pt-done-label { font-size: 11.5px; color: var(--text-muted); margin: 8px 0 2px; }

/* 板块标题行：标题 + 复制格式 / 删除 / 新增企划内容 */
.plan-board-tools { display: flex; align-items: center; gap: 6px; }
.plan-board-icon {
    border: 1px solid var(--border-light);
    background: transparent;
    color: var(--text-muted);
    font-size: 11px;
    line-height: 1;
    padding: 5px 8px;
    border-radius: 8px;
    cursor: pointer;
    white-space: nowrap;
}
.plan-board-icon:hover { color: #8a6d2f; border-color: rgba(194, 154, 75, 0.45); background: rgba(194, 154, 75, 0.1); }
.plan-board-icon.del { padding: 5px 7px; font-size: 14px; }
.plan-board-icon.del:hover { color: #c05050; border-color: rgba(200, 70, 70, 0.4); background: rgba(214, 69, 69, 0.1); }
/* 待办区里标出这条待办来自哪个板块 */
.pt-board {
    padding: 1px 7px;
    border-radius: 999px;
    background: rgba(194, 154, 75, 0.16);
    color: #8a6d2f;
    font-size: 10.5px;
    font-weight: 600;
}

/* 新建区展开时不再重复显示空提示 */
.plan-board.creating .think-empty { display: none; }

/* 板块标题可点击改名 */
.plan-panel-title {
    cursor: pointer;
    border-radius: 6px;
    padding: 1px 6px;
    margin-left: -6px;
    transition: background .18s, color .18s;
}
.plan-panel-title:hover { background: rgba(194, 154, 75, 0.12); color: #8a6d2f; }
.plan-title-input {
    width: 132px;
    font-size: 15px;
    font-weight: 600;
    font-family: inherit;
    color: var(--text-primary);
    background: transparent;
    border: none;
    border-bottom: 2px solid rgba(194, 154, 75, 0.6);
    border-radius: 0;
    outline: none;
    padding: 0 2px 2px;
}

/* 页面上直接新建企划内容 */
.plan-create {
    margin-bottom: 12px;
    padding: 12px;
    border-radius: var(--radius-sm);
    border: 1px dashed rgba(194, 154, 75, 0.55);
    background: linear-gradient(150deg, #fffdf6 0%, #f9f4e8 100%);
}
.plan-create-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 10px;
}
.plan-create-label { font-size: 13px; font-weight: 700; color: #8a6d2f; }
.plan-create-close {
    border: none;
    background: transparent;
    color: var(--text-muted);
    font-size: 18px;
    line-height: 1;
    padding: 0 4px;
    border-radius: 6px;
    cursor: pointer;
}
.plan-create-close:hover { background: rgba(122, 132, 148, 0.14); color: var(--text-secondary); }
.plan-create .form-row { margin-bottom: 10px; }
.plan-create-row { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.plan-create-seq {
    flex: 0 0 22px;
    text-align: center;
    font-size: 11px;
    font-weight: 700;
    line-height: 22px;
    color: #8a6d2f;
    background: rgba(194, 154, 75, 0.16);
    border-radius: 999px;
}
.plan-create-input { flex: 1; min-width: 0; }
.plan-create-del {
    flex: 0 0 auto;
    width: 26px;
    height: 26px;
    line-height: 1;
    border: 1px solid var(--border-light);
    background: #fff;
    color: var(--text-muted);
    border-radius: 8px;
    cursor: pointer;
}
.plan-create-del:hover { color: #c05050; border-color: rgba(200, 70, 70, 0.4); }
.plan-create-add { margin-top: 2px; }
.plan-create-actions { display: flex; gap: 8px; margin-top: 12px; justify-content: flex-end; }
.plan-create-save,
.plan-create-cancel {
    flex: 0 0 auto;
    min-width: 104px;
    padding: 9px 20px;
    border: none;
    border-radius: 10px;
    font-size: 13px;
    font-weight: 600;
    font-family: inherit;
    cursor: pointer;
}
.plan-create-cancel {
    background: linear-gradient(150deg, #ffffff, #e7eaef);
    color: var(--text-secondary);
    box-shadow: inset 0 1px 0 #fff, 0 2px 6px rgba(28, 34, 45, 0.06);
}
.plan-create-save {
    background: linear-gradient(135deg, #e9cf8a 0%, #c9a24e 50%, #a67f30 100%);
    color: #fff;
    box-shadow: 0 3px 10px rgba(178, 140, 60, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.4);
}
.plan-create-save:hover { filter: brightness(1.05); }

/* 手机端：按钮与字段排布 */
@media (max-width: 768px) {
    .plan-node-todo { height: 22px; padding: 0 7px; font-size: 10px; line-height: 20px; }
    /* 待办状态角标 / 企划待办进度：手机端更紧凑 */
    .plan-todo-pill { font-size: 9px; padding: 0 5px; margin-top: 2px; }
    .plan-todo-stat { font-size: 10px; gap: 5px; }
    .pts-item { padding: 1px 6px; }
    .plan-todo-state { font-size: 9.5px; padding: 1px 6px; }
    .plan-todo-line { font-size: 11px; gap: 6px; }
    .ptl-k { flex-basis: 34px; font-size: 10px; }
    .plan-todo-toggle { font-size: 10px; padding: 2px 7px; }
    .plan-todo-fields { grid-template-columns: 1fr 1fr; }
    .plan-todo-tip { display: block; width: 100%; }
    .pt-title { font-size: 12.5px; }
    .pt-biz, .pt-date, .pt-src { font-size: 10px; }
    .plan-create { padding: 10px; }
    .plan-create-label { font-size: 12px; }
    .plan-create-seq { flex-basis: 20px; line-height: 20px; font-size: 10px; }
    .plan-create-save, .plan-create-cancel { flex: 1; min-width: 0; padding: 8px; font-size: 12px; }
    .plan-panel-title { padding: 1px 4px; margin-left: -4px; }
    .plan-title-input { width: 96px; font-size: 14px; }
    .plan-board-tools { gap: 5px; }
    .plan-board-icon { font-size: 10px; padding: 4px 6px; }
    .plan-board-add { padding: 5px 9px; font-size: 11px; }
    .pt-board { font-size: 10px; }
}

/* 滚动条美化 */
.content::-webkit-scrollbar { width: 6px; }
.content::-webkit-scrollbar-track { background: transparent; }
.content::-webkit-scrollbar-thumb { background: rgba(122, 132, 148, 0.35); border-radius: 3px; }

/* ===== 努力页 · 私人教练（2026-09-15） ===== */
.rhythm-date { font-size: 12px; color: var(--text-muted); }

/* 打卡完成率 */
.rate-box { display: flex; align-items: center; gap: 14px; }
.rate-num { flex: 0 0 auto; font-size: 32px; font-weight: 600; line-height: 1; color: var(--text-primary); font-variant-numeric: tabular-nums; }
.rate-right { flex: 1 1 auto; min-width: 0; }
.rate-bar { height: 8px; border-radius: 999px; background: var(--metal-3); overflow: hidden; }
.rate-bar > span { display: block; height: 100%; width: 0; border-radius: 999px; transition: width .3s, background .3s; background: var(--metal-3); }
.rate-bar > span.low { background: linear-gradient(135deg, #e59a9a, #d65b5b); }
.rate-bar > span.mid { background: linear-gradient(135deg, #e9cf8a, #cf9839); }
.rate-bar > span.good { background: linear-gradient(135deg, #8ed0ad, #3f9d6e); }
.rate-bar > span.all { background: linear-gradient(135deg, #63c295, #2f8a5c); }
.rate-parts { display: flex; flex-wrap: wrap; gap: 4px 14px; margin-top: 8px; }
.rate-part { font-size: 12px; color: var(--text-secondary); }
.rate-part b { color: var(--text-primary); font-weight: 600; }
.rate-tip {
    margin-top: 10px; padding: 9px 12px; border-radius: 4px 8px 8px 4px;
    font-size: 12.5px; color: var(--text-primary); line-height: 1.6;
    background: var(--metal-2); border-left: 3px solid var(--gold);
}

/* 今日节奏（普通卡片；当前时段自动标红；已完成淡绿） */
.rhythm-list { display: flex; flex-direction: column; gap: 6px; }
.rhythm-item {
    display: flex; align-items: center; gap: 10px;
    padding: 9px 11px;
    border-radius: var(--radius-sm);
    background: var(--bg-card);
    border: 1px solid var(--border);
    transition: background .15s, opacity .15s, border-color .15s, box-shadow .15s;
}
.rhythm-item.past { opacity: .5; }
.rhythm-item.now {
    background: linear-gradient(135deg, rgba(214, 91, 91, .15), rgba(190, 60, 60, .05));
    border-color: rgba(214, 91, 91, .55);
    box-shadow: 0 0 0 3px rgba(214, 91, 91, .08);
}
.rhythm-item.now .rhythm-time, .rhythm-item.now .rhythm-title { color: var(--danger); font-weight: 600; }
.rhythm-item.done { background: rgba(63, 157, 110, .07); border-color: rgba(63, 157, 110, .3); }
.rhythm-item.done .rhythm-title { text-decoration: line-through; color: var(--text-muted); }

.rhythm-time { flex: 0 0 44px; font-size: 13px; font-weight: 500; color: var(--text-primary); padding-top: 1px; }
.rhythm-body { flex: 1 1 auto; min-width: 0; }
.rhythm-title { font-size: 13px; font-weight: 500; color: var(--text-primary); }
.rhythm-tip { font-size: 12px; color: var(--text-secondary); margin-top: 2px; line-height: 1.45; }
.rhythm-now-tag { margin-left: 6px; font-size: 11px; font-weight: 500; color: #fff; background: var(--danger); border-radius: 6px; padding: 1px 6px; }

/* 打卡按钮（今日节奏 / 我的原则共用） */
.rhythm-btn {
    flex: 0 0 auto; padding: 4px 11px; border-radius: 999px;
    font-size: 12px; line-height: 1.5; font-family: inherit;
    border: 1px solid var(--border); background: var(--metal-2); color: var(--text-secondary);
    cursor: pointer; white-space: nowrap; transition: all .15s;
}
.rhythm-btn:hover { border-color: var(--success); color: var(--success); }
.rhythm-btn.done { background: rgba(63, 157, 110, .16); border-color: rgba(63, 157, 110, .45); color: var(--success); font-weight: 500; }

.rhythm-night { margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--border); }
.rhythm-night-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; gap: 8px; flex-wrap: wrap; }
.rhythm-night-title { font-size: 13px; font-weight: 500; }
.rhythm-night-state { font-size: 12px; color: var(--gold-dark); }
.rhythm-night-opts { display: flex; flex-wrap: wrap; gap: 6px; }
.night-btn {
    padding: 6px 14px; border-radius: 999px; font-size: 13px;
    border: 1px solid var(--border); background: var(--bg-card); color: var(--text-secondary);
    cursor: pointer; font-family: inherit; transition: all .15s;
}
.night-btn:hover { border-color: var(--gold); color: var(--gold-dark); }
.night-btn.on { background: var(--gold-grad); border-color: transparent; color: #fff; font-weight: 500; }
.rhythm-night-tip { margin-top: 8px; font-size: 12px; color: var(--text-muted); line-height: 1.5; }

/* ── 我的鸡汤（内容在页面内编辑；全部展开显示，不做折叠） ── */
.soup-list { display: flex; flex-direction: column; gap: 8px; }
.soup-item {
    display: flex; align-items: flex-start; gap: 10px;
    padding: 10px 12px; border-radius: var(--radius-sm);
    background: var(--bg-card); border: 1px solid var(--border);
    border-left: 3px solid var(--gold);
}
.soup-idx {
    flex: 0 0 20px; height: 20px; margin-top: 1px;
    display: inline-flex; align-items: center; justify-content: center;
    border-radius: 50%; font-size: 11px; font-weight: 600;
    background: var(--gold-grad); color: #fff;
}
.soup-body { flex: 1 1 auto; min-width: 0; }
.soup-main { font-size: 13px; line-height: 1.65; color: var(--text-primary); }
.soup-act { margin-top: 5px; font-size: 12.5px; line-height: 1.55; color: var(--gold-dark); }
.soup-empty {
    padding: 14px; text-align: center; font-size: 12.5px; color: var(--text-muted);
    background: var(--metal-2); border: 1px dashed var(--border); border-radius: var(--radius-sm);
}

/* 编辑区：点「编辑」才展开，默认隐藏 */
.soup-edit { display: none; }
.soup-edit.open { display: block; }
.soup-input {
    width: 100%; min-height: 190px; resize: vertical;
    padding: 11px 12px; border-radius: var(--radius-sm);
    border: 1px solid var(--border); background: var(--bg-card); color: var(--text-primary);
    font-family: inherit; font-size: 13px; line-height: 1.75;
}
.soup-input:focus { outline: none; border-color: var(--gold); box-shadow: 0 0 0 3px rgba(194, 154, 75, .12); }
.soup-edit-tip { margin: 8px 0 10px; font-size: 11.5px; color: var(--text-muted); line-height: 1.55; }
.soup-edit-tip b { color: var(--gold-dark); }
.soup-edit-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.btn-ghost {
    background: var(--metal-2); color: var(--text-secondary);
    border: 1px solid var(--border); box-shadow: none;
}
.btn-ghost:hover { color: var(--text-primary); border-color: var(--gold); box-shadow: none; }

@media (max-width: 640px) {
    .rate-num { font-size: 26px; }
    .rate-box { gap: 11px; }
    .rhythm-time { flex: 0 0 40px; font-size: 12px; }
    .rhythm-item { padding: 8px 9px; gap: 8px; }
    .rhythm-btn { padding: 3px 9px; font-size: 11.5px; }
    .soup-item { padding: 9px 10px; gap: 8px; }
    .soup-main { font-size: 12.5px; }
    .soup-input { font-size: 13px; min-height: 220px; }
    .night-btn { padding: 6px 12px; font-size: 12px; }
}

/* ============================
   删除确认弹窗（v5.44）
   覆盖 .modal 的「底部抽屉」形态：居中弹出、全圆角、危险色确认键
   ============================ */
.modal-overlay.wb-confirm-overlay {
    align-items: center;
    padding: 22px;
    z-index: 320;
}

.wb-confirm {
    max-width: 400px;
    border-radius: 18px;
    padding: 22px 20px 0;
    text-align: center;
    overflow: hidden;
    animation: wbPopIn 0.18s ease;
    box-shadow: inset 0 1px 0 #fff, 0 18px 50px rgba(28, 34, 45, 0.22);
}

@keyframes wbPopIn {
    from { opacity: 0; transform: scale(0.94) translateY(6px); }
    to { opacity: 1; transform: scale(1) translateY(0); }
}

.wb-confirm-mark {
    width: 46px; height: 46px;
    margin: 0 auto 13px;
    display: flex; align-items: center; justify-content: center;
    border-radius: 50%;
    font-size: 22px; font-weight: 700; line-height: 1; color: #c04a4a;
    background: radial-gradient(circle at 35% 28%, #ffffff, #f8e8e8 62%, #f0d6d6);
    border: 1px solid rgba(200, 70, 70, 0.32);
    box-shadow: inset 0 1px 0 #fff, 0 3px 10px rgba(190, 80, 80, 0.16);
}

.wb-confirm-title {
    margin: 0 0 9px;
    font-size: 16px; font-weight: 700; letter-spacing: 0.2px;
    color: var(--text-primary);
}

.wb-confirm-msg {
    margin: 0 0 7px;
    font-size: 13px; line-height: 1.65;
    color: var(--text-secondary);
    word-break: break-word;
}

.wb-confirm-msg b { color: var(--danger); font-weight: 700; }

.wb-confirm-sub {
    margin: 0;
    font-size: 11.5px; line-height: 1.6; color: var(--text-muted);
}

.wb-confirm-sub:empty { display: none; }

.wb-confirm .modal-footer {
    margin: 18px -20px 0;
    padding: 14px 20px;
    position: static;
    border-radius: 0 0 18px 18px;
    border-top: 1px solid var(--border-light);
    background: var(--metal-2);
    backdrop-filter: none;
}

.btn-confirm.danger {
    background: linear-gradient(135deg, #e88d8d 0%, #d65b5b 52%, #b8433f 100%);
    box-shadow: 0 3px 10px rgba(190, 80, 80, 0.32), inset 0 1px 0 rgba(255, 255, 255, 0.35);
}

@media (max-width: 640px) {
    .modal-overlay.wb-confirm-overlay { padding: 18px; }
    .wb-confirm { max-width: 100%; padding: 20px 17px 0; }
    .wb-confirm .modal-footer { margin: 16px -17px 0; padding: 13px 17px; }
    .wb-confirm-title { font-size: 15.5px; }
    .wb-confirm-mark { width: 42px; height: 42px; font-size: 20px; margin-bottom: 11px; }
}


/* ============================
   页脚（备案信息）—— v5.51 新增
   合规要求：备案号必须展示 + 链接到 beian.miit.gov.cn
   ============================ */
.sidebar-beian {
    display: block;
    margin-top: 6px;
    font-size: 11px;
    line-height: 1.5;
    color: var(--text-muted);
    text-decoration: none;
    opacity: 0.7;
    word-break: break-all;
}
.sidebar-beian:hover { opacity: 1; text-decoration: underline; }

.app-footer {
    margin-top: 28px;
    padding: 18px 0 6px;
    border-top: 1px solid var(--border-light);
    text-align: center;
    font-size: 12px;
    line-height: 1.6;
    color: var(--text-muted);
}
.app-footer a {
    color: var(--text-muted);
    text-decoration: none;
}
.app-footer a:hover { text-decoration: underline; }

/* ============ 登录层（v5.52 鉴权） ============ */
.wb-login-overlay {
    position: fixed; inset: 0; z-index: 400;
    display: none; align-items: center; justify-content: center;
    padding: 20px;
    background: linear-gradient(160deg, #eaecf0 0%, #e1e4e9 55%, #eceef2 100%);
}
.wb-login-overlay.show { display: flex; }
.wb-login-card {
    width: 100%; max-width: 360px;
    background: var(--bg-card);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    box-shadow: var(--shadow);
    padding: 28px 24px 22px;
    text-align: center;
}
.wb-login-logo { font-size: 30px; color: var(--gold); line-height: 1; }
.wb-login-title { font-size: 19px; font-weight: 500; color: var(--text-primary); margin: 10px 0 4px; }
.wb-login-sub { font-size: 12px; color: var(--text-muted); margin-bottom: 20px; line-height: 1.6; }
.wb-login-field { text-align: left; margin-bottom: 12px; }
.wb-login-field label { display: block; font-size: 12px; color: var(--text-secondary); margin-bottom: 6px; }
.wb-login-field input {
    width: 100%; padding: 10px 12px; font-size: 14px;
    border: 1px solid var(--border); border-radius: var(--radius-sm);
    background: var(--bg-panel); color: var(--text-primary); outline: none;
}
.wb-login-field input:focus { border-color: var(--gold); background: #fff; }
.wb-login-err { min-height: 18px; font-size: 12px; color: var(--danger); text-align: left; margin-bottom: 6px; }
.wb-login-btn {
    width: 100%; padding: 11px; font-size: 14px; cursor: pointer;
    border: none; border-radius: var(--radius-sm);
    background: var(--gold-grad); color: #fff; font-weight: 500;
}
.wb-login-btn:disabled { opacity: .65; cursor: default; }
.wb-login-skip { display: block; margin-top: 14px; font-size: 12px; color: var(--text-muted); cursor: pointer; text-decoration: underline; }
.cloud-auth { font-size: 12px; color: var(--text-secondary); margin-top: 8px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.cloud-auth .auth-on { color: var(--success); }
.cloud-auth .auth-off { color: var(--warning); }


/* ================= 企划卡「收起 / 展开」（v5.54）=================
   收起态 = 一行摘要，三列与展开态严格对齐（时间列 / 内容列 / 目标列）
   —— 用 --plan-time-w / --plan-goal-w / --plan-hconn 这三个变量，手机端会自动跟着变窄 */
.plan-item.is-folded {
    padding: 9px 14px 9px 32px;
    cursor: pointer;
    transition: box-shadow .15s ease;
}
.plan-item.is-folded:hover { box-shadow: inset 0 1px 0 #fff, 0 3px 12px rgba(28, 34, 45, 0.10); }
/* 左侧的 ▸ 只是提示「这条能展开」，点击整行都能展开，所以箭头本身不接事件 */
.plan-fold-toggle {
    position: absolute;
    left: 9px;
    top: 50%;
    transform: translateY(-50%);
    width: 16px;
    height: 16px;
    line-height: 14px;
    text-align: center;
    font-size: 10px;
    color: #8a6d2f;
    background: rgba(194, 154, 75, 0.16);
    border: 1px solid rgba(194, 154, 75, 0.42);
    border-radius: 4px;
    pointer-events: none;
}
.plan-sum {
    display: grid;
    grid-template-columns: var(--plan-time-w) 1fr var(--plan-goal-w);
    column-gap: var(--plan-hconn);
    align-items: center;
}
.plan-sum-cell { min-width: 0; overflow: hidden; }
.plan-sum-time {
    font-size: 12px;
    font-weight: 600;
    color: var(--text-primary);
    white-space: nowrap;
    text-overflow: ellipsis;
}
.plan-sum-content { display: flex; align-items: center; gap: 6px; }
.plan-sum-text {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 13px;
    color: var(--text-primary);
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
}
.plan-sum-more,
.plan-sum-pend,
.plan-sum-todo {
    flex: 0 0 auto;
    font-size: 10px;
    line-height: 16px;
    padding: 0 7px;
    border-radius: 999px;
    white-space: nowrap;
}
.plan-sum-more { color: #8a6d2f; background: rgba(194, 154, 75, 0.16); }
.plan-sum-pend { color: #c05050; background: rgba(214, 69, 69, 0.12); }
.plan-sum-todo { color: #8a6d2f; background: rgba(194, 154, 75, 0.20); }
.plan-sum-todo.all-done { color: #2c6b4c; background: rgba(63, 157, 110, 0.16); }
.plan-sum-goal {
    font-size: 12px;
    color: var(--text-secondary);
    text-align: right;
    white-space: nowrap;
    text-overflow: ellipsis;
}
/* 展开态右上角的「收起」按钮：浅金底 pill，和 × 排在同一行，一眼能认出是"能收起来" */
.plan-collapse {
    position: absolute;
    top: 5px;
    right: 84px;
    z-index: 6;
    height: 24px;
    padding: 0 8px;
    border: none;
    background: rgba(194, 154, 75, 0.14);
    color: #8a6d2f;
    font-size: 11px;
    line-height: 24px;
    cursor: pointer;
    border-radius: 6px;
    white-space: nowrap;
}
.plan-collapse:hover { background: rgba(194, 154, 75, 0.28); }

/* 手机 / 窄屏：三列摆不下 → 收起态改成竖排（时间 / 内容 / 目标 各一行）
   顶部留 22px 与展开态一致，让右上角的 × 独占一行不压住文字 */
@media (max-width: 768px) {
    .plan-item.is-folded { padding: 22px 8px 8px 24px; }
    .plan-sum { grid-template-columns: 1fr; row-gap: 1px; }
    .plan-sum-time { font-size: 11px; }
    .plan-sum-text { font-size: 11.5px; }
    .plan-sum-content { flex-wrap: wrap; gap: 4px; }
    .plan-sum-goal { font-size: 10px; text-align: left; color: var(--text-muted); }
    .plan-sum-goal::before { content: '目标 · '; }
    /* 手机上「收起」紧贴 × 左边；↑↓ 沿用原有规则默认隐藏，不会挤到 */
    .plan-collapse { top: 2px; right: 28px; height: 20px; line-height: 20px; padding: 0 6px; font-size: 10px; }
}


/* ================= 企划板块「收起 / 展开」（v5.55）=================
   收起后只剩标题那一行。为了让「统一高度」在任何屏宽都成立：
   · 标题行永远单行（标题过长用省略号截断，绝不换行）
   · 工具栏 flex:0 0 auto 不参与压缩；能压缩的只有标题
   · 收起态把标题行的 margin-bottom 去掉，避免多出 12px 让高度不一致
*/
.plan-board-toggle {
    flex: 0 0 auto;
    width: 20px;
    height: 20px;
    padding: 0;
    line-height: 18px;
    text-align: center;
    font-size: 10px;
    color: #8a6d2f;
    background: rgba(194, 154, 75, 0.16);
    border: 1px solid rgba(194, 154, 75, 0.42);
    border-radius: 5px;
    cursor: pointer;
    transition: background .15s ease;
}
.plan-board-toggle:hover { background: rgba(194, 154, 75, 0.32); }
.plan-board-titlewrap {
    display: flex;
    align-items: center;
    gap: 7px;
    flex: 1 1 auto;
    min-width: 0;
}
.plan-board-head .plan-panel-title {
    margin-left: 0;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}
.plan-board-tools { flex: 0 0 auto; }
/* 收起态的计数徽标 */
.plan-board-sum-wrap { display: flex; align-items: center; gap: 5px; flex: 0 0 auto; }
.plan-board-sum {
    font-size: 10px;
    line-height: 17px;
    padding: 0 7px;
    border-radius: 999px;
    white-space: nowrap;
}
.plan-board-sum.n { color: #8a6d2f; background: rgba(194, 154, 75, 0.16); }
.plan-board-sum.pend { color: #c05050; background: rgba(214, 69, 69, 0.12); }
.plan-board-sum.todo { color: #8a6d2f; background: rgba(194, 154, 75, 0.20); }
.plan-board-sum.todo.all-done { color: #2c6b4c; background: rgba(63, 157, 110, 0.16); }

/* —— 收起态：只剩标题一行，所有板块高度完全一致 —— */
/* 内边距由 16px 收到 12px：每一行更矮，且因为所有板块都用同一套规则，高度仍然绝对一致 */
.plan-board.is-board-folded { padding-top: 12px; padding-bottom: 12px; }
.plan-board.is-board-folded .panel-header { margin-bottom: 0; cursor: pointer; }
.plan-board.is-board-folded .plan-list,
.plan-board.is-board-folded .plan-create { display: none; }
.plan-board.is-board-folded .plan-panel-title { cursor: pointer; }
.plan-board.is-board-folded:hover { box-shadow: inset 0 1px 0 #fff, inset 0 -1px 0 rgba(0, 0, 0, 0.04), 0 4px 14px rgba(28, 34, 45, 0.10); }

/* 「一直想」标题右边的全局开关 */
.plan-boards-foldall {
    color: #8a6d2f;
    background: rgba(194, 154, 75, 0.14);
    border-color: rgba(194, 154, 75, 0.45);
    white-space: nowrap;
}
.plan-boards-foldall:hover { background: rgba(194, 154, 75, 0.26); }

/* 窄屏：收起态优先腾地方给标题，徽标和「复制格式」让位（避免工具栏把标题挤没） */
@media (max-width: 768px) {
    .plan-board-toggle { width: 18px; height: 18px; line-height: 16px; }
    .plan-board-titlewrap { gap: 5px; }
    .plan-board-sum.pend { display: none; }
    .plan-board.is-board-folded .plan-board-copy { display: none; }
    .plan-boards-foldall { font-size: 11px; padding: 5px 9px; }
}

/* ============================
   努力页 · 可折叠小卡片（v5.56）
   「今日节奏」「我的鸡汤」收起成一行，高度统一
   ============================ */
.effort-card-head { cursor: pointer; }
.effort-card-titlewrap {
    display: flex;
    align-items: center;
    gap: 7px;
    flex: 1 1 auto;
    min-width: 0;
}
.effort-card-toggle {
    flex: 0 0 auto;
    width: 20px;
    height: 20px;
    padding: 0;
    line-height: 18px;
    text-align: center;
    font-size: 10px;
    color: #8a6d2f;
    background: rgba(194, 154, 75, 0.16);
    border: 1px solid rgba(194, 154, 75, 0.42);
    border-radius: 5px;
    cursor: pointer;
    transition: background .15s ease;
}
.effort-card-toggle:hover { background: rgba(194, 154, 75, 0.32); }
/* 摘要：默认不占位，只在收起态出现；长内容省略号截断 */
.effort-card-sum-wrap {
    display: none;
    flex: 0 1 auto;
    min-width: 0;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    font-size: 12px;
    color: var(--text-muted);
}
.effort-card.is-card-folded { padding-top: 12px; padding-bottom: 12px; }
.effort-card.is-card-folded .panel-header { margin-bottom: 0; }
.effort-card.is-card-folded .effort-card-body { display: none; }
/* 收起态：右端的日期 / 「编辑」按钮让位给摘要（摘要里已经带了这些信息） */
.effort-card.is-card-folded .effort-card-head .rhythm-date,
.effort-card.is-card-folded .effort-card-head .btn-small { display: none; }
.effort-card.is-card-folded .effort-card-sum-wrap { display: block; }

@media (max-width: 640px) {
    .effort-card.is-card-folded .effort-card-titlewrap { flex: 1 1 auto; }
    .effort-card-sum-wrap { font-size: 11.5px; }
}
