/* 万年历 v4.0 - 模块化重构版 */
/* ===== 设计系统 (CSS变量) ===== */
:root {
  /* ── 品牌色 ── */
  --color-primary: #C62828;
  --color-primary-dark: #8E0000;
  --color-primary-light: #FFE0E0;
  --color-gold: #D4A017;
  --color-gold-bg: #FFF5E6;
  --color-card-bg: #FFF8F0;

  /* ── 灰度系统（5+2级）── */
  --gray-50: #f5f5f5;
  --gray-100: #f0f0f0;
  --gray-150: #ddd;
  --gray-200: #e0e0e0;
  --gray-300: #ccc;
  --gray-400: #bbb;
  --gray-450: #888;
  --gray-500: #999;
  --gray-600: #666;
  --gray-700: #555;
  --gray-800: #333;
  --gray-900: #111;

  /* 文字（灰度别称） */
  --color-text-primary: var(--gray-900);
  --color-text-body: var(--gray-800);
  --color-text-secondary: var(--gray-600);
  --color-text-muted: var(--gray-500);
  --color-text-light: var(--gray-400);
  --color-text-white: #fff;

  /* 背景 */
  --bg-page: linear-gradient(180deg, #fefcf6 0%, #fdf7ed 100%);
  --bg-card: #fff;
  --bg-input: #f5f5f5;

  /* 骨架屏加载动画 */
  --skeleton-color: #eee;
}

@keyframes skeleton-loading {
  0% { opacity: 0.6; }
  50% { opacity: 1; }
  100% { opacity: 0.6; }
}
.skeleton {
  background: var(--skeleton-color);
  border-radius: 4px;
  animation: skeleton-loading 1.5s ease-in-out infinite;
}
.skeleton-line { height: 14px; margin-bottom: 8px; width: 100%; }
.skeleton-line.w60 { width: 60%; }
.skeleton-line.w40 { width: 40%; }
.skeleton-block { height: 80px; margin-bottom: 10px; }

:root {
  --color-success: #2E7D32;
  --color-error: #C62828;

  /* 组件尺寸 */
  --card-radius: 8px;
  --modal-radius: 10px;
  --btn-height: 40px;
  --input-height: 38px;
  --spacing-sm: 4px;
  --spacing-md: 8px;
  --spacing-lg: 12px;
  --color-border-light: #f0f0f0;
  --color-success: #4CAF50;
  --color-warning: #FF9800;

  /* 黄历语义 — 宜浅绿/忌浅灰 */
  --color-yi: #2E7D32;
  --color-ji: var(--gray-500);
  --color-ji-backup: var(--gray-500);
  --color-ping: var(--gray-500);
  --color-weekend: #C62828;
  --color-other-month: #ddd;
  --color-xiu-tag-bg: #C62828;
  --color-festival: #2ea9df;
  --color-almanac-label: #D78100;
  --color-shichen-ji: #C62828;
  --color-shichen-ping: var(--gray-500);
  --color-shichen-xiong: var(--gray-300);
  --color-shichen-current-bg: #FFF0F0;
  --color-tab-off: #888;
  --color-tab-on: #C62828;

  /* 字体 */
  --font-family: -apple-system, 'PingFang SC', 'Noto Sans SC', 'HarmonyOS Sans', 'Microsoft YaHei', sans-serif;
  --fs-hero: 42px;
  --fs-h1: 18px;
  --fs-h2: 15px;
  --fs-body: 14px;
  --fs-small: 13px;
  --fs-xs: 12px;
  --fs-tiny: 11px;
  --fs-micro: 9px;

  /* 间距 */
  --sp-2: 2px;
  --sp-4: 4px;
  --sp-6: 6px;
  --sp-8: 8px;
  --sp-10: 10px;
  --sp-12: 12px;
  --sp-14: 14px;
  --sp-16: 16px;
  --sp-20: 20px;
  --sp-24: 24px;

  /* 圆角 */
  --radius-sm: 8px;
  --radius-md: 10px;
  --radius-lg: 12px;
  --radius-xl: 14px;

  /* 阴影 */
  --shadow-sm: 0 1px 3px rgba(0,0,0,.04);
  --shadow-md: 0 2px 8px rgba(0,0,0,.06);
  --shadow-lg: 0 4px 16px rgba(0,0,0,.08);
}

/* ===== 暗色模式 (CSS变量重定义) ===== */
body.dark {
  --color-primary-light: #3A1515;
  --color-gold-bg: #2A2010;
  --color-card-bg: #1A1510;

  --gray-50: #1a1a1a;
  --gray-100: #222;
  --gray-150: #2a2a2a;
  --gray-200: #333;
  --gray-300: #444;
  --gray-400: #555;
  --gray-450: #666;
  --gray-500: #888;
  --gray-600: #aaa;
  --gray-700: #ccc;
  --gray-800: #ddd;
  --gray-900: #eee;

  --color-text-primary: var(--gray-900);
  --color-text-body: var(--gray-800);
  --color-text-secondary: var(--gray-600);
  --color-text-muted: var(--gray-500);
  --color-text-light: var(--gray-450);

  --bg-page: linear-gradient(180deg, #1a1a1a 0%, #151515 100%);
  --bg-card: #222;
  --bg-input: #2a2a2a;

  --color-border: #333;
  --color-border-light: #2a2a2a;

  --shadow-sm: 0 1px 3px rgba(0,0,0,.2);
  --shadow-md: 0 2px 8px rgba(0,0,0,.3);
  --shadow-lg: 0 4px 16px rgba(0,0,0,.4);

  --color-other-month: #444;
  --color-shichen-xiong: #555;
  --color-shichen-current-bg: #2A1515;
  --color-xiu-tag-bg: #8E2020;
  --color-ji-backup: var(--gray-500);
}

/* ===== 全局重置 ===== */
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:var(--font-family);background:var(--bg-page);color:var(--color-text-body);padding-bottom:calc(58px + env(safe-area-inset-bottom));overflow-x:hidden;-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased}
body.modal-open{overflow:hidden;position:relative;width:100%;height:100%}

/* ===== 红色顶栏 ===== */
.header{position:sticky;top:0;z-index:100;background:var(--color-primary);height:50px;display:flex;align-items:center;padding:0 var(--sp-14);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.header .logo{font-size:var(--fs-h1);font-weight:700;color:var(--color-text-white);letter-spacing:.5px}
.header .h-r{margin-left:auto;display:flex;align-items:center;gap:var(--sp-10)}
.header .hi{width:32px;height:32px;border-radius:16px;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-size:14px;color:var(--color-text-white);cursor:pointer}
.header .hi:active{background:var(--color-primary-light)}

/* ===== 页面容器 ===== */
.pg{display:none;padding-bottom:var(--sp-4)}
.pg.on{display:block}

/* ===== 月导航 ===== */
.mn{display:flex;align-items:center;justify-content:space-between;padding: var(--sp-6) var(--sp-8) 0;background:var(--bg-card);touch-action:pan-y}
.ma{width:44px;height:44px;display:flex;align-items:center;justify-content:center;font-size:24px;color:var(--color-primary);cursor:pointer;border-radius:10px;user-select:none;flex-shrink:0;transition:background .12s}
.ma:active{background:var(--color-primary-light)}
.mc{flex:1;text-align:center;display:flex;align-items:center;justify-content:center;gap:var(--sp-8)}
.mc .mt{font-size:var(--fs-h1);font-weight:600;color:var(--color-text-primary);cursor:pointer;user-select:none}
.mc .mb2{display:inline-block;padding: 3px var(--sp-12);font-size:var(--fs-small);color:var(--color-primary);border:1px solid var(--color-primary);border-radius:12px;cursor:pointer;background:var(--bg-card);line-height:1.4;font-weight:600;transition:background .12s}
.mc .mb2:active{background:var(--color-primary-light)}

/* 放假·节气·节日信息条 */
.ci-bar{display:flex;align-items:center;justify-content:center;gap:var(--sp-2);padding: var(--sp-4) var(--sp-8);background:var(--bg-card);font-size:var(--fs-small);color:var(--color-text-muted);border-top:1px solid var(--color-border-light);font-weight:500}
.ci-bar .ci-b{cursor:pointer;padding: 3px var(--sp-6);border-radius:4px;transition:background .12s;white-space:nowrap}
.ci-bar .ci-b:active{background:var(--color-primary-light)}
.ci-bar .ci-s{color:var(--color-text-light);font-size:10px;padding:0 var(--sp-2)}
.ci-bar .ci-d{color:var(--color-primary);margin-left:var(--sp-2)}

/* ===== 日历 ===== */
.cw{background:var(--bg-card);padding:0 var(--sp-6) var(--sp-6)}
.wr{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;padding:var(--sp-4) 0}
.wr .w{font-size:var(--fs-small);color:var(--color-text-muted);padding:2px 0;font-weight:500}
.wr .w.we{color:var(--color-weekend);font-weight:600}
.dg{display:grid;grid-template-columns:repeat(7,1fr);gap:1px}
.dg .c{text-align:center;padding:3px 0;min-height:42px;cursor:pointer;position:relative;border-radius:var(--radius-sm);transition:background .12s}
.dg .c:active{background:var(--gray-50)}
.dg .c .n{font-size:18px;font-weight:500;color:var(--color-text-primary);line-height:1.2}
.dg .c.ot .n{color:var(--color-other-month)}
.dg .c.we .n{color:var(--color-weekend)}
.dg .c.td .n{color:var(--color-text-white);background:var(--color-primary);width:32px;height:32px;line-height:32px;border-radius:50%;margin:0 auto;font-weight:700;display:inline-block}
.dg .c.sl .n{color:var(--color-primary);font-weight:700;position:relative}
.dg .c.sl .n:after{content:'';position:absolute;bottom:-2px;left:50%;margin-left:calc(-1 * var(--sp-12));width:24px;height:2.5px;background:var(--color-primary);border-radius:1.5px}
.dg .c .c-rd{width:5px;height:5px;background:#C62828;border-radius:50%;display:inline-block;vertical-align:middle;margin-left:2px;pointer-events:none;flex-shrink:0}
.dg .c .c-rd-line{display:flex;justify-content:center;align-items:center;margin-top:1px;height:10px}
.dg .c .l{font-size:var(--fs-small);color:var(--color-text-muted);line-height:1.2;margin-top:1px;font-weight:500}
.dg .c .l2{font-size:var(--fs-xs);line-height:1.2;font-weight:500;margin-top:0}
.dg .c.jr .l{color:var(--color-festival);font-weight:600}
.dg .c.jq .l{color:var(--color-primary);font-weight:600}
.dg .c .l2.jr{color:var(--color-festival);font-weight:600}
.dg .c .l2.jq{color:var(--color-primary);font-weight:600}
/* 日历格子天气图标 */
.dg .c .c-wt{position:absolute;bottom:1px;right:2px;font-size:9px;line-height:1;pointer-events:none;z-index:1}
/* 星宿名（格子左下角） */

/* 大字模式 - 全局放大（zoom保持布局不变，无偏移） */
body.large-text{zoom:1.3}

/* 今天红圈呼吸动画 */
@keyframes tdPulse{0%,100%{box-shadow:0 0 0 2px var(--color-primary)}50%{box-shadow:0 0 0 4px var(--color-primary),0 0 6px rgba(198,40,40,.3)}}
.dg .c.td .n{animation:tdPulse 2s ease-in-out infinite}

/* "休"标签 */
.xiu-tag{position:absolute;top:1px;right:2px;font-size:var(--fs-micro);color:var(--color-text-white);background:var(--color-xiu-tag-bg);border-radius:2px;padding:0 3px;line-height:1.4;font-weight:600;z-index:1}
/* 班标签（调休上班日） */
.ban-tag{position:absolute;top:1px;left:2px;font-size:var(--fs-micro);color:var(--gray-600);background:var(--gray-100);border-radius:2px;padding:0 3px;line-height:1.4;font-weight:600;z-index:1}

/* ===== 日期卡片 ===== */
.dc{margin:var(--sp-8) 12px;background:var(--bg-card);border-radius:var(--radius-lg);padding:var(--sp-14);box-shadow:0 1px 3px rgba(0,0,0,.04)}
.dc-top{display:flex;gap:var(--sp-14);align-items:flex-start}
.dc .dd{font-size:var(--fs-hero);font-weight:700;color:var(--color-primary);line-height:1.1;min-width:56px;text-align:center;padding: var(--sp-6) var(--sp-4);background:var(--color-primary-light);border-radius:10px}
.dc-side{flex:1;min-width:0}
.dc .dl{font-size:var(--fs-body);color:var(--color-text-secondary);margin-top:0;letter-spacing:.3px}
.dc .dzodiac{font-size:var(--fs-small);color:var(--color-primary);margin-top:var(--sp-2)}
.dc .dg2{font-size:var(--fs-small);color:var(--color-text-muted);margin-top:var(--sp-2)}
.dc .dm{font-size:var(--fs-small);color:var(--color-primary);margin-top:var(--sp-2);font-weight:500}
.dc .dt{display:flex;flex-direction:column;gap:var(--sp-2);margin-top:var(--sp-10);padding-top:var(--sp-10);border-top:1px solid var(--color-border-light)}
.dc .dt .dt-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2) 4px}
.dc .dt .t{font-size:var(--fs-small);line-height:1.7}
.dc .dt .t.iy{color:var(--color-primary);font-weight:500}
.dc .dt .t.ij{color:var(--color-ji)}
.dc .db{display:inline-block;padding: 1px var(--sp-8);border-radius:4px;font-size:11px;font-weight:700;margin-right:var(--sp-4);vertical-align:middle}
.dc .db.ok{background:var(--color-primary-light);color:#C62828}
.dc .db.no{background:var(--gray-50);color:var(--gray-500)}
.dc .ib{margin:var(--sp-8) -14px 4px;padding: var(--sp-6) var(--sp-14);background:var(--gray-50);display:flex;justify-content:space-around;border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border)}
.dc .ib .bx{text-align:center}
.dc .ib .bx .bl{font-size:11px;color:var(--color-text-muted)}
.dc .ib .bx .bv{font-size:var(--fs-body);font-weight:500;color:var(--color-text-primary)}
.dc .ts{font-size:var(--fs-small);color:var(--color-text-muted);text-align:center;padding:var(--sp-4) 0}

/* ===== 黄历折叠区 ===== */
.hl-fd{margin:0 var(--sp-12) var(--sp-8);background:var(--bg-card);border-radius:var(--radius-lg);padding:0 var(--sp-14);overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,.04)}
.hl-fd .hl-tg{display:flex;justify-content:space-between;align-items:center;padding:6px 8px 6px 6px;cursor:pointer;user-select:none;border-bottom:1px solid var(--color-border-light)}
.hl-fd .hl-tg:last-child{border-bottom:none}
.hl-fd .hl-tg .hl-lb{font-size:var(--fs-h2);font-weight:600;color:var(--color-text-primary)}
.hl-fd .hl-tg .hl-ar{font-size:14px;color:var(--color-text-primary);transition:transform .25s ease}
.hl-fd .hl-tg .hl-ar.op{transform:rotate(180deg)}
.hl-fd .hl-bd{max-height:0;overflow:hidden;transition:max-height .35s}
.hl-fd .hl-bd.op{max-height:800px}
.hl-fd .hl-in{padding:4px 0 8px}
.hl-fd .hl-in .hl-lbl{font-size:var(--fs-body);color:var(--color-almanac-label);font-weight:600;margin:var(--sp-8) 0 3px}
.hl-fd .hl-in .hl-txt{font-size:var(--fs-body);color:var(--color-text-body);line-height:1.6;padding-left:var(--sp-2)}
/* 黄历详解平铺卡片 */
.hl-grd{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px 0 6px}
.hl-card{background:var(--gray-50);border-radius:var(--radius-sm);padding:5px 7px}
.hl-card .hl-cl{font-size:11px;color:var(--color-almanac-label);font-weight:600;margin-bottom:2px}
/* 节气养生卡片 */
.sh-card{padding:7px 0;border-bottom:1px solid var(--color-border-light)}
.sh-card:last-child{border-bottom:none}
.sh-card .sh-l{font-size:11px;color:var(--color-almanac-label);font-weight:600;margin-bottom:var(--sp-2)}
.sh-card .sh-v{font-size:var(--fs-small);color:var(--gray-700);line-height:1.6}
.sh-ai{font-size:var(--fs-xs);color:var(--color-primary);cursor:pointer;font-weight:500}
.sh-ai:active{opacity:.7}
/* 占卜摇签动画 */
@keyframes qShake{0%{transform:translateX(0)}15%{transform:translateX(-6px)rotate(-2deg)}30%{transform:translateX(5px)rotate(1deg)}45%{transform:translateX(-4px)rotate(-1deg)}60%{transform:translateX(3px)rotate(.5deg)}80%{transform:translateX(-2px)}100%{transform:translateX(0)}}
/* 占卜结果卡片 */
.hl-card .hl-ct{font-size:var(--fs-small);color:var(--color-text-body);line-height:1.5;word-break:break-word}
body.dark .hl-card{background:var(--gray-800)}
body.dark .hl-card .hl-ct{color:#ccc}

/* 时辰网格 - 一行12列 */
.sg{display:block;text-align:center;margin:var(--sp-4) 0;font-size:11px;font-weight:500}
.sg .s{padding:var(--sp-2) 0}
.sg .s .sz{font-size:var(--fs-small);font-weight:500;color:var(--color-text-body)}
.sg .s .sv{font-size:11px;padding:var(--sp-2) 0;font-weight:500}
.sg .s .sv.ji{color:var(--color-shichen-ji);font-weight:600}
.sg .s .sv.ping{color:var(--color-shichen-ping)}
.sg .s .sv.xiong{color:var(--color-shichen-xiong)}
.sg .s .sv.current{background:var(--color-shichen-current-bg);border-radius:6px;padding:3px 0;margin:calc(-1 * var(--sp-2)) 0;color:var(--color-primary);font-weight:700}
.sg .s .sv.current .sz{color:var(--color-primary);font-weight:700}
/* ===== Almanac inline-style utilities ===== */
.hl-body-text{font-size:var(--fs-small);line-height:1.7;color:var(--gray-700)}
.hl-alert-box{margin:6px 0;padding:8px;background:var(--color-primary-light);border:1px solid var(--color-primary);border-radius:6px;text-align:center;color:var(--color-primary);font-weight:600}
.hl-current-item{background:var(--color-primary-light);border-radius:4px;font-weight:600;color:var(--color-primary)}
.hl-soft-box{padding:6px;background:#FFF5F5;border-radius:6px;font-size:var(--fs-xs)}
.hl-primary-text{color:var(--color-primary);font-weight:600}
.hl-primary-link{color:var(--color-primary);cursor:pointer;font-weight:500}
.hl-source{color:var(--gray-500);font-size:var(--fs-tiny)}
.hl-splitter{margin:6px 0;border-top:1px dashed var(--color-border)}
/* 时辰盘横向（2行×6列） */
.st-grid{display:flex;flex-direction:column;gap:2px;margin:3px 0}
.st-row{display:grid;grid-template-columns:repeat(6,1fr);gap:2px}
.st-cell{padding:3px 1px;border-radius:4px;background:var(--gray-50);text-align:center;cursor:pointer;transition:background .12s}
.st-cell:active{background:var(--gray-100)}
.st-cell.cur{background:var(--color-primary-light);border:1px solid var(--color-primary)}
.st-top{display:flex;justify-content:center;align-items:center;margin-bottom:1px}
.st-ns{font-size:13px;font-weight:700;letter-spacing:0.5px}
.st-ns.ji{color:var(--color-shichen-ji)}
.st-ns.ping{color:var(--color-shichen-ping)}
.st-ns.xiong{color:var(--color-shichen-xiong)}
.st-ns.current{color:var(--color-primary);background:transparent}
.st-time-inline{font-size:8px;color:var(--color-text-light);white-space:nowrap;line-height:1.2}
body.dark .st-cell{background:#2a2a2a}
body.dark .st-cell.cur{background:rgba(198,40,40,0.2);border-color:var(--color-primary)}
body.dark .st-ns{color:#ccc}
body.dark .st-time-inline{color:#666}
/* 时辰盘表格化结束 */
body.dark .sg .s .sv.current{background:#2a1a2a;color:var(--color-primary)}
body.dark .sg .s .sv.current .sz{color:var(--color-primary)}

/* 神煞可点击 */
.shen-sha{cursor:pointer;padding:0 1px;border-bottom:1px dotted var(--color-text-light);transition:color .12s}
.shen-sha:hover{color:var(--color-primary);border-bottom-color:var(--color-primary)}
body.dark .shen-sha{border-bottom-color:var(--gray-700)}
body.dark .shen-sha:hover{color:var(--color-primary);border-bottom-color:var(--color-primary)}
/* ===== 信息卡片 ===== */
.fd{padding:0 var(--sp-12)}
.sc{background:var(--bg-card);border-radius:var(--radius-lg);margin-bottom:var(--sp-8);padding:var(--sp-14);box-shadow:0 1px 3px rgba(0,0,0,.04)}
/* 色块分区 */
.sc.block-weather{background:var(--bg-card)}
.sc.block-ai{background:var(--bg-card)}
.sc.block-life{background:var(--bg-card)}
.sc.block-fun{background:var(--bg-card)}
.sh{font-size:16px;font-weight:600;color:var(--color-text-primary);margin-bottom:var(--sp-8);display:flex;justify-content:space-between;align-items:center}

/* ===== 天气卡片 - 折叠式 ===== */
.d-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--sp-6)}
.d-city{font-size:var(--fs-small);font-weight:600;color:var(--color-text-body);cursor:pointer}
.d-more{font-size:11px;color:var(--color-text-muted);cursor:pointer}
/* 上屏核心区（常驻，可点击切换） */
.weather-core{display:flex;align-items:center;justify-content:space-between;cursor:pointer;user-select:none;padding:4px 0}
.weather-core:active{opacity:.7}
.weather-core-left{display:flex;align-items:center;gap:12px}
.weather-big-icon{font-size:42px;line-height:1}
.weather-temp-area{}
.weather-main-temp{font-size:38px;font-weight:700;color:var(--color-text-primary);line-height:1.1}
.wt-deg{font-size:16px;font-weight:400;color:var(--color-text-muted)}
.weather-sub-info{font-size:12px;color:var(--color-text-muted);margin-top:2px}
.weather-core-right{display:flex;flex-direction:column;align-items:flex-end;gap:3px}
.weather-alert{font-size:12px;font-weight:600;padding:2px 10px;border-radius:10px;background:rgba(255,255,255,.6)}
.weather-toggle{font-size:11px;color:var(--gray-400);transition:transform .25s ease;padding:3px 8px}
/* 折叠式卡片通用 */
.fold-h{display:flex;justify-content:space-between;align-items:center;cursor:pointer;user-select:none;padding:1px 0}
.fold-h:active{opacity:.7}
.fold-h>span{font-size:16px;font-weight:600;color:var(--color-text-primary)}
.fold-ar{font-size:13px;color:var(--color-text-primary);transition:transform .25s ease;padding:2px 4px}
.fold-ar.op{transform:rotate(180deg)}
.fold-b{max-height:0;overflow:hidden;transition:max-height .35s ease}
.fold-b.op{max-height:800px}
.weather-toggle.open{transform:rotate(180deg)}
/* 下屏折叠详情 */
.weather-detail{max-height:0;overflow:hidden;transition:max-height .35s ease}
.weather-detail.open{max-height:600px}
.weather-info-tags{display:flex;align-items:center;gap:8px;margin-top:6px;padding:8px 0 2px;border-top:1px solid var(--gray-100);font-size:12px;color:var(--color-text-muted)}
.wi-sep{color:var(--gray-300);font-size:10px}
.weather-advice{font-size:12px;color:var(--color-primary);text-align:center;margin-top:4px;padding:6px 0 2px;border-top:1px solid var(--gray-100)}
.weather-aqi{font-size:12px;color:var(--color-text-secondary);margin-top:4px;padding:4px 0}
.aqi-dot{display:inline-block;width:6px;height:6px;border-radius:50%;vertical-align:middle;margin-right:2px}
.aqi-row{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.aqi-sep{color:var(--gray-300);font-size:10px;margin:0 2px}
.weather-indices{display:flex;gap:8px;margin-top:4px;padding:6px 0;border-top:1px solid var(--gray-50);justify-content:space-around}
.wi-item{text-align:center;flex:1}
.wi-icon{font-size:18px}
.wi-name{font-size:9px;color:var(--color-text-muted);margin-top:1px}
.wi-val{font-size:11px;font-weight:600}
.weather-trend{margin-top:4px;border-top:1px solid var(--gray-100)}
.weather-trend-toggle{display:flex;justify-content:space-between;align-items:center;padding:6px 0;font-size:12px;cursor:pointer;color:var(--color-text-secondary);user-select:none}
.weather-trend-toggle:active{color:var(--color-primary)}
.weather-trend-body{display:none;overflow-x:auto;padding:4px 0;gap:4px}
.weather-trend-body.on{display:flex}
.th-item{flex-shrink:0;text-align:center;padding:4px 10px;min-width:44px}
.th-item.th-now{background:var(--gray-50);border-radius:8px}
.th-time{font-size:9px;color:var(--color-text-muted)}
.th-icon{font-size:16px;margin:2px 0}
.th-temp{font-size:12px;font-weight:600;color:var(--color-text-body)}
/* 未来预报 - 沿用旧样式 */
.d-fc{display:flex;gap:8px;margin-top:8px;padding-top:8px;border-top:1px solid var(--gray-100);overflow-x:auto;-webkit-overflow-scrolling:touch;scroll-snap-type:x mandatory;scrollbar-width:none;padding-bottom:4px}
.d-fc::-webkit-scrollbar{display:none}
.d-f{flex-shrink:0;width:58px;text-align:center;padding:6px 0;background:rgba(255,255,255,.6);border-radius:var(--radius-sm);scroll-snap-align:center}
.d-f .i{font-size:20px;margin-bottom:var(--sp-2)}
.d-f .t{font-size:var(--fs-body);font-weight:600;color:var(--color-text-body)}
.d-f .tl{font-size:11px;color:var(--color-text-muted);margin-top:1px}
body.dark .d-city{color:var(--gray-300)}
body.dark .weather-main-temp{color:var(--gray-800)}
body.dark .d-f{background:rgba(0,0,0,.15)}
body.dark .d-f .t{color:var(--gray-300)}
body.dark .weather-info-tags{color:var(--gray-500)}
body.dark .weather-alert{background:rgba(0,0,0,.2)}
.sm{font-size:var(--fs-small);color:var(--color-text-muted);font-weight:400;cursor:pointer;transition:color .12s}
.sm:active{color:var(--color-primary)}
.cs{display:flex;gap:var(--sp-16);margin:var(--sp-8) 0;font-size:var(--fs-small)}
.cs .ci{text-align:center}
.cs .ci .cl{color:var(--color-text-muted);font-size:11px}
.cs .ci .cv{font-weight:500}
/* 时辰指南 - 冲煞干支平铺 */
.cs2{display:flex;gap:var(--sp-6);margin:var(--sp-8) 0}
.ci2{flex:1;text-align:center;background:var(--gray-50);padding: var(--sp-6) var(--sp-4);border-radius:var(--radius-sm)}
.ci2 .cl{color:var(--color-text-muted);font-size:11px}
.ci2 .cv{font-weight:600;font-size:15px;margin-top:1px}
/* 宜忌并排 */
.yj-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-6);margin:var(--sp-6) 0}
.yj-block{background:var(--gray-50);border-radius:var(--radius-sm);padding: var(--sp-6) var(--sp-8)}
.yj-lb{font-size:var(--fs-small);font-weight:600;color:var(--color-primary);margin-bottom:3px}
.yj-lb.ji{color:var(--color-text-muted)}
body.dark .ci2{background:var(--gray-800)}
body.dark .yj-block{background:var(--gray-800)}
.ts2{display:inline-block;background:var(--color-primary-light);color:var(--color-primary);padding: 3px var(--sp-10);border-radius:4px;font-size:var(--fs-small);font-weight:500;margin:3px}
.ts2.on{background:var(--color-primary);color:var(--color-text-white)}
.tl{display:flex;flex-wrap:wrap;gap:var(--sp-4);margin:var(--sp-4) 0}
.tl .t{background:var(--bg-page);color:var(--gray-700);padding:var(--sp-2) 9px;border-radius:4px;font-size:var(--fs-small)}
.tl .t.iy{background:var(--color-primary-light);color:var(--color-primary)}
.hg{display:grid;grid-template-columns:1fr 1fr;gap:5px}
.hg .h{background:var(--gray-50);padding: var(--sp-6) var(--sp-10);border-radius:6px;font-size:var(--fs-small);color:var(--gray-700)}
.ww{display:flex;justify-content:space-between;align-items:center}
.ww .wt{font-size:36px;font-weight:300;color:var(--color-text-primary)}
.ww .wt small{font-size:16px}
.ww .wi{text-align:right;font-size:var(--fs-small);color:var(--color-text-secondary);line-height:1.6}
.fc{display:flex;gap:var(--sp-12);margin-top:var(--sp-8);padding-top:var(--sp-8);border-top:1px solid var(--color-border-light)}
.fc .fw{text-align:center;font-size:var(--fs-small);color:var(--color-text-secondary);flex:1}
.fc .fw .fwt{font-weight:500;color:var(--color-text-primary)}
.lr{display:flex;gap:var(--sp-12);margin-top:var(--sp-8)}
.lr .l{flex:1;text-align:center}
.lr .l .lv{font-size:17px;font-weight:600;color:var(--color-text-primary);margin-top:var(--sp-2)}
.lr .l .ll{font-size:var(--fs-xs);color:var(--color-text-muted)}
.fd2{font-size:var(--fs-body);color:var(--gray-700);line-height:1.6;margin-top:var(--sp-8);padding-top:var(--sp-8);border-top:1px solid var(--color-border-light)}
.qb{font-size:15px;color:var(--gray-700);line-height:1.7;text-align:center;padding:var(--sp-6) 0}
/* 占卜卡片 — 统一为白底品牌红 */
.oc{background:var(--bg-card);border-radius:var(--radius-lg);padding:var(--sp-16);text-align:center;margin-bottom:var(--sp-8);box-shadow:0 1px 3px rgba(0,0,0,.04)}
.oc .ot{font-size:15px;font-weight:600;color:var(--color-text-primary);margin-bottom:var(--sp-4)}
.oc .os{font-size:var(--fs-small);color:var(--color-text-muted);margin-bottom:var(--sp-10)}
.oc .ob{display:inline-block;background:var(--color-primary);color:var(--color-text-white);padding:8px 32px;border-radius:20px;font-size:14px;cursor:pointer;font-weight:600;border:none;transition:transform .1s,opacity .1s}
.oc .ob:active{transform:scale(.95);opacity:.85}

/* ===== 择吉页 ===== */
.ev-sc{overflow-x:auto;white-space:nowrap;padding:var(--sp-2) 0;-webkit-overflow-scrolling:touch}
.ev-r{display:inline-flex;gap:var(--sp-6)}
.ev-t{display:inline-block;padding: 5px var(--sp-14);border-radius:16px;font-size:var(--fs-body);color:var(--color-text-secondary);background:var(--bg-page);cursor:pointer;white-space:nowrap;transition:all .12s}
.ev-t:active{background:var(--gray-50)}
.ev-t.on{color:var(--color-text-white);background:var(--color-primary)}
.zj-bg{display:inline-block;background:var(--color-primary);color:var(--color-text-white);font-size:var(--fs-micro);padding:0 var(--sp-4);border-radius:6px;font-weight:600;line-height:14px;margin-top:0}
.zj-score-line{display:flex;gap:2px;justify-content:center;flex-wrap:wrap;margin-top:1px}
.zj-sc{display:inline-block;font-size:9px;padding:0 4px;border-radius:4px;line-height:14px;font-weight:600}
.zj-sc-ji{background:#C62828;color:#fff}
.zj-chong{opacity:.45;pointer-events:none}
.zf-row{display:flex;align-items:center;gap:4px;font-size:12px;padding:2px 0}
.zf-label{font-weight:600;color:#C62828;white-space:nowrap;margin-right:2px}
.zf-clear{color:var(--gray-500);cursor:pointer;font-size:12px;padding:0 2px}
.zf-clear.zf-hidden{display:none}
.zf-options{display:flex;gap:2px;flex-wrap:nowrap}
.zf-opt{display:inline-block;padding:3px 6px;border-radius:10px;cursor:pointer;font-size:13px;color:#555;transition:all .15s}
.zf-opt.on{background:#C62828;color:#fff}
.zf-opt:active{opacity:.7}
.zf-hint{font-size:10px;color:var(--gray-400);margin-top:2px;padding-left:2px}
.zj-c{text-align:center;padding:4px 0;font-size:var(--fs-body);color:var(--gray-700)}
.zj-c .n{font-size:18px;font-weight:700;color:var(--color-primary)}
#zj2Info{font-size:var(--fs-small);line-height:1.7;color:var(--gray-700);border-top:1px solid var(--color-border);animation:fadeIn .2s ease}
#zj2Info .zj2-i-t{font-size:15px;font-weight:700;color:var(--color-primary);margin-bottom:var(--sp-4)}
#zj2Info .zj2-i-l{color:var(--color-text-muted);font-size:var(--fs-xs)}
.dark #zj2Info{color:var(--gray-400);border-color:var(--gray-800)}
.dark #zj2Info .zj2-i-l{color:var(--gray-600)}
@keyframes fadeIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}

/* ===== AI页 ===== */
.ai-l{margin:0 var(--sp-10)}
.ai-c{background:var(--bg-card);border-radius:var(--radius-lg);padding:var(--sp-12) 14px;margin-bottom:var(--sp-8);display:flex;align-items:center;gap:var(--sp-10);cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.04)}
.ai-c:active{background:var(--gray-50)}
.ai-c .ai{font-size:26px;width:34px;text-align:center;flex-shrink:0}
.ai-c .ai-i{flex:1}
.ai-c .ai-i .ai-n{font-size:16px;font-weight:600}
.ai-c .ai-i .ai-d{font-size:var(--fs-small);color:var(--color-text-muted);margin-top:var(--sp-2)}
.ai-s{display:none;position:fixed;top:0;left:0;right:0;bottom:58px;background:var(--bg-page);z-index:50;overflow-y:auto}
.ai-s.on{display:block}
.ai-sh{display:flex;align-items:center;padding: var(--sp-10) var(--sp-14);background:var(--bg-card);border-bottom:1px solid var(--color-border);position:sticky;top:0;z-index:10}
.ai-bk{font-size:22px;color:var(--color-primary);cursor:pointer;padding:0 var(--sp-4);line-height:1}
.ai-st{font-size:var(--fs-h1);font-weight:700;margin-left:var(--sp-4);flex:1}
.ai-s{padding:0}
.ai-sb{padding: var(--sp-16) var(--sp-16)}

/* ===== AI 决策助手 ===== */
.ai-input{width:100%;border:none;background:var(--bg-input);border-radius:var(--radius-sm);padding: 9px var(--sp-12);font-size:var(--fs-small);color:var(--color-text-body);outline:none;box-sizing:border-box;margin-bottom:var(--sp-6)}
.ai-input:focus{background:var(--gray-100)}
.ai-btns{display:flex;flex-wrap:wrap;gap:var(--sp-6)}
.ai-btn{display:inline-block;background:var(--color-primary);color:var(--color-text-white);padding: var(--sp-4) var(--sp-12);border-radius:4px;font-size:var(--fs-xs);cursor:pointer;transition:opacity .12s;user-select:none}
.ai-btn:active{opacity:.8}
.ai-func-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin-top:var(--sp-4);width:100%}
/* AI快捷3×2网格（首页AI智能工具） */
.ai-quick-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:var(--sp-6)}
.ai-qb{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:10px 4px;background:var(--bg-page);border-radius:var(--radius-sm);cursor:pointer;transition:background .12s,border-color .12s;border:1px solid var(--color-border);user-select:none}
.ai-qb:active{background:var(--color-primary-light);border-color:var(--color-primary)}
.ai-qi{font-size:18px;line-height:1.4}
.ai-qn{font-size:11px;color:var(--color-text-secondary);font-weight:500;margin-top:2px;line-height:1.2}
.ai-func-card{text-align:center;padding:10px 2px;background:var(--bg-card);border:1px solid var(--color-border);border-radius:8px;cursor:pointer;transition:border .12s}
.ai-func-card:active{border-color:var(--color-primary)}
.ai-func-icon{font-size:20px;line-height:1.2}
.ai-func-name{font-size:11px;color:var(--gray-700);margin-top:2px;font-weight:500}
.ai-result{font-size:var(--fs-small);color:var(--color-text-secondary);margin-top:var(--sp-6);display:none}
.fg{margin-bottom:var(--sp-14)}
.fl{font-size:var(--fs-body);color:var(--color-text-secondary);font-weight:600;display:block;margin-bottom:3px}
/* ===== 统一表单组件 ===== */
.fi{width:100%;height:40px;border:1px solid var(--color-text-light);border-radius:var(--radius-sm);padding:0 var(--sp-12);font-size:15px;outline:none;background:var(--bg-card);transition:border .15s}
.fi:focus{border-color:var(--color-primary)}
/* 统一日期/时间输入框，与文本输入框视觉一致 */
input[type="date"].fi,input[type="time"].fi{-webkit-appearance:none;appearance:none;line-height:40px}
input[type="date"].fi::-webkit-calendar-picker-indicator,
input[type="time"].fi::-webkit-calendar-picker-indicator{opacity:.5;padding:0;margin-left:2px;cursor:pointer}
input[type="date"].fi::-webkit-datetime-edit{padding:0}
.fs{width:100%;height:40px;border:1px solid var(--color-text-light);border-radius:var(--radius-sm);padding:0 var(--sp-8);font-size:var(--fs-body);outline:none;background:var(--bg-card)}
.fr{display:flex;gap:var(--sp-8)}
.fr .fg{flex:1}
/* 表单分割线 */
.form-divider{margin:var(--sp-6) 0;border-top:1px solid var(--color-border)}
/* 表单按钮行 */
.form-btn-row{display:flex;gap:6px;margin-top:4px}
.form-btn-row .btn{flex:1}
.btn{width:100%;height:46px;background:var(--color-primary);color:var(--color-text-white);font-size:15px;font-weight:600;border:none;border-radius:23px;cursor:pointer;margin-top:var(--sp-6);transition:transform .1s,opacity .1s}
.btn:active{transform:scale(.97);opacity:.85}
.btn.g2{background:var(--color-text-secondary)}
.btn.g3{background:var(--color-text-muted)}

/* ===== AI子面板统一输入框 ===== */
.ai-row{display:flex;gap:8px;margin-bottom:10px;align-items:center}
.ai-row .ai-label{font-size:var(--fs-xs);color:var(--color-text-secondary);white-space:nowrap}
.ai-row .ai-unit{font-size:var(--fs-tiny);color:var(--gray-500)}
.ai-row .ai-y{height:30px;font-size:var(--fs-small);flex:1.2;min-width:56px}
.ai-row .ai-m,.ai-row .ai-d{height:30px;font-size:var(--fs-small);flex:1;min-width:50px}
.ai-row .ai-h{height:30px;font-size:var(--fs-small);flex:1;min-width:44px}
.ai-row .ai-item{height:30px;font-size:var(--fs-small);flex:1;min-width:50px}
.ai-btn-primary{width:100%;padding:7px;font-size:var(--fs-small);height:34px}
.ar{border-top:1px solid var(--color-border);margin-top:var(--sp-8);padding-top:var(--sp-8);display:none}
.ar.on{display:block}
.art{font-size:var(--fs-small);color:var(--gray-700);line-height:1.6}
.art-c{background:#f9f5f0;border-radius:var(--radius-sm);padding:var(--sp-12);margin-bottom:var(--sp-8);font-size:var(--fs-small);line-height:1.6}
.art-c .lb{display:inline-block;background:var(--color-primary-light);color:var(--color-primary);padding: 1px 7px;border-radius:3px;font-size:11px;font-weight:600;margin-right:3px}
.art-c .lb.g{background:#e8f5e9;color:var(--color-success)}

/* ===== AI取名面板 ===== */
.nm-surnames{display:grid;grid-template-columns:repeat(9,1fr);gap:3px;margin-top:2px}
.nm-sn{text-align:center;padding:3px 0;font-size:12px;color:var(--gray-700);background:var(--bg-card);border:1px solid #eee;border-radius:6px;cursor:pointer;transition:all .12s}
.nm-sn:active{background:var(--gray-50)}
.nm-sn.on{background:var(--color-primary);color:var(--color-text-white);border-color:var(--color-primary)}
.nm-orient{display:flex;flex-direction:column;gap:4px}
.nm-og{display:grid;grid-template-columns:repeat(5,1fr);gap:3px}
.nm-ot{text-align:center;padding:5px 2px;font-size:var(--fs-xs);color:var(--color-text-secondary);background:var(--bg-card);border:1px solid var(--color-border);border-radius:14px;cursor:pointer;transition:all .12s}
.nm-ot:active{background:var(--gray-50)}
.nm-ot.on{background:var(--color-primary);color:var(--color-text-white);border-color:var(--color-primary);font-weight:600}
.nm-ot-more{font-size:var(--fs-xs);color:var(--color-primary);cursor:pointer;text-align:right;padding:2px 0 0}
.nm-gender{display:flex;gap:var(--sp-6);padding:3px;background:var(--gray-100);border-radius:22px}
.nm-gb{flex:1;text-align:center;padding:8px 12px;border-radius:20px;font-size:14px;color:var(--color-text-secondary);background:var(--bg-page);cursor:pointer;transition:all .12s;border:1px solid transparent}
.nm-gb:active{background:var(--gray-50)}
.nm-gb.on{background:var(--color-primary);color:var(--color-text-white);font-weight:600}
.zs-tags{display:block}
.zs-btn{background:var(--bg-card);color:var(--color-text-secondary);border:1px solid var(--color-border);transition:all .12s}
.zs-btn:active{background:var(--gray-100)}
.zs-btn.on{background:var(--color-primary);color:var(--color-text-white);border-color:var(--color-primary);font-weight:600}
.nm-birth-module{background:var(--gray-50);border-radius:10px;padding:var(--sp-12) 10px;margin-bottom:var(--sp-10)}
.nm-birth-form{display:flex;gap:var(--sp-8)}
.nm-birth-form .fg{flex:1;margin-bottom:0}
.nm-birth-form .fi,.nm-birth-form .fs{height:38px;font-size:13px}
.nm-bazi-preview{background:var(--bg-card);border-radius:6px;padding: var(--sp-6) var(--sp-10);font-size:13px;color:var(--gray-600);margin-top:var(--sp-8);text-align:center;border:1px solid #eee}
.nm-bazi-preview span{color:var(--color-primary);font-weight:600}
.nm-loading{text-align:center;padding:var(--sp-12);color:var(--gray-500);font-size:13px}
.nm-card{display:flex;align-items:center;background:#fff;border:1px solid #f0f0f0;border-radius:10px;padding:8px 10px;margin-bottom:6px;position:relative}
.nm-card:active{border-color:#C62828}
.nm-card-left{flex:1;min-width:0}
.nm-card-name{font-size:15px;font-weight:700;color:#222}
.nm-card-wuxing{display:flex;gap:2px;margin:2px 0}
.nm-card-mean{font-size:11px;color:var(--gray-500);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nm-card-right{text-align:center;margin-right:24px;min-width:36px}
.nm-card-score{font-size:18px;font-weight:700;line-height:1}
.nm-card-sclabel{font-size:9px;font-weight:600}
.nm-card-wuge{display:flex;gap:2px;flex-wrap:wrap;justify-content:center;margin-top:1px}
.nm-card-fav{font-size:18px;cursor:pointer;opacity:.6;transition:all .12s;display:inline-block}
.nm-card-fav:active{transform:scale(1.2)}
.nm-wx-info{margin:4px 0 6px;padding:6px 8px;background:var(--gray-50);border-radius:6px}

/* ===== 随喜打赏 ===== */
.dn-btn{display:flex;align-items:center;justify-content:center;padding:10px 6px;background:var(--gray-50);border-radius:10px;cursor:pointer;font-size:15px;font-weight:600;color:#C62828;transition:all .12s;user-select:none}
.dn-btn:active{background:#C62828;color:#fff;transform:scale(.95)}
.dn-btn.dn-custom{background:var(--color-primary-light);border:1px dashed #C62828;color:#C62828;font-size:13px}
body.dark .dn-btn{background:var(--gray-800);color:var(--color-primary)}
body.dark .dn-btn:active{background:var(--color-primary);color:var(--color-text-white)}
/* 打赏入口条 */
.dn-entry{display:flex;align-items:center;justify-content:center;gap:6px;padding:10px;margin:8px 10px;background:linear-gradient(135deg,#FFF5F5,var(--color-primary-light));border-radius:10px;cursor:pointer;font-size:13px;color:#C62828;transition:opacity .12s}
.dn-entry:active{opacity:.7}
body.dark .dn-entry{background:rgba(198,40,40,0.15)}
.nm-item{display:flex;justify-content:space-between;align-items:center;padding: var(--sp-8) var(--sp-10);border-bottom:1px solid var(--gray-100)}
.nm-item:last-child{border-bottom:none}
.nm-item .nm-n{font-size:16px;font-weight:600;color:var(--color-primary)}
.nm-item .nm-m{font-size:12px;color:var(--gray-700);margin-left:var(--sp-6)}
.nm-item .nm-a{font-size:14px;cursor:pointer;color:var(--gray-500);padding:var(--sp-2)}
.nm-item .nm-a:active{color:var(--color-primary)}
.nm-card-hdr{display:flex;align-items:center;padding:6px 10px;border-bottom:1px solid var(--color-border);margin:var(--sp-10) 0 var(--sp-6)}
body.dark .nm-sn{background:var(--gray-800);border-color:var(--gray-700);color:var(--gray-300)}
body.dark .nm-sn.on{background:var(--color-primary);border-color:var(--color-primary);color:#fff}

/* ===== utility: settings/vip shared classes ===== */
.txt-center{text-align:center}
.txt-title-lg{font-size:16px;font-weight:700}
.txt-title{font-size:15px;font-weight:600}
.txt-body{font-size:13px}
.txt-body-muted{font-size:13px;color:var(--color-text-secondary)}
.txt-muted{font-size:12px;color:var(--color-text-muted)}
.txt-tiny-muted{font-size:11px;color:var(--color-text-muted)}
.txt-tiny-light{font-size:11px;color:var(--color-text-light)}
.price-lg{font-weight:700;color:var(--color-primary);font-size:16px}
.vip-card{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;cursor:pointer;border:1px solid var(--color-border);border-radius:10px}
.vip-card-lucky{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;cursor:pointer;border:1px dashed var(--color-primary);border-radius:10px;margin-bottom:6px;background:linear-gradient(135deg,var(--color-primary-light),var(--color-primary-light))}
.vip-card-mb{margin-bottom:6px}
.vip-header{text-align:center;padding:10px}
.vip-icon{font-size:36px;margin-bottom:8px}
.vip-title{font-size:17px;font-weight:700;color:var(--color-primary);margin-bottom:4px}
.vip-desc{font-size:13px;color:var(--color-text-secondary);margin-bottom:4px}
.vip-plan-bg{background:var(--gray-50);border-radius:8px;padding:0;margin:10px 0;overflow:hidden}
.vip-footnote{font-size:11px;color:var(--color-text-light);text-align:center}
.vip-card-inner{display:flex;justify-content:space-between;align-items:center}
.vip-label{font-size:16px}
.vip-sub{font-size:11px;color:var(--color-text-muted);margin-top:2px}

/* ===== settings page ===== */
.st-card{background:var(--bg-card);border-radius:var(--radius-lg);margin-bottom:var(--sp-8);padding:var(--sp-14);box-shadow:0 1px 3px rgba(0,0,0,.04)}
.st-row{display:flex;justify-content:space-between;align-items:center}
.st-row-mb{margin-bottom:6px}
.st-p10{padding:10px 14px}
.st-p12{padding:12px 14px}
.st-m4{margin:4px 10px 6px}
.st-m0{margin:0 10px 6px}
.st-fs16{font-size:16px}
.st-fs12{font-size:12px}
.st-fs11{font-size:11px}
.st-fw700{font-weight:700}
.st-fw600{font-weight:600}
.st-c333{color:var(--color-text-body)}
.st-c999{color:var(--color-text-muted)}
.st-c628{color:var(--color-primary)}
.st-gap6{gap:6px}
.st-flex{display:flex}
.st-flex1{flex:1}
.st-mla{margin-left:auto}
.st-ccc{color:var(--color-text-light)}
.st-pointer{cursor:pointer}
.st-border{border:1px solid var(--color-border)}
.st-border0{border:none}
.st-radius10{border-radius:10px}
.st-radius12{border-radius:12px}
.st-bg5{background:var(--gray-50)}
.st-pad0{padding:0}
.st-overflow{overflow:hidden}
.st-mt2{margin-top:2px}
.st-mt4{margin-top:4px}
.st-mb4{margin-bottom:4px}
.st-mr4{margin-right:4px}

/* ===== reminder tab ===== */
.rem-tabs{display:flex;gap:0;margin-bottom:8px;border-radius:8px;overflow:hidden;border:1px solid var(--color-border)}
.rem-tab{flex:1;text-align:center;padding:6px 0;cursor:pointer;background:var(--gray-50);color:var(--color-text-secondary);transition:all .12s}
.rem-tab.rem-on{background:var(--color-primary);color:#fff;font-weight:600}
.rem-tab:not(.rem-on):hover{background:var(--gray-100)}

body.dark .nm-gb{background:var(--gray-800);color:var(--gray-500)}
body.dark .nm-gb.on{background:var(--color-primary);color:#fff}
body.dark .nm-birth-module{background:#1a2a3e}
body.dark .nm-bazi-preview{background:#16213e;border-color:var(--gray-800);color:var(--gray-500)}
body.dark .nm-item{border-color:var(--gray-800)}
body.dark .nm-card{background:#1a2a3e;border-color:var(--gray-800)}
body.dark .nm-card-name{color:var(--gray-200)}
body.dark .nm-card-mean{color:var(--gray-500)}
body.dark .nm-wx-info{background:#16213e}
body.dark .weather-aqi{color:var(--gray-500)}
body.dark .weather-indices{border-top-color:var(--gray-800)}
body.dark .wi-name{color:var(--gray-600)}
body.dark .wi-val{color:var(--gray-300)}
body.dark .weather-trend{border-top-color:var(--gray-800)}
body.dark .weather-trend-toggle{color:var(--gray-500)}
body.dark .weather-trend-toggle:active{color:var(--color-primary)}
body.dark .th-item.th-now{background:rgba(255,255,255,.05)}
body.dark .th-temp{color:var(--gray-300)}
body.dark .th-time{color:var(--gray-600)}
body.dark .zf-opt{border-color:var(--gray-700);color:var(--gray-400)}
body.dark .zf-hint{color:var(--gray-600)}
body.dark .zj-sc-p{background:var(--gray-600)}
body.dark .zj-sc-chong{background:var(--gray-700)}
body.dark .nm-item .nm-m{color:var(--gray-500)}
body.dark .nm-card-hdr{border-bottom-color:var(--gray-700)}
body.dark .sk-b{background:linear-gradient(90deg,#333 25%,#444 50%,#333 75%);background-size:400px 100%}

/* ─── 骨架屏（加载占位） ─── */
@keyframes shimmer{0%{background-position:-200px 0}100%{background-position:200px 0}}
.sk{display:none;padding:14px;gap:12px}
.sk.on{display:flex;flex-direction:column}
.sk-b{height:16px;border-radius:8px;background:linear-gradient(90deg,#eee 25%,#f5f5f5 50%,#eee 75%);background-size:400px 100%;animation:shimmer 1.2s infinite}
.sk-b.w60{width:60%}.sk-b.w40{width:40%}.sk-b.w80{width:80%}.sk-b.h40{height:40px}.sk-b.h80{height:80px}

/* ─── 空状态 ─── */
.empty-state{text-align:center;padding:20px 10px;color:#ccc;font-size:13px;line-height:1.6}
.empty-state .empty-icon{font-size:32px;margin-bottom:6px}
.empty-state .empty-text{color:var(--gray-400)}

/* ===== 我的页 ===== */
.st-r{display:flex;justify-content:space-between;align-items:center;padding:var(--sp-10) 0;font-size:15px;cursor:pointer}
.st-r+.st-r{border-top:1px solid var(--color-border)}
.st-l{color:var(--color-text-body)}
.st-v{font-size:var(--fs-xs);color:var(--color-text-muted)}
.bdg{background:var(--color-primary);color:var(--color-text-white);font-size:var(--fs-micro);padding: 1px var(--sp-6);border-radius:7px}
.rmd-h{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-8) 0;border-bottom:1px solid var(--color-border-light)}
.rmd-h .ri{font-size:20px}
.rmd-h .rt{font-size:15px;font-weight:600;flex:1}
.td-i{display:flex;align-items:center;gap:var(--sp-8);padding:var(--sp-8) 0;border-bottom:1px solid var(--bg-page);font-size:var(--fs-body)}
.td-i .ch{width:20px;height:20px;border-radius:50%;border:2px solid var(--color-text-light);cursor:pointer;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:11px}
.td-i .ch.dn{background:var(--color-success);border-color:var(--color-success);color:var(--color-text-white)}
.td-i .tx{flex:1}
.td-i .tx.dn{text-decoration:line-through;color:var(--color-text-light)}
.td-i .dl{color:var(--color-primary);cursor:pointer;opacity:.5;font-size:15px}
.td-a{display:flex;gap:var(--sp-8);margin-top:var(--sp-6)}
.td-i2{flex:1;height:40px;border:1px solid var(--color-text-light);border-radius:var(--radius-sm);padding:0 var(--sp-12);font-size:var(--fs-body);outline:none;background:var(--bg-card)}
/* 按钮缩小 */
.td-b{height:28px;padding:0 var(--sp-14);background:var(--color-primary);color:var(--color-text-white);border:none;border-radius:14px;font-size:var(--fs-xs);font-weight:600;cursor:pointer}
.rmd-n{font-size:var(--fs-small);color:var(--gray-700);padding:var(--sp-6) 0;border-bottom:1px solid var(--bg-page);display:flex;align-items:center;gap:var(--sp-8)}
.rmd-n .rd{font-size:10px;color:var(--color-primary);background:var(--color-primary-light);padding: 1px var(--sp-6);border-radius:4px}
.pg2{}
.pg2 .ph{font-size:11px;color:var(--color-text-muted);padding:var(--sp-2) 0;font-weight:600}
.pg2 .pd{width:28px;height:28px;border-radius:50%;margin:var(--sp-2) auto;font-size:var(--fs-xs);line-height:28px;color:var(--color-text-light)}
.pg2 .pd.om{color:var(--color-other-month)}
.pg2 .pd.p{background:var(--color-primary);color:var(--color-text-white)}
.pg2 .pd.o{background:var(--color-success);color:var(--color-text-white)}
.pg2 .pd.t{border:2px solid var(--color-primary);line-height:24px;color:var(--color-text-body)}

/* 颜色工具类（替代JS内联颜色赋值） */
.clr-primary-bg{background:var(--color-primary)}
.clr-primary-text{color:var(--color-primary)}
.clr-inactive-bg{background:#f5f5f5}
.clr-white-text{color:#fff}
.clr-text-body{color:#333}
.clr-text-secondary{color:#666}
.clr-text-muted{color:#888}
.clr-border-light{border-top-color:#f5f5f5}

/* 统一点击反馈 */
[data-action]:active, .st-r:active, .ci-b:active{cursor:pointer}
[data-action]:active{opacity:.7}
.st-r:active{background:var(--gray-50)}

/* VIP 徽标 */
.vip-badge{display:inline-block;font-size:9px;background:var(--color-gold);color:#fff;padding:1px 5px;border-radius:3px;margin-left:4px;vertical-align:middle;font-weight:600;line-height:1.4}

/* ===== 底部Tab ===== */
.tb{position:fixed;bottom:0;left:0;right:0;background:var(--bg-card);display:flex;border-top:1px solid var(--color-border);z-index:200;padding:5px 0 env(safe-area-inset-bottom)}
.tb .ti{flex:1;text-align:center;padding:var(--sp-2) 0;font-size:var(--fs-xs);color:var(--color-tab-off);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:color .2s}
.tb .ti .ii{font-size:24px;display:block;margin-bottom:3px;line-height:1}
.tb .ti .tab-icon{width:22px;height:22px;display:block;margin:0 auto;transition:transform .15s}
.tb .ti .tab-label{font-size:var(--fs-tiny);line-height:1.2;display:block;letter-spacing:.5px;transition:color .2s}
.tb .ti.on{color:var(--color-tab-on)}
.tb .ti.on .tab-label{font-weight:600}
.tb .ti:active .tab-icon{transform:scale(.9)}

/* ======== 弹窗 ======== */
/* 间距标准：header: sp-10 sp-14 | body: sp-16 sp-16 | AI面板同 */
.mp{display:none;position:fixed;top:0;left:0;right:0;bottom:58px;background:var(--bg-page);z-index:150;overflow-y:auto}
.mh{display:flex;align-items:center;padding: var(--sp-10) var(--sp-14);background:var(--bg-card);border-bottom:1px solid var(--color-border);position:sticky;top:0;z-index:10}
.mb{font-size:22px;color:var(--color-primary);cursor:pointer;padding:0 var(--sp-4);line-height:1}
.mt{font-size:var(--fs-h1);font-weight:700;margin-left:var(--sp-4);flex:1}
.mbd{padding: var(--sp-16) var(--sp-16)}

/* ===== 深色模式 ===== */
body.dark{background:var(--bg-page);color:var(--gray-200)}
body.dark .header{background:var(--color-primary-dark)}
body.dark .mn,body.dark .cw,body.dark .dc,body.dark .sc,body.dark .tb,body.dark .hl-fd,body.dark .ai-c,body.dark .ai-sh,body.dark .ai-s,body.dark .mh,body.dark .mp,body.dark .ci-bar{background:#16213e}
body.dark .dg .c .n{color:var(--gray-300)}
body.dark .dg .c.td .n{color:var(--color-text-white);background:var(--color-primary)}
body.dark .dc .ib{background:#1a2a3e}
body.dark .dc .ib .bx .bv{color:var(--gray-200)}
body.dark .sg .s .sz{color:var(--gray-300)}
body.dark .mn .mt,body.dark .sh{color:var(--gray-200)}
body.dark .tb{background:#16213e;border-color:#2a2a3e}
body.dark .tb .ti{color:var(--gray-600)}
body.dark .tb .ti.on{color:var(--color-primary)}
body.dark .fi,body.dark .fs{border-color:var(--gray-800);background:#1a1a2e;color:var(--gray-200)}
body.dark .ar{border-color:var(--gray-800)}
body.dark .art-c{background:#1a2a3e}
body.dark .hg .h,body.dark .tl .t,body.dark .ev-t,body.dark .fc{border-color:var(--gray-800)}
body.dark .ev-t{background:#1a2a3e;color:var(--gray-500)}
body.dark .ev-t.on{background:var(--color-primary);color:var(--color-text-white)}
body.dark .zj-c .zj-c-l{color:var(--gray-500)}
body.dark .mn .mb2{color:var(--color-primary);border-color:var(--color-primary);background:#16213e}
body.dark .ci-bar .ci-b{color:var(--gray-400)}
body.dark .ci-bar .ci-d{color:var(--color-primary)}
body.dark .qb{color:var(--gray-500)}
body.dark .dc .dd{color:var(--gray-200)}
body.dark .ww .wt{color:var(--gray-200)}
body.dark .ww .wi{color:var(--gray-500)}
body.dark .fc .fw .fwt{color:var(--gray-300)}
body.dark .lr .l .lv{color:var(--gray-200)}
body.dark .sm{color:var(--gray-500)}
body.dark .cs .ci .cv{color:var(--gray-200)}
body.dark .hl-tg .hl-lb{color:var(--gray-200)}
body.dark .hl-in .hl-txt{color:var(--gray-300)}
body.dark .td-i2{background:#1a1a2e;border-color:var(--gray-800);color:var(--gray-200)}
body.dark .st-l{color:var(--gray-200)}
body.dark .ai-st,body.dark .mt{color:var(--gray-200)}
body.dark .art{color:var(--gray-300)}
body.dark .ai-c:active{background:#1a2a3e}
body.dark .ma{color:var(--color-primary)}
body.dark .ma:active{background:#1a2a3e}
body.dark .dg .c.sl .n{color:var(--color-primary)}
body.dark .dg .c.sl .n:after{background:var(--color-primary)}
/* 深色模式 - 色块覆盖 */
body.dark .sc.block-weather{background:linear-gradient(135deg,#1a2a3e,#16213e)}
body.dark .sc.block-ai{background:linear-gradient(135deg,#1e1a2e,#16213e)}
body.dark .sc.block-life{background:linear-gradient(135deg,#1a2a2e,#16213e)}
body.dark .sc.block-fun{background:linear-gradient(135deg,#1e1a2e,#16213e)}

/* ===== v5.3 微动效增强 ===== */
/* Tab切换淡入淡出 */
.pg {
  transition: opacity .2s ease;
}
.pg.on {
  opacity: 1;
}
.pg:not(.on) {
  opacity: 0;
  pointer-events: none;
}

/* 弹窗缩放 */
.mp {
  animation: modalFadeIn .2s ease;
}
@keyframes modalFadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}
.mh, .mbd {
  animation: modalSlideIn .25s ease;
}
@keyframes modalSlideIn {
  from { transform: scale(.92) translateY(8px); opacity: 0; }
  to { transform: scale(1) translateY(0); opacity: 1; }
}

/* AI子面板滑入 */
.ai-s {
  animation: aiSlideIn .25s ease;
}
@keyframes aiSlideIn {
  from { transform: translateX(30px); opacity: 0; }
  to { transform: translateX(0); opacity: 1; }
}

/* 日历格子悬停 */
.dg .c {
  transition: transform .15s ease, box-shadow .15s ease;
}
.dg .c:active {
  transform: scale(.95);
}

/* 底部Tab切换 */
.tb .ti {
  transition: color .2s ease;
}
.tb .ti .tab-icon {
  transition: transform .2s ease;
}
.tb .ti.on .tab-icon {
  transform: scale(1.1);
}

/* 弹窗内容滚动条美化 */
.mbd::-webkit-scrollbar,.ai-sb::-webkit-scrollbar {
  width: 3px;
}
.mbd::-webkit-scrollbar-thumb,.ai-sb::-webkit-scrollbar-thumb {
  background: #ddd;
  border-radius: 2px;
}

/* 折叠箭头动画 */
.hl-ar {
  transition: transform .2s ease;
}
.hl-ar.op {
  transform: rotate(90deg);
}

/* 卡片点击反馈 */
.hl-card, .ai-c, .st-r, .ma {
  transition: background .15s ease;
}
.hl-card:active, .ai-c:active, .st-r:active, .ma:active {
  background: var(--gray-50) !important;
}

/* ─── 节气限定报告 ─── */
.block-season-report {
  border-left: 3px solid var(--color-primary);
}
.sr-card {
  padding: 8px 0;
}
.sr-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
  margin: 6px 0;
}
.sr-item {
  padding: 6px 8px;
  background: var(--gray-50);
  border-radius: 6px;
  font-size: 12px;
  line-height: 1.5;
}
.sr-item .sr-lbl {
  font-size: 11px;
  color: var(--gray-500);
  margin-bottom: 2px;
}
.sr-item .sr-val {
  color: var(--color-text-body);
  font-weight: 500;
}
.sr-section {
  margin: 8px 0;
  padding: 6px 8px;
  background: var(--color-gold-bg);
  border-radius: 6px;
  font-size: 12px;
  line-height: 1.6;
  color: var(--color-text-secondary);
}
.sr-section strong {
  color: #C62828;
}

/* 分隔线 */
.ai-divider{height:1px;background:var(--color-border);margin:var(--sp-14) 0}

/* ===== AI页实用工具类 ===== */
/* 间距 */
.ma4  { margin: 4px; }
.mt2  { margin-top: 2px; }
.mt6  { margin-top: 6px; }
.mt8  { margin-top: 8px; }
.mb2  { margin-bottom: 2px; }
.mb4  { margin-bottom: 4px; }
.mb6  { margin-bottom: 6px; }
.mb8  { margin-bottom: 8px; }
.mr2  { margin-right: 2px; }
/* 字号 */
.f10 { font-size: 10px; }
.f11 { font-size: 11px; }
.f12 { font-size: 12px; }
.f13 { font-size: 13px; }
.f14 { font-size: 14px; }
.f15 { font-size: 15px; }
/* 字重 */
.fw6 { font-weight: 600; }
.fw7 { font-weight: 700; }
/* 颜色 */
.c555  { color: var(--gray-700); }
.c666  { color: var(--gray-600); }
.c999  { color: var(--gray-500); }
.cp    { color: var(--color-primary); }
.c333  { color: var(--gray-800); }
.cdd   { color: var(--gray-150); }
/* 布局 */
.fx1  { flex: 1; }
.fxg4 { display: flex; gap: 4px; }
.fxg6 { display: flex; gap: 6px; }
.fxww { display: flex; flex-wrap: wrap; }
/* 常用组合 */
.f10c999  { font-size: 10px; color: var(--gray-500); }
.f11c666  { font-size: 11px; color: var(--gray-600); }
.f11c999  { font-size: 11px; color: var(--gray-500); }
.f13lh17  { font-size: 13px; line-height: 1.7; }
.f13lh17c555 { font-size: 13px; line-height: 1.7; color: var(--gray-700); }
.f12fw6c555mb4 { font-size: 12px; font-weight: 600; color: var(--gray-700); margin-bottom: 4px; }
.fw6cpmb4    { font-weight: 600; color: var(--color-primary); margin-bottom: 4px; }
.fw6cp       { font-weight: 600; color: var(--color-primary); }
.fw6         { font-weight: 600; }
.fxwwg3m4   { display: flex; flex-wrap: wrap; gap: 3px; margin: 4px 0; }
.tacfx1 { text-align: center; flex: 1; }
.f14fw7mb6 { font-size: 14px; font-weight: 700; margin-bottom: 6px; }
.bgfff-p6-mb6 { background: #fff; border-radius: 6px; padding: 6px; margin-bottom: 6px; }
.w100p-f12-tac-bcc { width: 100%; font-size: 12px; text-align: center; border-collapse: collapse; }
.mt6 { margin-top: 6px; }

/* ===== CSS类提取（替代inline style） ===== */
.ds-info { font-size: var(--fs-tiny); color: var(--gray-450); margin-top: 2px; }
.season-banner { display: none; }
.home-reminders { display: none; margin: -4px 12px 8px; padding: 6px 14px; font-size: var(--fs-xs); color: var(--gray-450); background: var(--gray-50); border-radius: 10px; cursor: default; }
.yi-ji-match { display: none; margin: 0 12px 6px; padding: 4px 14px; font-size: var(--fs-tiny); color: var(--gray-600); background: #fafafa; border-radius: 8px; }
/* 每日指南 */
.fc-row { display: flex; gap: 10px; margin-top: 4px; }
.fc-item { flex: 1; text-align: center; padding: 8px 4px; background: var(--gray-50); border-radius: 8px; }
.fc-label { font-size: var(--fs-tiny); color: var(--gray-500); margin-bottom: 4px; }
.fc-value { font-size: var(--fs-h1); font-weight: 600; display: flex; align-items: center; justify-content: center; gap: 6px; }
/* 幸运色圆点 */
.color-dot { display: inline-block; width: 14px; height: 14px; border-radius: 50%; flex-shrink: 0; }
.fc-foot { font-size: var(--fs-xs); color: var(--gray-450); margin-top: 6px; text-align: center; }
/* 占卜 */
.hidden-block { display: none; }
.disclaimer { font-size: var(--fs-tiny); color: var(--gray-150); text-align: center; margin-top: 4px; }
/* 择吉 */
.zj-header { margin: 2px 10px 0; padding: 4px 10px; }
.zj-month-t { font-size: 18px; font-weight: 600; color: #111; }
.zj-year-l { font-size: var(--fs-small); color: var(--gray-500); }
.zj-bar { margin: 0 10px 4px; padding: 4px 8px; border-radius: 8px; background: var(--bg-card); font-size: var(--fs-xs); }
.zj-info { margin: 2px 10px 8px; padding: 12px; display: none; }
.zj-body { margin: 4px 10px; padding: 8px; }
/* 择吉页日历更紧凑 */
#pg2 .dg .c { min-height: 38px; padding: 2px 0; }
#pg2 .dg .c .l { margin-top: 0; line-height: 1.1; }
#pg2 .zj-score-line { margin-top: 0; }
#pg2 .zj-bg { margin-top: 0; padding: 0 3px; line-height: 13px; font-size: 9px; }
/* AI页 */
.ai-ht { margin: 8px 10px; text-align: center; padding: 10px; }
.ai-ht-t { font-size: 17px; font-weight: 700; }
/* 设置页 */
.m-row { display: flex; align-items: center; cursor: pointer; }
.m-ic { font-size: 26px; margin-right: 12px; flex-shrink: 0; }
.m-f1 { flex: 1; }
.m-t { font-size: var(--fs-h2); font-weight: 600; color: var(--gray-800); }
.m-d { font-size: var(--fs-xs); color: var(--gray-500); margin-top: 2px; }
.m-ar { font-size: 20px; color: var(--gray-300); font-weight: 200; }
.m-box { margin: 0 10px 6px; padding: 4px 14px; }
.m-item { margin: 4px 10px 6px; padding: 12px 14px; display: flex; align-items: center; cursor: pointer; }
.m-ar-l { color: var(--gray-300); margin-left: auto; }
.m-v { margin-left: auto; margin-right: 4px; }
.m-v2 { margin-left: auto; }
/* 设置底部品牌 */

/* ─── 数据管理 ─── */
.dm-wrap { text-align: center; }
.dm-stats { display: flex; flex-wrap: wrap; gap: 6px; justify-content: center; margin-bottom: 6px; }
.dm-item { display: flex; align-items: center; gap: 3px; background: var(--gray-50); border-radius: 16px; padding: 5px 12px; font-size: 13px; }
.dm-ic { font-size: 14px; line-height: 1; }
.dm-n { color: var(--color-text-muted); font-size: 12px; }
.dm-v { color: var(--color-text-body); font-weight: 600; font-size: 14px; margin-left: 1px; }
.dm-divider { height: 1px; background: var(--color-border); margin: 12px 0; }
.dm-actions { display: flex; gap: 8px; justify-content: center; }
.dm-btn { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; flex: 1; max-width: 100px; padding: 10px 8px; background: var(--bg-card); border: 1px solid var(--color-border); border-radius: 12px; cursor: pointer; transition: all .12s; user-select: none; }
.dm-btn:active { background: var(--color-primary-light); border-color: var(--color-primary); }
.dm-btn-ic { font-size: 22px; line-height: 1.2; }
.dm-btn-l { font-size: 12px; color: var(--color-text-secondary); font-weight: 500; }
body.dark .dm-item { background: var(--gray-800); }
body.dark .dm-n { color: var(--gray-500); }
body.dark .dm-v { color: var(--gray-300); }
body.dark .dm-btn { background: var(--gray-800); border-color: var(--gray-700); }
body.dark .dm-btn-l { color: var(--gray-400); }
.brd-box { margin: 0 10px 4px; padding: 12px 14px 8px; text-align: center; }
.brd-t { font-size: 15px; font-weight: 600; color: var(--color-primary); margin-bottom: 2px; }
.brd-s { font-size: 11px; color: var(--gray-400); line-height: 1.4; }
.brd-ln { width: 24px; height: 1px; background: var(--color-primary); margin: 6px auto; border-radius: 1px; }
.brd-v { font-size: 10px; color: var(--gray-400); line-height: 1.4; }
.brd-icp { font-size: 9px; color: var(--gray-400); text-align: center; margin-top: 2px; }
/* 生理周期 */
.pd-box { padding: 10px 14px; }
.pd-h { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; }
.pd-ht { font-size: var(--fs-h2); font-weight: 600; color: var(--gray-700); }
.pd-c { font-size: var(--fs-xs); color: var(--color-primary); cursor: pointer; }
.pd-row { margin-top: 6px; display: flex; gap: 6px; align-items: center; }
.pd-inp { flex: 1; font-size: var(--fs-xs); height: 30px; }
.pd-btn { font-size: var(--fs-tiny); }
/* 生理周期容器 */
.pd-sc { margin: 0 10px 6px; display: none; }
.pd-oh { overflow: hidden; max-height: 600px; }
/* 日程 */
.sch-box { margin: 4px 10px 6px; padding: 10px 14px; }
.sch-h { display: flex; justify-content: space-between; align-items: center; }
.sch-ht { font-size: var(--fs-h1); font-weight: 700; color: var(--gray-800); }
.sch-hd { font-size: var(--fs-xs); color: var(--gray-500); }
.sch-tags { margin: 0 10px 6px; padding: 8px 14px; }
.sch-tag-w { display: flex; gap: 6px; flex-wrap: wrap; }
.sch-view { margin: 0 10px 6px; padding: 4px 14px; }
.sch-tab-w { display: flex; gap: 0; border-radius: 6px; overflow: hidden; border: 1px solid var(--color-border); }
.sch-tab { flex: 1; text-align: center; padding: 5px 0; cursor: pointer; font-size: var(--fs-xs); }
.sch-list { margin: 0 10px 6px; padding: 8px 14px; }
.sch-cnt { max-height: 55vh; overflow-y: auto; }
.sch-ld { text-align: center; padding: 20px; color: var(--gray-400); font-size: var(--fs-small); }
/* 浮动按钮 */
.fab-pos { position: fixed; bottom: 60px; right: 16px; z-index: 100; }
.fab-btn { width: 48px; height: 48px; background: var(--color-primary); color: var(--bg-card); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 24px; box-shadow: 0 2px 8px rgba(198,40,40,.3); cursor: pointer; }

/* ===== 弹窗内容统一排版 ===== */
.modal-title{font-size:var(--fs-body);font-weight:600;color:var(--gray-800);margin-bottom:var(--sp-6)}
.modal-text{font-size:var(--fs-small);line-height:1.8;color:var(--gray-700);padding:2px 0}
.modal-text-lh{font-size:var(--fs-small);line-height:1.9;color:var(--gray-700);padding:2px 0}
.modal-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:3px}
.modal-grid-item{background:var(--gray-50);padding:3px 6px;border-radius:4px;font-size:var(--fs-xs)}
.modal-tag{color:var(--color-primary);font-weight:600}
.modal-muted{color:var(--gray-500)}
.modal-light{color:var(--gray-400)}
.modal-row{display:flex;justify-content:space-between;padding:var(--sp-2) 0;border-bottom:1px solid var(--bg-page)}
.modal-success{text-align:center;padding:16px}
.modal-success-icon{font-size:48px;margin-bottom:8px}
.modal-success-title{font-size:var(--fs-h1);font-weight:600;color:var(--color-primary)}
.modal-success-desc{font-size:var(--fs-small);color:var(--gray-450);margin-top:4px}
.modal-success-btn{margin-top:12px;background:var(--color-primary);color:var(--bg-card);border:none;padding:8px 24px;border-radius:16px;cursor:pointer}

