/* ===== 基础 ===== */
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Apple Color Emoji","Segoe UI Emoji",sans-serif;color:#1d1d1f;-webkit-font-smoothing:antialiased}
:root{
  --bg:#f2f4f8; --card:rgba(255,255,255,0.72); --card-solid:#fff;
  --text:#1d1d1f; --sub:#86868b; --accent:#0A7AFF; --accent-soft:rgba(10,122,255,0.12);
  --green:#34C759; --green-soft:rgba(52,199,89,0.15); --orange:#FF9500; --red:#FF3B30;
  --border:rgba(0,0,0,0.06); --shadow:0 8px 32px rgba(0,0,0,0.08);
  --blur:saturate(180%) blur(20px);
}
body{background:var(--bg)}

/* 手机外框（桌面居中显示，移动端全屏） */
.phone-frame{position:relative;height:100vh;height:100dvh;overflow:hidden;background:var(--bg)}
.bg-blob{position:absolute;border-radius:50%;filter:blur(60px);opacity:0.45;z-index:0;pointer-events:none}
.blob1{width:300px;height:300px;background:#A1C7FF;top:-80px;right:-60px}
.blob2{width:280px;height:280px;background:#C7A1FF;bottom:-60px;left:60px;opacity:0.3}
.blob3{width:240px;height:240px;background:#A1FFD8;top:40%;right:-40px;opacity:0.3}

/* iOS PWA 顶部状态栏占位 */
.statusbar-spacer{
  position:fixed;top:0;left:0;right:0;z-index:450;
  height:env(safe-area-inset-top,0);
  background:rgba(255,255,255,0.42);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border-bottom:1px solid var(--border);
  pointer-events:none;
}

.app{position:relative;z-index:1;display:flex;height:100%;overflow:hidden}

/* ===== 刷新按钮 ===== */
.refresh-btn{
  position:fixed;
  top:calc(8px + env(safe-area-inset-top,0));
  right:12px;z-index:500;
  width:42px;height:42px;border-radius:12px;
  background:rgba(255,255,255,0.92);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid rgba(255,255,255,0.6);box-shadow:0 3px 12px rgba(0,0,0,0.08);
  font-size:18px;color:var(--accent);cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:transform .3s;
}
.refresh-btn:active{transform:rotate(180deg) scale(0.92)}

@supports (-webkit-touch-callout:none) and (display-mode:standalone){
  .refresh-btn{top:calc(12px + env(safe-area-inset-top,0));right:14px}
}

/* ===== 汉堡菜单按钮 ===== */
.hamburger-btn{
  position:fixed;
  top:calc(8px + env(safe-area-inset-top,0));
  left:12px;z-index:500;
  width:42px;height:42px;border-radius:12px;
  background:rgba(255,255,255,0.92);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid rgba(255,255,255,0.6);box-shadow:0 3px 12px rgba(0,0,0,0.08);
  font-size:20px;color:var(--text);cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:transform .2s,opacity .3s;
}
.hamburger-btn:active{transform:scale(0.92)}

/* PWA 全屏模式下更宽的安全距离 */
@supports (-webkit-touch-callout:none) and (display-mode:standalone){
  .hamburger-btn{top:calc(12px + env(safe-area-inset-top,0));left:14px}
}

/* ===== 遮罩层 ===== */
.nav-overlay{
  position:fixed;inset:0;z-index:600;background:rgba(0,0,0,0.35);
  opacity:0;visibility:hidden;transition:opacity .3s,visibility .3s;
}
.nav-overlay.show{opacity:1;visibility:visible}

/* ===== 侧边导航（抽屉式） ===== */
.sidebar{
  position:fixed;top:0;left:0;z-index:700;
  width:260px;height:100%;height:100dvh;
  display:flex;flex-direction:column;
  background:rgba(255,255,255,0.92);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border-right:1px solid var(--border);
  transform:translateX(-100%);transition:transform .3s cubic-bezier(.4,0,.2,1);
  box-shadow:4px 0 30px rgba(0,0,0,0.12);
  padding:env(safe-area-inset-top,0) 0 0;
}
.sidebar.open{transform:translateX(0)}

.nav-header{
  display:flex;justify-content:space-between;align-items:center;
  padding:14px 16px 10px;border-bottom:1px solid var(--border);
}
.nav-header-title{font-size:15px;font-weight:700;color:var(--text)}
.nav-close-btn{
  width:32px;height:32px;border-radius:10px;border:none;
  background:rgba(0,0,0,0.06);color:var(--sub);font-size:16px;
  cursor:pointer;display:flex;align-items:center;justify-content:center;
}
.nav-close-btn:active{background:rgba(0,0,0,0.12)}
.nav-list{flex:1;padding:10px 8px;display:flex;flex-direction:column;gap:4px;overflow-y:auto}
.nav-item{
  display:flex;flex-direction:row;align-items:center;gap:12px;
  padding:13px 14px;border-radius:14px;cursor:pointer;min-height:50px;
  transition:all .25s cubic-bezier(.4,0,.2,1);color:var(--sub);
}
.nav-item:hover{background:rgba(255,255,255,0.5)}
.nav-item.active{background:var(--accent-soft);color:var(--accent)}
.nav-icon{font-size:20px;line-height:1;flex-shrink:0}
.nav-label{font-size:14px;font-weight:500}
.nav-footer{padding:12px 12px calc(14px + env(safe-area-inset-bottom,0))}
.nav-action{
  width:100%;padding:12px;background:rgba(255,255,255,0.5);border:1px solid var(--border);
  border-radius:12px;font-size:13px;color:var(--accent);cursor:pointer;min-height:48px;font-weight:500;
}

/* ===== 主内容 ===== */
.content{
  flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;
  padding:calc(56px + env(safe-area-inset-top,0)) 14px calc(24px + env(safe-area-inset-bottom,0));
  width:100%
}
.view{display:none;animation:fade .3s ease}
.view.active{display:block}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

.page-head{margin-bottom:14px;padding-left:50px}
.page-head h1{font-size:20px;font-weight:700;letter-spacing:-0.5px}
.page-head .sub{font-size:12px;color:var(--sub);margin-top:2px}

/* ===== 液态玻璃卡片基础 ===== */
.card{
  background:var(--card);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid rgba(255,255,255,0.6);border-radius:18px;padding:16px;
  box-shadow:var(--shadow);margin-bottom:14px;
}

/* ===== KPI 卡片 ===== */
.kpis{display:flex;gap:12px;margin-bottom:16px}
.kpi-card{
  flex:1;background:var(--card);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid rgba(255,255,255,0.6);border-radius:18px;padding:14px;box-shadow:var(--shadow);
}
.kpi-label{font-size:11px;color:var(--sub);margin-bottom:8px}
.kpi-value{font-size:26px;font-weight:700;color:var(--accent);letter-spacing:-1px}
.kpi-bar{height:6px;background:rgba(0,0,0,0.06);border-radius:3px;overflow:hidden;margin-top:10px}
.kpi-bar-fill{height:100%;background:var(--accent);border-radius:3px;transition:width .5s ease}
.kpi-bar-fill.green{background:var(--green)}

/* ===== FAB 按钮 ===== */
.add-fab{
  width:100%;padding:13px;background:var(--accent);color:#fff;border:none;
  border-radius:16px;font-size:15px;font-weight:600;cursor:pointer;margin-bottom:14px;
  box-shadow:0 4px 14px rgba(10,122,255,0.3);min-height:48px;transition:transform .1s;
}
.add-fab:active{transform:scale(0.97)}

/* ===== 销售卡片 ===== */
.sales-list{display:flex;flex-direction:column;gap:10px}
.sales-card{
  background:var(--card);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid rgba(255,255,255,0.6);border-radius:18px;padding:14px;box-shadow:var(--shadow);
}
.sales-head{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.sales-name{font-size:16px;font-weight:600}
.sales-target{font-size:12px;color:var(--sub);margin-top:2px}
.sales-actions{display:flex;gap:6px;align-items:center}
.qty-btn{
  width:42px;height:42px;border-radius:50%;border:none;font-size:18px;font-weight:700;cursor:pointer;
  display:flex;align-items:center;justify-content:center;transition:transform .1s;
}
.qty-btn.plus{background:var(--accent-soft);color:var(--accent)}
.qty-btn.minus{background:rgba(255,59,48,0.12);color:var(--red)}
.qty-btn:active{transform:scale(0.85)}
.sales-count{
  min-width:46px;text-align:center;font-size:18px;font-weight:700;color:var(--text);padding:0 4px;
}
.sales-progress{margin-top:12px}
.sp-label{display:flex;justify-content:space-between;font-size:11px;color:var(--sub);margin-bottom:5px}
.sp-bar{height:8px;background:rgba(0,0,0,0.06);border-radius:4px;overflow:hidden}
.sp-fill{height:100%;background:linear-gradient(90deg,#0A7AFF,#5AC8FA);border-radius:4px;transition:width .4s ease}
.sp-fill.done{background:linear-gradient(90deg,#34C759,#30D158)}
.sales-card .row-actions{display:flex;gap:6px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}
.mini-btn{flex:1;padding:7px;border:none;border-radius:8px;font-size:12px;cursor:pointer;min-height:36px;font-weight:500}
.mini-btn.edit{background:rgba(10,122,255,0.1);color:var(--accent)}
.mini-btn.del{background:rgba(255,59,48,0.1);color:var(--red)}
.mini-btn.set{background:rgba(0,0,0,0.05);color:var(--text)}
.sales-input{flex:1;padding:8px 10px;border:1px solid var(--border);border-radius:8px;font-size:14px;min-height:36px;width:60px}

/* ===== 转化率 ===== */
.conv-tabs{display:flex;gap:6px;margin-bottom:14px;background:rgba(255,255,255,0.5);padding:4px;border-radius:14px}
.conv-tab{flex:1;padding:9px;border:none;background:transparent;border-radius:10px;font-size:13px;color:var(--sub);cursor:pointer;font-weight:500;min-height:40px}
.conv-tab.active{background:#fff;color:var(--accent);box-shadow:0 2px 8px rgba(0,0,0,0.06)}
.conv-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}
.conv-stat{background:var(--card);backdrop-filter:var(--blur);border:1px solid rgba(255,255,255,0.6);border-radius:14px;padding:12px;text-align:center;box-shadow:var(--shadow)}
.conv-stat .v{font-size:20px;font-weight:700;color:var(--accent)}
.conv-stat .v.green{color:var(--green)}
.conv-stat .l{font-size:11px;color:var(--sub);margin-top:3px}
.conv-rate-row{display:flex;justify-content:space-around;background:var(--card);backdrop-filter:var(--blur);border:1px solid rgba(255,255,255,0.6);border-radius:14px;padding:14px;margin-bottom:14px;box-shadow:var(--shadow)}
.conv-rate-item{text-align:center}
.conv-rate-item .v{font-size:22px;font-weight:700;color:var(--orange)}
.conv-rate-item .v.green{color:var(--green)}
.conv-rate-item .l{font-size:11px;color:var(--sub);margin-top:3px}
.conv-group{margin-bottom:12px}
.conv-group-title{font-size:14px;font-weight:600;margin-bottom:8px;padding-left:4px}
.conv-record{
  background:var(--card);backdrop-filter:var(--blur);border:1px solid rgba(255,255,255,0.6);
  border-radius:14px;padding:12px;box-shadow:var(--shadow);margin-bottom:8px;
}
.conv-record-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.conv-record-name{font-size:14px;font-weight:600}
.conv-record-channel{font-size:11px;padding:2px 8px;background:var(--accent-soft);color:var(--accent);border-radius:8px}
.conv-record-stats{display:flex;gap:14px;font-size:12px;color:var(--sub)}
.conv-record-stats span b{color:var(--text);font-weight:600}
.conv-record-rates{display:flex;gap:14px;margin-top:6px;font-size:12px}
.conv-record-rates .rate{color:var(--orange);font-weight:600}
.conv-record-rates .rate.green{color:var(--green)}
.conv-record-actions{display:flex;gap:6px;margin-top:8px}

/* ===== 客户 ===== */
.cust-tabs{display:flex;gap:6px;overflow-x:auto;padding-bottom:8px;margin-bottom:12px;-webkit-overflow-scrolling:touch}
.cust-tab{padding:8px 14px;border-radius:18px;border:1px solid var(--border);background:rgba(255,255,255,0.6);font-size:13px;color:var(--sub);cursor:pointer;white-space:nowrap;min-height:40px;font-weight:500}
.cust-tab.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.cust-list{display:flex;flex-direction:column;gap:10px}
.cust-card{background:var(--card);backdrop-filter:var(--blur);border:1px solid rgba(255,255,255,0.6);border-radius:14px;padding:14px;box-shadow:var(--shadow)}
.cust-card-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
.cust-name{font-size:15px;font-weight:600}
.cust-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.cust-tag{font-size:11px;padding:3px 10px;border-radius:10px;font-weight:500}
.cust-tag.car{background:rgba(255,149,0,0.15);color:var(--orange)}
.cust-tag.ch{background:rgba(10,122,255,0.12);color:var(--accent)}
.cust-note{font-size:13px;color:var(--sub);margin-top:8px;line-height:1.5;background:rgba(0,0,0,0.03);padding:8px 10px;border-radius:8px}
.cust-time{font-size:11px;color:var(--sub);margin-top:6px}

/* ===== 模块2 新增：销售快速录入卡片 ===== */
.conv-person-card{
  background:var(--card);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid rgba(255,255,255,0.6);border-radius:16px;padding:14px;box-shadow:var(--shadow);margin-bottom:10px;
}
.conv-person-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px}
.conv-person-name{font-size:16px;font-weight:600}
.qi-trigger{
  padding:8px 14px;background:linear-gradient(135deg,#0A7AFF,#5AC8FA);color:#fff;border:none;
  border-radius:18px;font-size:13px;font-weight:600;cursor:pointer;min-height:40px;white-space:nowrap;
  box-shadow:0 2px 8px rgba(10,122,255,0.3);transition:transform .1s;
}
.qi-trigger:active{transform:scale(0.95)}
.conv-person-stats{display:flex;gap:8px;margin-bottom:8px}
.cps{flex:1;text-align:center;background:rgba(0,0,0,0.03);border-radius:10px;padding:8px}
.cps-v{display:block;font-size:18px;font-weight:700;color:var(--text)}
.cps-v.green{color:var(--green)}
.cps-l{display:block;font-size:11px;color:var(--sub);margin-top:2px}
.conv-person-rates{display:flex;justify-content:space-around;font-size:12px}
.conv-person-rates .rate{color:var(--orange)}
.conv-person-rates .rate.green{color:var(--green)}
.conv-person-rates b{font-weight:700}

/* ===== 快速录入浮窗 ===== */
.qi-current{
  display:flex;justify-content:space-between;align-items:center;
  padding:10px 12px;background:var(--accent-soft);border-radius:10px;margin-bottom:14px;
}
.qi-current-label{font-size:12px;color:var(--sub)}
.qi-current-val{font-size:13px;font-weight:600;color:var(--accent)}
.qi-btns{display:flex;gap:10px;margin-bottom:14px}
.qi-btn{
  flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;
  padding:14px 4px;border:none;border-radius:14px;cursor:pointer;min-height:90px;
  transition:all .15s cubic-bezier(.34,1.56,.64,1);
}
.qi-btn:nth-child(1){background:rgba(10,122,255,0.12);color:var(--accent)}
.qi-btn:nth-child(2){background:rgba(255,149,0,0.15);color:var(--orange)}
.qi-btn:nth-child(3){background:rgba(52,199,89,0.15);color:var(--green)}
.qi-btn:active{transform:scale(0.93)}
.qi-btn.pulse{animation:qiPulse .3s}
@keyframes qiPulse{0%{transform:scale(1)}50%{transform:scale(1.08)}100%{transform:scale(1)}}
.qi-btn-icon{font-size:22px}
.qi-btn-label{font-size:12px;font-weight:600}
.qi-btn-val{
  font-size:18px;font-weight:700;min-width:30px;height:26px;line-height:26px;
  padding:0 8px;background:rgba(255,255,255,0.7);border-radius:13px;
}
.qi-summary{margin-bottom:14px}
.qi-summary-title{font-size:13px;font-weight:600;margin-bottom:8px;color:var(--text)}
.qi-table{width:100%;border-collapse:collapse;font-size:12px}
.qi-table th,.qi-table td{padding:7px 8px;text-align:center;border-bottom:1px solid var(--border)}
.qi-table th{color:var(--sub);font-weight:500;font-size:11px}
.qi-table td.qi-ch{text-align:left;color:var(--text);font-weight:500}

/* ===== 模块3 新增：已成交收纳 ===== */
.cust-sub-tabs{
  display:flex;gap:6px;margin-bottom:14px;background:rgba(255,255,255,0.5);padding:4px;border-radius:14px;
}
.cust-sub-tab{
  flex:1;padding:9px;border:none;background:transparent;border-radius:10px;font-size:13px;
  color:var(--sub);cursor:pointer;font-weight:500;min-height:40px;
}
.cust-sub-tab.active{background:#fff;color:var(--accent);box-shadow:0 2px 8px rgba(0,0,0,0.06)}
.cust-sub-tab[data-sub="dealt"].active{color:var(--green)}
.cust-card-actions{display:flex;gap:6px;align-items:flex-start;flex-shrink:0}
.cust-deal-btn{
  padding:8px 12px;background:linear-gradient(135deg,#34C759,#30D158);color:#fff;border:none;
  border-radius:10px;font-size:12px;font-weight:600;cursor:pointer;min-height:40px;white-space:nowrap;
  box-shadow:0 2px 8px rgba(52,199,89,0.3);transition:transform .1s;
}
.cust-deal-btn:active{transform:scale(0.95)}
.cust-card.dealt{border-left:3px solid var(--green);opacity:0.85}
.cust-tab-badge{
  display:inline-block;background:var(--accent);color:#fff;font-size:10px;
  padding:1px 6px;border-radius:8px;margin-left:2px;font-weight:600;
}

/* ===== 模块0：任务进度总表 ===== */
.dash-team-bar{
  display:flex;justify-content:space-between;align-items:center;
  padding:11px 14px;margin-bottom:10px;
  background:var(--accent-soft);border-radius:12px;
}
.dash-team-label{font-size:13px;font-weight:600;color:var(--accent)}
.dash-team-val{font-size:22px;font-weight:700;color:var(--accent)}
.dash-table-wrap{overflow:hidden}
.dash-table{width:100%;border-collapse:collapse;font-size:12px}
.dash-table thead th{
  padding:7px 5px;font-size:11px;font-weight:600;color:var(--sub);
  border-bottom:1px solid var(--border);position:sticky;top:0;
  background:rgba(242,244,248,0.95);text-align:center;
}
.dash-table thead th:first-child{text-align:left;padding-left:8px}
.dash-table thead th:last-child{padding-right:8px}
.dash-table tbody td{
  padding:6px 5px;text-align:center;border-bottom:1px solid rgba(0,0,0,0.04);
  font-size:12px;font-weight:500;color:var(--text);
}
.dash-table tbody td:first-child{text-align:left;padding-left:8px;font-weight:600}
.dash-table tbody td:last-child{padding-right:8px;font-weight:700;font-size:13px}
/* 进度颜色 */
.dash-deep-red{background:rgba(255,59,48,0.22)!important}
.dash-pink{background:rgba(255,105,97,0.16)!important}
.dash-yellow{background:rgba(255,204,0,0.18)!important}
.dash-light-green{background:rgba(52,199,89,0.15)!important}
.dash-deep-green{background:rgba(48,209,88,0.22)!important}
.dash-empty{text-align:center;padding:30px 20px;color:var(--sub);font-size:13px}

/* ===== 转化率汇总表（渠道/个人视图） ===== */
.conv-summary-table-wrap{margin-bottom:12px;overflow:hidden}
.conv-summary-table{
  width:100%;border-collapse:collapse;font-size:11px;
  background:var(--card);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid rgba(255,255,255,0.6);border-radius:12px;
  box-shadow:var(--shadow);
}
.conv-summary-table thead th{
  padding:7px 4px;font-size:10px;font-weight:600;color:var(--sub);
  border-bottom:1px solid var(--border);text-align:center;
}
.conv-summary-table thead th:first-child{text-align:left;padding-left:8px}
.conv-summary-table tbody td{
  padding:6px 4px;text-align:center;border-bottom:1px solid rgba(0,0,0,0.04);
  font-size:11px;font-weight:500;color:var(--text);
}
.conv-summary-table tbody td:first-child{text-align:left;padding-left:8px;font-weight:600}
.conv-summary-table tbody td.rate-cell{font-weight:700;font-size:12px}
/* 转化率颜色 */
.rate-bad-deep{color:#FF3B30!important}
.rate-bad-mid{color:#FF6B5E!important}
.rate-bad-light{color:#FF9500!important}
.rate-good-light{color:#34C759!important}
.rate-good-deep{color:#007AFF!important}
/* 渠道/个人视图小标题 */
.conv-section-title{
  font-size:13px;font-weight:700;margin-bottom:8px;padding-left:2px;
  color:var(--text);
}
.pwa-install-tip{
  position:fixed;bottom:calc(16px + env(safe-area-inset-bottom,0));left:50%;transform:translateX(-50%) translateY(120%);
  width:calc(100% - 32px);max-width:420px;z-index:1500;opacity:0;transition:all .4s cubic-bezier(.34,1.56,.64,1);pointer-events:none;
}
.pwa-install-tip.show{transform:translateX(-50%) translateY(0);opacity:1;pointer-events:auto}
.pwa-tip-content{
  display:flex;align-items:center;gap:12px;padding:14px 16px;
  background:rgba(10,122,255,0.95);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);
  border-radius:18px;box-shadow:0 12px 40px rgba(10,122,255,0.4);
}
.pwa-tip-icon{font-size:28px;flex-shrink:0}
.pwa-tip-text{flex:1;color:#fff}
.pwa-tip-title{font-size:14px;font-weight:700;margin-bottom:2px}
.pwa-tip-desc{font-size:11px;opacity:0.9;line-height:1.4}
.pwa-tip-close{
  padding:8px 14px;background:rgba(255,255,255,0.25);border:none;border-radius:12px;
  color:#fff;font-size:13px;font-weight:600;cursor:pointer;flex-shrink:0;min-height:40px;
}

/* ===== 待办 ===== */
.todo-input-row{display:flex;gap:8px;margin-bottom:14px}
.todo-input-row input{flex:1;padding:11px 14px;border:1px solid var(--border);border-radius:14px;font-size:15px;background:rgba(255,255,255,0.7);min-height:48px}
.todo-input-row input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.todo-input-row button{padding:0 18px;background:var(--accent);color:#fff;border:none;border-radius:14px;font-size:14px;font-weight:600;cursor:pointer;min-height:48px}
.todo-list{display:flex;flex-direction:column;gap:8px}
.todo-item{display:flex;align-items:center;gap:12px;background:var(--card);backdrop-filter:var(--blur);border:1px solid rgba(255,255,255,0.6);border-radius:14px;padding:13px 14px;box-shadow:var(--shadow)}
.todo-check{width:26px;height:26px;border:2px solid var(--border);border-radius:50%;cursor:pointer;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:all .2s}
.todo-check.checked{background:var(--green);border-color:var(--green);color:#fff}
.todo-text{flex:1;font-size:15px;line-height:1.4}
.todo-item.done .todo-text{text-decoration:line-through;color:var(--sub)}
.todo-del{background:transparent;border:none;color:var(--red);font-size:13px;cursor:pointer;padding:6px;min-height:36px;min-width:44px}

/* ===== 备忘 ===== */
.memo-input-row{display:flex;gap:8px;margin-bottom:14px}
.memo-input-row textarea{flex:1;padding:11px 14px;border:1px solid var(--border);border-radius:14px;font-size:14px;background:rgba(255,255,255,0.7);resize:none;font-family:inherit;min-height:60px}
.memo-input-row textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.memo-input-row button{padding:0 16px;background:var(--accent);color:#fff;border:none;border-radius:14px;font-size:14px;font-weight:600;cursor:pointer;min-height:60px}
.memo-list{display:flex;flex-direction:column;gap:10px}
.memo-item{background:var(--card);backdrop-filter:var(--blur);border:1px solid rgba(255,255,255,0.6);border-radius:14px;padding:14px;box-shadow:var(--shadow)}
.memo-time{font-size:11px;color:var(--sub);margin-bottom:6px}
.memo-content{font-size:14px;line-height:1.6;white-space:pre-wrap;word-break:break-word}
.memo-actions{display:flex;gap:6px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}

/* ===== 弹窗 ===== */
.modal-mask{position:fixed;inset:0;background:rgba(0,0,0,0.3);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;z-index:1000;padding:20px}
.modal-mask.show{display:flex;animation:fade .2s}
.modal-card{
  width:100%;max-width:380px;background:rgba(255,255,255,0.92);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid rgba(255,255,255,0.8);border-radius:22px;padding:22px;box-shadow:0 20px 60px rgba(0,0,0,0.2);
  animation:pop .3s cubic-bezier(.34,1.56,.64,1);
}
@keyframes pop{from{transform:scale(0.9);opacity:0}to{transform:scale(1);opacity:1}}
.modal-title{font-size:18px;font-weight:700;margin-bottom:16px;text-align:center}
.modal-field{margin-bottom:14px}
.modal-field label{display:block;font-size:13px;font-weight:500;color:var(--sub);margin-bottom:6px}
.modal-field input,.modal-field textarea,.modal-field select{
  width:100%;padding:11px 14px;border:1px solid var(--border);border-radius:12px;font-size:15px;background:rgba(255,255,255,0.8);min-height:48px;font-family:inherit}
.modal-field input:focus,.modal-field textarea:focus,.modal-field select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.modal-field textarea{resize:vertical;min-height:80px}
.modal-actions{display:flex;gap:10px;margin-top:18px}
.modal-btn{flex:1;padding:12px;border:none;border-radius:12px;font-size:15px;font-weight:600;cursor:pointer;min-height:48px}
.modal-btn.cancel{background:rgba(0,0,0,0.06);color:var(--sub)}
.modal-btn.primary{background:var(--accent);color:#fff}
.modal-error{color:var(--red);font-size:12px;margin-top:4px;min-height:16px}

/* ===== Toast ===== */
.toast-wrap{position:fixed;top:24px;left:50%;transform:translateX(-50%);z-index:2000;pointer-events:none;width:90%;max-width:340px}
.toast{
  background:rgba(255,255,255,0.92);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid rgba(255,255,255,0.6);border-radius:16px;padding:14px 18px;margin-bottom:8px;
  box-shadow:0 8px 28px rgba(0,0,0,0.12);font-size:14px;font-weight:500;text-align:center;
  animation:toastIn .35s cubic-bezier(.34,1.56,.64,1);
}
.toast.success{color:var(--green)}
.toast.encourage{
  background:linear-gradient(135deg,rgba(255,149,0,0.95),rgba(255,59,48,0.9));color:#fff;
  font-size:15px;padding:16px 20px;
}
.toast.error{color:var(--red)}
@keyframes toastIn{from{opacity:0;transform:translateY(-30px) scale(0.9)}to{opacity:1;transform:translateY(0) scale(1)}}

/* ===== 每日总结 ===== */
.journal-cal-header{
  display:flex;justify-content:space-between;align-items:center;
  padding:4px 2px;margin-bottom:6px;
}
.journal-cal-header .month-label{font-size:14px;font-weight:700;color:var(--text)}
.journal-cal-header button{
  width:26px;height:26px;border-radius:6px;border:1px solid var(--border);
  background:rgba(255,255,255,0.7);font-size:11px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;color:var(--text);
}
.journal-cal-header button:active{background:rgba(0,0,0,0.06)}
.journal-cal-grid{
  display:grid;grid-template-columns:repeat(7,1fr);gap:1px;
  margin-bottom:10px;background:rgba(255,255,255,0.25);border-radius:10px;padding:3px;
}
.journal-cal-grid .cal-day-label{
  text-align:center;font-size:8px;font-weight:600;color:var(--sub);
  padding:2px 0;
}
.journal-cal-grid .cal-day{
  height:34px;border-radius:6px;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  font-size:10px;font-weight:500;color:var(--text);
  background:rgba(255,255,255,0.5);border:1px solid transparent;
  transition:all .15s;position:relative;
}
.journal-cal-grid .cal-day:active{transform:scale(0.92);background:rgba(10,122,255,0.1)}
.journal-cal-grid .cal-day.empty{background:transparent;pointer-events:none}
.journal-cal-grid .cal-day.today{border:1.5px solid var(--accent);font-weight:700;color:var(--accent)}
.journal-cal-grid .cal-day .mood-dot{
  width:3px;height:3px;border-radius:50%;margin-top:1px;
}
.mood-dot.green{background:var(--green)}
.mood-dot.red{background:var(--red)}
.mood-dot.yellow{background:var(--orange)}

/* 月总结 */
.journal-month-summary{
  background:var(--card);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid rgba(255,255,255,0.6);border-radius:12px;padding:10px 12px;
  box-shadow:var(--shadow);margin-top:2px;
}
.journal-month-summary h3{
  font-size:14px;font-weight:700;margin-bottom:8px;color:var(--text);
}
.journal-month-summary .summary-section{
  margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid var(--border);
}
.journal-month-summary .summary-section:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}
.journal-month-summary .summary-section h4{font-size:12px;font-weight:600;margin-bottom:3px}
.journal-month-summary .summary-section p{
  font-size:11px;color:var(--sub);line-height:1.5;
}
.journal-month-summary .gen-btn{
  width:100%;padding:8px;background:var(--accent);color:#fff;border:none;
  border-radius:8px;font-size:12px;font-weight:600;cursor:pointer;margin-top:4px;
}

/* 每日总结编辑弹窗 */
.journal-edit-wrap{padding:0 4px}
.journal-mood-selector{
  display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap;
}
.journal-mood-btn{
  flex:1;min-width:48px;padding:8px 6px;border:1px solid var(--border);
  border-radius:10px;background:rgba(255,255,255,0.7);font-size:12px;
  cursor:pointer;text-align:center;transition:all .15s;
}
.journal-mood-btn:active{transform:scale(0.95)}
.journal-mood-btn.selected{border-color:var(--accent);background:var(--accent-soft);font-weight:600}

/* 安慰语弹窗 */
.comfort-toast{
  position:fixed;top:30%;left:50%;transform:translate(-50%,-50%);
  z-index:2100;max-width:300px;text-align:center;
  background:rgba(255,255,255,0.95);backdrop-filter:var(--blur);
  border-radius:18px;padding:24px 20px;
  box-shadow:0 16px 48px rgba(0,0,0,0.15);
  animation:pop .3s cubic-bezier(.34,1.56,.64,1);
}
.comfort-toast .comfort-emoji{font-size:40px;margin-bottom:8px}
.comfort-toast .comfort-text{font-size:14px;color:var(--text);line-height:1.6}
.comfort-toast .comfort-close{
  margin-top:14px;padding:8px 24px;background:var(--accent);color:#fff;
  border:none;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer;
}

/* 空状态 */
.empty{text-align:center;padding:40px 20px;color:var(--sub);font-size:14px}

/* ===== 密码保护层 ===== */
.auth-screen{
  position:fixed;inset:0;z-index:3000;
  background:linear-gradient(135deg,#f2f4f8 0%,#e8eef8 100%);
  display:flex;align-items:center;justify-content:center;
  padding:20px;
}
.auth-screen.hidden{display:none}
.auth-card{
  width:100%;max-width:340px;
  background:var(--card);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  border:1px solid rgba(255,255,255,0.6);border-radius:24px;
  padding:34px 24px;box-shadow:var(--shadow);text-align:center;
}
.auth-icon{font-size:54px;margin-bottom:12px}
.auth-title{font-size:22px;font-weight:700;color:var(--text);margin-bottom:6px}
.auth-sub{font-size:13px;color:var(--sub);margin-bottom:22px}
.auth-input{
  width:100%;padding:14px 16px;border:1px solid var(--border);border-radius:14px;
  font-size:16px;background:rgba(255,255,255,0.8);min-height:52px;text-align:center;
  letter-spacing:2px;
}
.auth-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.auth-error{color:var(--red);font-size:12px;margin-top:8px;min-height:18px}
.auth-btn{
  width:100%;margin-top:18px;padding:14px;background:var(--accent);color:#fff;
  border:none;border-radius:14px;font-size:16px;font-weight:600;cursor:pointer;min-height:52px;
  box-shadow:0 4px 14px rgba(10,122,255,0.3);
}
.auth-btn:active{transform:scale(0.98)}

/* ===== 响应式 ===== */
@media(max-width:380px){.nav-label{font-size:13px}.kpi-value{font-size:22px}.content{padding:calc(52px + env(safe-area-inset-top,0)) 10px calc(24px + env(safe-area-inset-bottom,0))}.page-head{padding-left:46px}.page-head h1{font-size:18px}.dash-table{font-size:11px}.dash-table thead th,.dash-table tbody td{font-size:10px;padding:5px 3px}}
@media(min-width:600px){.content{max-width:560px;margin:0 auto;padding:calc(60px + env(safe-area-inset-top,0)) 16px calc(24px + env(safe-area-inset-bottom,0))}.sidebar{width:280px}}
@media(min-width:900px){.phone-frame{max-width:780px;margin:0 auto;border-radius:38px;overflow:hidden;height:calc(100vh - 40px);margin-top:20px;box-shadow:0 20px 60px rgba(0,0,0,0.15)}}
