/* ===========================================================
   拾光日历 — 样式
   主题：plain（无风格）/ anime（日漫）/ nature（自然）
   =========================================================== */

:root{
  --bg:#f2f5fa;
  --bg-grad-1:#eef3fb;
  --bg-grad-2:#f7f4ef;
  --panel:#ffffff;
  --panel-2:#f8fafc;
  --ink:#131a26;
  --ink-2:#4c5668;
  --ink-3:#8d97a8;
  --line:#e5eaf2;
  --line-soft:#eef2f8;
  --accent:#4b6bfb;
  --accent-ink:#3550d8;
  --accent-soft:#edf1ff;
  --holiday:#e05b45;
  --holiday-soft:#fdeeea;
  --birthday:#d2578f;
  --birthday-soft:#fdeef5;
  --ok:#2f9e6f;
  --warn:#c98a1a;
  --radius-l:22px;
  --radius:16px;
  --radius-s:11px;
  --shadow-s:0 2px 8px rgba(19,26,38,.045);
  --shadow:0 12px 34px rgba(19,26,38,.08);
  --shadow-l:0 30px 70px rgba(19,26,38,.16);
  --font:"PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --font-display:"PingFang SC","Songti SC",Georgia,serif;
  --nav-w:236px;
  --panel-w:344px;
}

/* ---------- 日漫主题 ---------- */
html[data-theme="anime"]{
  --bg:#fdf3f7;
  --bg-grad-1:#fdeaf3;
  --bg-grad-2:#eef1ff;
  --panel:#fffafd;
  --panel-2:#fff5fa;
  --ink:#2c2136;
  --ink-2:#5f5169;
  --ink-3:#a294ab;
  --line:#f6e2ec;
  --line-soft:#fbeff5;
  --accent:#e8619b;
  --accent-ink:#c9427d;
  --accent-soft:#fdeef5;
  --holiday:#e0557f;
  --holiday-soft:#fdedf2;
  --radius-l:26px;
  --radius:19px;
  --shadow:0 14px 38px rgba(214,110,160,.14);
  --font-display:"Yuanti SC","PingFang SC","Hiragino Maru Gothic ProN",sans-serif;
}

/* ---------- 自然主题 ---------- */
html[data-theme="nature"]{
  --bg:#f5f3e9;
  --bg-grad-1:#eef2e4;
  --bg-grad-2:#f8f3e3;
  --panel:#fffdf7;
  --panel-2:#f9f7ec;
  --ink:#1e2a20;
  --ink-2:#4d5b4d;
  --ink-3:#8c977f;
  --line:#e4e5d4;
  --line-soft:#f0f1e3;
  --accent:#4c7a51;
  --accent-ink:#3a6240;
  --accent-soft:#eef3e9;
  --holiday:#c0653a;
  --holiday-soft:#fbeee4;
  --font-display:"Songti SC",Georgia,"PingFang SC",serif;
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{height:100%;}
body{
  margin:0;font-family:var(--font);color:var(--ink);
  background:
    radial-gradient(1100px 620px at 8% -10%, var(--bg-grad-1), transparent 62%),
    radial-gradient(900px 540px at 100% 110%, var(--bg-grad-2), transparent 60%),
    var(--bg);
  -webkit-font-smoothing:antialiased;
  overflow:hidden;
}
button{font-family:inherit;color:inherit;cursor:pointer;}
h1,h2,h3,h4{margin:0;font-weight:650;letter-spacing:-.01em;}
p{margin:0;}
::selection{background:var(--accent-soft);}

/* 背景装点 */
.bg-decor{position:fixed;inset:0;pointer-events:none;z-index:0;overflow:hidden;}
#decorLayer{position:absolute;inset:0;}
.petal,.leaf{position:absolute;top:-8vh;opacity:.55;will-change:transform;animation:fall linear infinite;}
@keyframes fall{
  0%{transform:translate3d(0,-10vh,0) rotate(0deg);opacity:0;}
  10%{opacity:.7;}
  100%{transform:translate3d(var(--drift,40px),110vh,0) rotate(420deg);opacity:0;}
}
html[data-theme="nature"] .bg-decor::after{
  content:"";position:absolute;inset:0;opacity:.5;
  background-image:radial-gradient(circle at 20% 30%, rgba(120,150,110,.13) 0 1.5px, transparent 2px),
                   radial-gradient(circle at 70% 60%, rgba(120,150,110,.1) 0 1.5px, transparent 2px);
  background-size:90px 90px,130px 130px;
}

/* ================= 布局 ================= */
.app{
  position:relative;z-index:1;height:100vh;height:100dvh;display:grid;
  grid-template-columns:var(--nav-w) minmax(0,1fr) var(--panel-w);
}
.app.is-guest{filter:blur(6px) saturate(.9);pointer-events:none;user-select:none;}

/* ---------- 侧栏 ---------- */
.sidebar{
  display:flex;flex-direction:column;gap:16px;padding:24px 16px 18px;
  border-right:1px solid var(--line-soft);
  background:color-mix(in srgb, var(--panel) 58%, transparent);
  backdrop-filter:blur(12px);
}
.brand{display:flex;align-items:center;gap:11px;padding:0 6px 6px;}
.brand-mark{
  width:38px;height:38px;border-radius:12px;display:grid;place-items:center;
  background:linear-gradient(145deg,var(--accent),var(--accent-ink));color:#fff;
  box-shadow:0 8px 18px color-mix(in srgb,var(--accent) 32%, transparent);
}
.brand-text{display:flex;flex-direction:column;line-height:1.2;}
.brand-text strong{font-size:16px;letter-spacing:.02em;}
.brand-text span{font-size:10px;color:var(--ink-3);letter-spacing:.16em;text-transform:uppercase;}

.nav{display:flex;flex-direction:column;gap:4px;margin-top:6px;}
.nav-item{
  position:relative;display:flex;align-items:center;gap:11px;padding:10px 13px;
  border:0;background:transparent;border-radius:var(--radius-s);
  font-size:14px;color:var(--ink-2);text-align:left;transition:.18s;
}
.nav-item i{font-style:normal;font-size:15px;width:18px;text-align:center;color:var(--ink-3);transition:.18s;}
.nav-item:hover{background:color-mix(in srgb,var(--accent) 7%, transparent);color:var(--ink);}
.nav-item.is-active{background:var(--accent-soft);color:var(--accent-ink);font-weight:600;}
.nav-item.is-active i{color:var(--accent-ink);}
.badge{
  margin-left:auto;font-style:normal;font-size:10px;min-width:17px;height:17px;padding:0 5px;
  border-radius:9px;background:var(--holiday);color:#fff;display:grid;place-items:center;
}
.side-foot{margin-top:auto;}
.user-chip{
  width:100%;display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid var(--line);
  background:var(--panel);border-radius:14px;text-align:left;transition:.18s;
}
.user-chip:hover{border-color:color-mix(in srgb,var(--accent) 45%, var(--line));box-shadow:var(--shadow-s);}
.avatar{
  width:32px;height:32px;border-radius:50%;flex:0 0 auto;display:grid;place-items:center;
  background:linear-gradient(145deg,var(--accent),var(--accent-ink));color:#fff;font-size:13px;font-weight:600;
}
.uc-text{display:flex;flex-direction:column;min-width:0;}
.uc-text b{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.uc-text span{font-size:11px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* ---------- 主区 ---------- */
.main{overflow:hidden;display:flex;flex-direction:column;min-width:0;}
.view{display:none;flex-direction:column;height:100%;min-height:0;padding:22px 0 0;}
.view.is-active{display:flex;}
.view#view-contacts,.view#view-messages,.view#view-settings{overflow-y:auto;padding:26px 28px 40px;}

.topbar{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:0 24px 14px;flex-wrap:wrap;}
.tb-left{display:flex;align-items:center;gap:8px;}
.tb-left h2{font-family:var(--font-display);font-size:24px;font-weight:600;letter-spacing:.01em;min-width:128px;text-align:center;}
.tb-right{display:flex;align-items:center;gap:10px;}

.icon-btn{
  width:32px;height:32px;border-radius:10px;border:1px solid var(--line);background:var(--panel);
  font-size:16px;color:var(--ink-2);display:grid;place-items:center;transition:.18s;line-height:1;
}
.icon-btn:hover{border-color:var(--accent);color:var(--accent-ink);}
.icon-btn.small{width:26px;height:26px;font-size:11px;border:0;background:transparent;color:var(--ink-3);}
.icon-btn.small:hover{background:var(--panel-2);color:var(--ink);}

.ghost-btn{
  border:1px solid var(--line);background:var(--panel);border-radius:10px;padding:6px 12px;
  font-size:12.5px;color:var(--ink-2);transition:.18s;
}
.ghost-btn:hover{border-color:var(--accent);color:var(--accent-ink);}
.primary-btn{
  border:0;border-radius:11px;padding:9px 16px;font-size:13px;font-weight:600;color:#fff;
  background:linear-gradient(145deg,var(--accent),var(--accent-ink));
  box-shadow:0 8px 18px color-mix(in srgb,var(--accent) 28%, transparent);
  transition:.18s;
}
.primary-btn:hover{transform:translateY(-1px);box-shadow:0 12px 24px color-mix(in srgb,var(--accent) 34%, transparent);}
.primary-btn:active{transform:translateY(0);}
.primary-btn:disabled{
  opacity:.5;cursor:not-allowed;transform:none;
  box-shadow:none;filter:grayscale(.25);
}
.primary-btn.danger{background:linear-gradient(145deg,#e05b45,#c4462f);box-shadow:0 8px 18px rgba(224,91,69,.28);}

.seg{display:flex;padding:3px;background:var(--panel-2);border:1px solid var(--line-soft);border-radius:11px;}
.seg button{
  border:0;background:transparent;padding:6px 11px;font-size:12px;color:var(--ink-3);border-radius:8px;transition:.18s;
}
.seg button.is-active{background:var(--panel);color:var(--ink);box-shadow:var(--shadow-s);font-weight:600;}

/* ---------- 日历网格 ---------- */
.weekhead{
  display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;
  padding:0 24px 8px;color:var(--ink-3);font-size:11.5px;letter-spacing:.06em;
}
.weekhead span{text-align:center;padding:2px 0;}
.weekhead span.wk-end{color:color-mix(in srgb,var(--holiday) 70%, var(--ink-3));}

.calgrid{
  flex:1;min-height:0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));
  grid-auto-rows:minmax(0,1fr);gap:8px;padding:0 24px 12px;
}
.cell{
  position:relative;border:1px solid var(--line-soft);border-radius:var(--radius);
  background:color-mix(in srgb,var(--panel) 86%, transparent);
  padding:8px 9px;display:flex;flex-direction:column;gap:4px;min-height:0;overflow:hidden;
  transition:border-color .16s, box-shadow .16s, transform .16s;
  cursor:pointer;
}
.cell:hover{border-color:color-mix(in srgb,var(--accent) 38%, var(--line));box-shadow:var(--shadow-s);}
.cell.is-out{background:transparent;border-color:transparent;color:var(--ink-3);opacity:.55;}
.cell.is-today{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 4%, var(--panel));}
.cell.is-sel{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 55%, transparent);}
.cell.is-weekend .dnum{color:color-mix(in srgb,var(--holiday) 75%, var(--ink));}
.cell-top{display:flex;align-items:center;gap:5px;}
.dnum{
  font-size:13.5px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:.01em;
  width:22px;height:22px;display:grid;place-items:center;border-radius:8px;
}
.cell.is-today .dnum{background:var(--accent);color:#fff;}
.lunar{font-size:10px;color:var(--ink-3);white-space:nowrap;overflow:hidden;}
.chips{display:flex;flex-direction:column;gap:3px;min-height:0;overflow:hidden;}
.chip{
  display:flex;align-items:center;gap:4px;font-size:10.5px;line-height:1.35;
  padding:2px 5px;border-radius:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  background:var(--holiday-soft);color:var(--holiday);
}
.chip.ev{background:var(--accent-soft);color:var(--accent-ink);}
.chip.bd{background:var(--birthday-soft);color:var(--birthday);}
.cell-more{font-size:9.5px;color:var(--ink-3);}
.dots{display:flex;gap:3px;margin-top:auto;}
.dot{width:5px;height:5px;border-radius:50%;display:inline-block;}
.dot.h{background:var(--holiday);}
.dot.e{background:var(--accent);}
.dot.b{background:var(--birthday);}

.cal-foot{
  display:flex;align-items:center;gap:6px;padding:4px 26px 16px;font-size:11.5px;color:var(--ink-3);flex-wrap:wrap;
}
.legend-holiday{background:var(--holiday);}
.legend-event{background:var(--accent);}
.legend-birthday{background:var(--birthday);}
.cal-foot .dot{margin-left:8px;}
.cal-foot .dot:first-child{margin-left:0;}
.lg-hint{margin-left:auto;color:var(--ink-3);opacity:.8;}

/* ---------- 右侧日期面板 ---------- */
.daypanel{
  border-left:1px solid var(--line-soft);padding:22px 20px;
  display:flex;flex-direction:column;gap:14px;overflow-y:auto;
  background:color-mix(in srgb,var(--panel) 54%, transparent);
  backdrop-filter:blur(12px);
}
.dp-head{display:flex;align-items:flex-start;justify-content:space-between;}
.dp-date{font-family:var(--font-display);font-size:30px;font-weight:600;line-height:1.05;}
.dp-week{font-size:12px;color:var(--ink-3);margin-top:4px;letter-spacing:.04em;}
.dp-holidays{display:flex;flex-direction:column;gap:8px;}
.holiday-card{
  display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:14px;
  background:var(--holiday-soft);border:1px solid color-mix(in srgb,var(--holiday) 16%, transparent);
}
.holiday-card .hc-ico{font-size:22px;line-height:1;}
.hc-txt{display:flex;flex-direction:column;min-width:0;}
.hc-txt b{font-size:13.5px;color:var(--holiday);}
.hc-txt span{font-size:11px;color:color-mix(in srgb,var(--holiday) 62%, var(--ink-2));}
.dp-events{display:flex;flex-direction:column;gap:8px;}
.dp-title{font-size:11px;letter-spacing:.12em;color:var(--ink-3);text-transform:uppercase;margin-bottom:2px;}
.ev-item{
  display:flex;gap:10px;padding:10px 11px;border:1px solid var(--line-soft);
  border-radius:13px;background:var(--panel);transition:.16s;
}
.ev-item:hover{box-shadow:var(--shadow-s);border-color:var(--line);}
.ev-ico{width:30px;height:30px;flex:0 0 auto;border-radius:9px;display:grid;place-items:center;font-size:15px;background:var(--accent-soft);}
.ev-ico.bd{background:var(--birthday-soft);}
.ev-body{min-width:0;flex:1;}
.ev-body b{display:block;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ev-body span{font-size:11px;color:var(--ink-3);}
.ev-del{border:0;background:transparent;color:var(--ink-3);font-size:12px;padding:2px 3px;border-radius:6px;align-self:flex-start;}
.ev-del:hover{background:var(--holiday-soft);color:var(--holiday);}
.empty{
  padding:22px 14px;text-align:center;font-size:12.5px;color:var(--ink-3);
  border:1px dashed var(--line);border-radius:13px;line-height:1.7;
}
.add-line{
  border:1px dashed var(--line);background:transparent;border-radius:12px;padding:10px;
  font-size:12.5px;color:var(--ink-2);transition:.16s;
}
.add-line:hover{border-color:var(--accent);color:var(--accent-ink);background:var(--accent-soft);}
.dp-upcoming{margin-top:auto;padding-top:12px;border-top:1px solid var(--line-soft);}
.up-item{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:12px;color:var(--ink-2);}
.up-item .u-date{margin-left:auto;color:var(--ink-3);font-size:11px;font-variant-numeric:tabular-nums;}

/* ---------- 通用页面头 ---------- */
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;margin-bottom:18px;flex-wrap:wrap;}
.page-head h2{font-family:var(--font-display);font-size:25px;font-weight:600;}
.page-head .sub{font-size:12.5px;color:var(--ink-3);margin-top:5px;}
.quota{font-size:12px;color:var(--ink-2);background:var(--panel);border:1px solid var(--line);padding:6px 11px;border-radius:9px;}

/* ---------- 亲友 ---------- */
.invite-card{
  display:flex;align-items:center;gap:16px;padding:16px 18px;border-radius:var(--radius);
  background:linear-gradient(120deg,color-mix(in srgb,var(--accent) 10%,var(--panel)),var(--panel));
  border:1px solid color-mix(in srgb,var(--accent) 18%, transparent);margin-bottom:16px;flex-wrap:wrap;
}
.invite-card .ic-txt{flex:1;min-width:180px;}
.invite-card b{font-size:14px;}
.invite-card p{font-size:12px;color:var(--ink-2);margin-top:4px;line-height:1.6;}
.invite-code{
  font-family:ui-monospace,Menlo,monospace;font-size:12px;letter-spacing:.16em;
  background:var(--panel);border:1px dashed var(--line);border-radius:9px;padding:8px 12px;color:var(--ink-2);
}
.contact-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:12px;}
.contact-card{
  border:1px solid var(--line-soft);background:var(--panel);border-radius:var(--radius);padding:14px;
  display:flex;flex-direction:column;gap:11px;transition:.18s;
}
.contact-card:hover{box-shadow:var(--shadow-s);border-color:color-mix(in srgb,var(--accent) 22%, var(--line));}
.cc-top{display:flex;align-items:center;gap:10px;}
.cc-name{font-size:14px;font-weight:600;display:flex;align-items:center;gap:6px;}
.tag{font-size:10px;padding:2px 7px;border-radius:20px;background:var(--accent-soft);color:var(--accent-ink);font-weight:500;}
.tag.family{background:#eaf3ff;color:#3b6bb5;}
.tag.relative{background:#f3edff;color:#6a4bb5;}
.tag.friend{background:#eaf7f0;color:#2f8a68;}
.reg-dot{font-size:10px;color:var(--ok);display:inline-flex;align-items:center;gap:3px;}
.reg-dot::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--ok);display:inline-block;}
.unreg{font-size:10px;color:var(--ink-3);}
.cc-meta{font-size:12px;color:var(--ink-2);display:flex;flex-direction:column;gap:5px;}
.cc-row{display:flex;align-items:center;gap:6px;}
.cc-row .k{color:var(--ink-3);font-size:11px;min-width:52px;}
.cc-actions{display:flex;gap:7px;margin-top:auto;}
.mini-btn{
  flex:1;border:1px solid var(--line);background:var(--panel-2);border-radius:9px;padding:6px;
  font-size:11.5px;color:var(--ink-2);transition:.16s;
}
.mini-btn:hover{border-color:var(--accent);color:var(--accent-ink);background:var(--accent-soft);}
.mini-btn.warn:hover{border-color:var(--holiday);color:var(--holiday);background:var(--holiday-soft);}

/* ---------- 消息 ---------- */
.msg-shell{
  flex:1;display:grid;grid-template-columns:260px minmax(0,1fr);gap:0;
  border:1px solid var(--line-soft);border-radius:var(--radius);overflow:hidden;background:var(--panel);
  min-height:480px;height:calc(100dvh - 190px);
}
.msg-list{border-right:1px solid var(--line-soft);overflow-y:auto;padding:8px;}
.msg-item{
  display:flex;gap:10px;align-items:center;padding:10px;border-radius:11px;cursor:pointer;transition:.16s;
}
.msg-item:hover{background:var(--panel-2);}
.msg-item.is-active{background:var(--accent-soft);}
.mi-txt{min-width:0;flex:1;}
.mi-txt b{display:block;font-size:13px;font-weight:600;}
.mi-txt span{font-size:11.5px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;}
.msg-thread{display:flex;flex-direction:column;min-height:0;}
.thread-head{padding:12px 16px;border-bottom:1px solid var(--line-soft);display:flex;align-items:center;gap:10px;}
.thread-body{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:9px;background:var(--panel-2);}
.bubble{max-width:74%;padding:9px 13px;border-radius:14px;font-size:13px;line-height:1.55;word-break:break-word;}
.bubble.out{align-self:flex-end;background:var(--accent);color:#fff;border-bottom-right-radius:5px;}
.bubble.in{align-self:flex-start;background:var(--panel);border:1px solid var(--line-soft);border-bottom-left-radius:5px;}
.bubble .t{display:block;font-size:9.5px;opacity:.65;margin-top:4px;}
.thread-input{display:flex;gap:8px;padding:11px;border-top:1px solid var(--line-soft);background:var(--panel);}
.thread-input input{
  flex:1;border:1px solid var(--line);border-radius:11px;padding:10px 13px;font-size:13px;
  background:var(--panel-2);color:var(--ink);outline:none;transition:.16s;font-family:inherit;
}
.thread-input input:focus{border-color:var(--accent);background:var(--panel);}
.thread-input button{border:0;border-radius:11px;padding:0 16px;background:var(--accent);color:#fff;font-size:13px;font-weight:600;}

/* ---------- 设置 ---------- */
.settings-body{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px;align-content:start;}
.card{border:1px solid var(--line-soft);background:var(--panel);border-radius:var(--radius);padding:18px;}
.card h3{font-size:13.5px;letter-spacing:.02em;margin-bottom:3px;}
.card .card-sub{font-size:11.5px;color:var(--ink-3);margin-bottom:14px;}
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;}
.field:last-child{margin-bottom:0;}
.field label{font-size:11.5px;color:var(--ink-2);font-weight:500;}
.field input,.field select,.field textarea{
  border:1px solid var(--line);border-radius:10px;padding:9px 11px;font-size:13px;
  background:var(--panel-2);color:var(--ink);outline:none;font-family:inherit;transition:.16s;width:100%;
}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent);background:var(--panel);}
.field .hint{font-size:10.5px;color:var(--ink-3);line-height:1.55;}
.field .hint.is-bad{color:var(--holiday);}
/* 密码输入：右侧显示/隐藏 + 规则勾选 */
.pw-row{position:relative;display:flex;}
.pw-row input{padding-right:46px;}
.pw-eye{
  position:absolute;right:5px;top:50%;transform:translateY(-50%);
  border:0;background:transparent;padding:4px 7px;border-radius:7px;
  font-size:11px;color:var(--ink-3);cursor:pointer;transition:.16s;
}
.pw-eye:hover{color:var(--accent-ink);background:var(--accent-soft);}
.pw-rules{display:flex;flex-wrap:wrap;gap:5px;margin-top:2px;}
.pw-rule{
  font-size:10px;line-height:1.6;color:var(--ink-3);
  border:1px solid var(--line);border-radius:20px;padding:1px 8px;
  transition:.16s;
}
.pw-rule.is-ok{
  color:var(--ok);border-color:color-mix(in srgb,var(--ok) 38%,transparent);
  background:color-mix(in srgb,var(--ok) 9%,transparent);
}
/* 次要文字按钮（忘记密码 / 返回登录） */
.auth-row{display:flex;justify-content:flex-end;margin:-4px 0 10px;}
.link-btn{
  border:0;background:transparent;padding:2px 0;font-size:11.5px;color:var(--accent-ink);
  cursor:pointer;text-decoration:none;transition:.16s;
}
.link-btn:hover{text-decoration:underline;opacity:.85;}
.code-row{display:flex;gap:8px;}
.code-row input{flex:1;min-width:0;letter-spacing:2px;}
.code-row .ghost-btn{flex:0 0 auto;white-space:nowrap;font-size:11.5px;padding:0 12px;}
.code-row .ghost-btn:disabled{opacity:.55;cursor:default;}
.auth-note{margin:14px 0 0;font-size:10.5px;line-height:1.6;color:var(--ink-3);text-align:center;}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.switch-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid var(--line-soft);}
.switch-row:last-child{border-bottom:0;}
.switch-row .sr-txt b{display:block;font-size:12.5px;}
.switch-row .sr-txt span{font-size:10.5px;color:var(--ink-3);}
.switch{position:relative;width:40px;height:23px;flex:0 0 auto;}
.switch input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer;}
.switch i{position:absolute;inset:0;background:var(--line);border-radius:20px;transition:.2s;pointer-events:none;}
.switch i::after{content:"";position:absolute;width:17px;height:17px;border-radius:50%;background:#fff;top:3px;left:3px;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.18);}
.switch input:checked + i{background:var(--accent);}
.switch input:checked + i::after{transform:translateX(17px);}
.theme-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;}
.theme-card{
  border:1.5px solid var(--line);border-radius:12px;padding:8px;background:var(--panel-2);text-align:left;transition:.16s;
}
.theme-card.is-active{border-color:var(--accent);background:var(--accent-soft);}
.tc-swatch{height:36px;border-radius:8px;margin-bottom:6px;border:1px solid rgba(0,0,0,.05);}
.sw-plain{background:linear-gradient(140deg,#f2f5fa,#dde5f4);}
.sw-anime{background:linear-gradient(140deg,#fdeaf3,#ecdcff);}
.sw-nature{background:linear-gradient(140deg,#eef2e4,#f7efd9);}
.theme-card b{font-size:11.5px;display:block;}
.btn-row{display:flex;gap:8px;flex-wrap:wrap;}
.btn-row .ghost-btn{flex:1;min-width:88px;}
.danger-note{font-size:10.5px;color:var(--holiday);margin-top:8px;line-height:1.6;}

/* 安装到设备（PWA）步骤列表 */
.install-note{font-size:11.5px;color:var(--ink-3);line-height:1.7;}
.install-steps{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:8px;}
.install-steps li{display:flex;gap:9px;align-items:flex-start;font-size:11.5px;line-height:1.55;color:var(--ink-2);}
.install-steps li b{
  flex:none;width:17px;height:17px;border-radius:50%;margin-top:1px;
  display:flex;align-items:center;justify-content:center;
  font-size:10px;font-weight:600;color:#fff;background:var(--accent);
}
.install-steps li span{flex:1;min-width:0;}
.card #installRow{margin-top:14px;}
.card #installRow .primary-btn{flex:1;}

/* ---------- 弹窗 ---------- */
.modal-root{position:fixed;inset:0;z-index:80;display:none;}
.modal-root.is-open{display:block;}
.modal-scrim{position:absolute;inset:0;background:rgba(15,20,32,.42);backdrop-filter:blur(3px);animation:fadeIn .2s ease;}
.modal{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:min(460px,calc(100vw - 32px));max-height:calc(100dvh - 60px);overflow-y:auto;
  background:var(--panel);border-radius:var(--radius-l);box-shadow:var(--shadow-l);
  padding:22px;animation:modalIn .26s cubic-bezier(.2,.9,.3,1.1);
}
@keyframes modalIn{from{opacity:0;transform:translate(-50%,-46%) scale(.97);}to{opacity:1;transform:translate(-50%,-50%) scale(1);}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.modal h3{font-family:var(--font-display);font-size:19px;font-weight:600;}
.modal .m-sub{font-size:12px;color:var(--ink-3);margin:5px 0 16px;line-height:1.6;}
.m-foot{display:flex;gap:9px;margin-top:18px;}
.m-foot button:not(.primary-btn){flex:1;padding:11px;border-radius:11px;font-size:13px;font-weight:600;border:1px solid var(--line);background:var(--panel-2);color:var(--ink-2);}
/* 主按钮要保留自己的渐变底色，只统一尺寸；不能只写 color，否则白字落在浅底上看不见 */
.m-foot button.primary-btn{flex:1;padding:11px;border-radius:11px;font-size:13px;font-weight:600;color:#fff;border:0;}
.tabs{display:flex;gap:3px;background:var(--panel-2);padding:3px;border-radius:10px;margin-bottom:16px;}
.tabs button{flex:1;border:0;background:transparent;padding:8px;border-radius:8px;font-size:12.5px;color:var(--ink-3);}
.tabs button.is-active{background:var(--panel);color:var(--ink);font-weight:600;box-shadow:var(--shadow-s);}
.social-row{display:flex;flex-direction:column;gap:8px;margin-top:14px;}
.social-btn{
  display:flex;align-items:center;gap:10px;width:100%;padding:10px 13px;border-radius:11px;
  border:1px solid var(--line);background:var(--panel);font-size:12.5px;color:var(--ink-2);transition:.16s;
}
.social-btn:hover{border-color:var(--accent);background:var(--accent-soft);}
.sb-ico{width:20px;height:20px;display:grid;place-items:center;font-size:14px;}
.divider{display:flex;align-items:center;gap:10px;color:var(--ink-3);font-size:10.5px;margin:16px 0 4px;}
.divider::before,.divider::after{content:"";flex:1;height:1px;background:var(--line-soft);}

/* 提醒预览小图 */
.anim-pick{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;}
.anim-card{border:1.5px solid var(--line);border-radius:12px;padding:9px 8px;background:var(--panel-2);text-align:center;transition:.16s;}
.anim-card.is-active{border-color:var(--accent);background:var(--accent-soft);}
.anim-card .ap-emoji{font-size:19px;display:block;margin-bottom:4px;}
.anim-card b{font-size:11px;font-weight:600;display:block;}
.anim-card span{font-size:9.5px;color:var(--ink-3);}

/* ---------- Toast ---------- */
.toast{
  position:fixed;left:50%;bottom:32px;transform:translate(-50%,14px);z-index:120;
  background:rgba(20,26,38,.92);color:#fff;font-size:12.5px;padding:10px 18px;border-radius:22px;
  opacity:0;pointer-events:none;transition:.26s;backdrop-filter:blur(8px);
}
.toast.is-show{opacity:1;transform:translate(-50%,0);}

/* ---------- 移动端 ---------- */
.sheet-scrim{display:none;}
@media (max-width:1180px){
  :root{--panel-w:300px;--nav-w:200px;}
  .brand-text span{display:none;}
}
@media (max-width:980px){
  .app{grid-template-columns:1fr;grid-template-rows:1fr;}
  .sidebar{
    position:fixed;left:0;right:0;bottom:0;z-index:50;flex-direction:row;align-items:center;
    padding:8px 10px calc(8px + env(safe-area-inset-bottom));gap:6px;
    border-right:0;border-top:1px solid var(--line);background:color-mix(in srgb,var(--panel) 92%, transparent);
  }
  .brand,.side-foot{display:none;}
  .nav{flex-direction:row;margin:0;flex:1;gap:2px;}
  .nav-item{flex:1;flex-direction:column;gap:3px;padding:6px 2px;font-size:10px;border-radius:12px;}
  .nav-item i{font-size:16px;}
  .badge{position:absolute;top:2px;right:16px;margin:0;}
  .main{padding-bottom:64px;}
  .view{padding-top:16px;}
  .topbar{padding:0 14px 10px;}
  .tb-left h2{font-size:20px;min-width:104px;}
  .tb-right .seg{display:none;}
  .weekhead{padding:0 12px 6px;font-size:10.5px;}
  .calgrid{padding:0 12px 8px;gap:5px;grid-auto-rows:minmax(64px,1fr);}
  .cell{padding:5px 5px;border-radius:11px;}
  .dnum{font-size:12px;width:20px;height:20px;}
  .lunar{display:none;}
  .chip{font-size:9px;padding:1px 4px;}
  .cal-foot{padding:0 14px 10px;font-size:10.5px;}
  .lg-hint{display:none;}
  .daypanel{
    position:fixed;left:0;right:0;bottom:56px;z-index:60;max-height:72dvh;
    border-left:0;border-top:1px solid var(--line);border-radius:22px 22px 0 0;
    transform:translateY(112%);transition:transform .3s cubic-bezier(.2,.9,.3,1);
    background:var(--panel);box-shadow:0 -18px 50px rgba(19,26,38,.14);padding:18px 18px 26px;
  }
  .daypanel.is-open{transform:translateY(0);}
  .sheet-scrim{display:block;position:fixed;inset:0;background:rgba(15,20,32,.3);z-index:55;opacity:0;pointer-events:none;transition:.25s;}
  .sheet-scrim.is-open{opacity:1;pointer-events:auto;}
  .view#view-contacts,.view#view-messages,.view#view-settings{padding:18px 14px 90px;}
  .msg-shell{grid-template-columns:1fr;height:auto;}
  .msg-list{max-height:180px;border-right:0;border-bottom:1px solid var(--line-soft);}
  .thread-body{min-height:260px;max-height:46dvh;}
  .settings-body{grid-template-columns:1fr;}
  .contact-list{grid-template-columns:1fr;}
}
@media (max-width:520px){
  .tb-left{gap:5px;}
  .tb-left h2{font-size:18px;min-width:96px;}
  .primary-btn{padding:8px 12px;font-size:12px;}
}
