/* ============================================================
   组务通知板 · 交互原型 v1
   配色：深墨青主色 / 冷绿偏向中性色 / 语义色独立
   字体：SF Pro + 苹方（macOS 原生栈），数据用 SF Mono 对齐
   ============================================================ */

:root{
  --bg:#EDF1F0;
  --chrome:#E6ECEA; --chrome-line:#CFDAD7;
  --surface:#FFFFFF; --surface-2:#F2F6F5; --surface-3:#E7EEEC;
  --line:#DCE5E2; --line-2:#C6D3CF;
  --ink:#10201E; --ink-2:#4A5C59; --ink-3:#7C8D89; --ink-4:#A3B1AD;
  --accent:#0F5C5E; --accent-ink:#0F5C5E; --accent-wash:#E2EEED; --accent-line:#B6D5D3;
  --accent-fg:#FFFFFF;
  --good:#2B7553; --good-wash:#E3F0E9;
  --warn:#96612A; --warn-wash:#F6EDE0;
  --bad:#A83E39;  --bad-wash:#F7E7E5;
  --unread:#C0453C;
  --chip-l:42%; --chip-fg:#fff; --rel-l:33%; --rel-a:.10;
  --ses-l:44%; --ses-fg:#fff; --ses-wash:94%; --ses-line:78%;
  --shadow-1:0 1px 2px rgba(16,32,30,.06);
  --shadow-2:0 1px 3px rgba(16,32,30,.07), 0 12px 32px -14px rgba(16,32,30,.28);
  --shadow-win:0 0 0 .5px rgba(16,32,30,.14), 0 24px 60px -20px rgba(16,32,30,.34);
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --bg:#0D1110;
    --chrome:#202726; --chrome-line:#2E3735;
    --surface:#181E1D; --surface-2:#1F2726; --surface-3:#28312F;
    --line:#2B3433; --line-2:#3A4442;
    --ink:#E9EEEC; --ink-2:#A6B4B1; --ink-3:#76847F; --ink-4:#5D6B68;
    --accent:#4FB3AC; --accent-ink:#6FC7C0; --accent-wash:#17302E; --accent-line:#2C4A47;
    --accent-fg:#08201F;
    --good:#5FAE83; --good-wash:#152C1F;
    --warn:#CE9752; --warn-wash:#2F2415;
    --bad:#DA746E;  --bad-wash:#331A19;
    --unread:#E0736B;
    --chip-l:64%; --chip-fg:#0E1615; --rel-l:66%; --rel-a:.14;
    --ses-l:62%; --ses-fg:#0E1615; --ses-wash:18%; --ses-line:30%;
    --shadow-1:0 1px 2px rgba(0,0,0,.35);
    --shadow-2:0 1px 3px rgba(0,0,0,.4), 0 12px 32px -14px rgba(0,0,0,.7);
    --shadow-win:0 0 0 .5px rgba(255,255,255,.07), 0 24px 60px -20px rgba(0,0,0,.8);
  }
}
:root[data-theme="dark"]{
  --bg:#0D1110;
  --chrome:#202726; --chrome-line:#2E3735;
  --surface:#181E1D; --surface-2:#1F2726; --surface-3:#28312F;
  --line:#2B3433; --line-2:#3A4442;
  --ink:#E9EEEC; --ink-2:#A6B4B1; --ink-3:#76847F; --ink-4:#5D6B68;
  --accent:#4FB3AC; --accent-ink:#6FC7C0; --accent-wash:#17302E; --accent-line:#2C4A47;
  --accent-fg:#08201F;
  --good:#5FAE83; --good-wash:#152C1F;
  --warn:#CE9752; --warn-wash:#2F2415;
  --bad:#DA746E;  --bad-wash:#331A19;
  --unread:#E0736B;
  --chip-l:64%; --chip-fg:#0E1615; --rel-l:66%; --rel-a:.14;
  --ses-l:62%; --ses-fg:#0E1615; --ses-wash:18%; --ses-line:30%;
  --shadow-1:0 1px 2px rgba(0,0,0,.35);
  --shadow-2:0 1px 3px rgba(0,0,0,.4), 0 12px 32px -14px rgba(0,0,0,.7);
  --shadow-win:0 0 0 .5px rgba(255,255,255,.07), 0 24px 60px -20px rgba(0,0,0,.8);
}

*{box-sizing:border-box;}
body{
  margin:0; background:var(--bg); color:var(--ink);
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
  font-size:13.5px; line-height:1.6; -webkit-font-smoothing:antialiased;
  padding:26px 22px 60px;
}
.mono,.num{font-family:ui-monospace,"SF Mono",SFMono-Regular,Menlo,monospace;font-variant-numeric:tabular-nums;}
button{font:inherit;color:inherit;cursor:pointer;}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px;}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important;}}

/* ---------- demo bar ---------- */
.demo-note{
  max-width:1240px;margin:0 auto 14px;display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;
  font-size:11.5px;color:var(--ink-3);padding:0 4px;
}
.demo-note .lab{font-size:10px;letter-spacing:.12em;text-transform:uppercase;font-weight:650;color:var(--ink-4);}
.roleswitch{display:inline-flex;background:var(--surface-3);border-radius:8px;padding:2px;gap:2px;}
.roleswitch button{
  border:0;background:transparent;padding:4px 12px;border-radius:6px;font-size:12px;font-weight:550;
  color:var(--ink-2);transition:background .12s,color .12s;
}
.roleswitch button[aria-pressed="true"]{background:var(--surface);color:var(--accent-ink);box-shadow:var(--shadow-1);font-weight:640;}
.demo-note select{
  font:inherit;font-size:11.5px;background:var(--surface);color:var(--ink-2);
  border:1px solid var(--line);border-radius:6px;padding:3px 6px;
  width:auto;max-width:200px;flex:none;   /* 全局 select 是 width:100%，这里要收回来 */
}

/* ---------- window ---------- */
.win{
  max-width:1240px;margin:0 auto;background:var(--surface);border-radius:12px;overflow:hidden;
  box-shadow:var(--shadow-win);
}
.titlebar{
  display:flex;align-items:center;gap:8px;padding:0 14px;height:40px;
  background:var(--chrome);border-bottom:1px solid var(--chrome-line);
}
.tl{width:11px;height:11px;border-radius:50%;}
.titlebar h1{
  font-size:12.5px;font-weight:600;margin:0 0 0 12px;color:var(--ink-2);letter-spacing:-.002em;
}
.titlebar .today{margin-left:auto;font-size:11.5px;color:var(--ink-3);}

.body{display:grid;grid-template-columns:206px minmax(0,1fr);min-height:660px;}
@media (max-width:760px){.body{grid-template-columns:1fr;}}

/* ---------- sidebar ---------- */
.side{
  background:var(--surface-2);border-right:1px solid var(--line);padding:16px 10px;
  display:flex;flex-direction:column;gap:2px;
}
.me{
  display:flex;align-items:center;gap:9px;padding:6px 8px 14px;margin-bottom:6px;
  border-bottom:1px solid var(--line);
}
.avatar{
  width:30px;height:30px;border-radius:8px;flex:none;display:grid;place-items:center;
  background:var(--accent);color:var(--accent-fg);font-size:13px;font-weight:620;letter-spacing:-.02em;
}
.me .n{font-size:13px;font-weight:620;line-height:1.25;}
.me .r{font-size:10.5px;color:var(--ink-3);line-height:1.3;}
.navlab{
  font-size:9.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-4);
  font-weight:650;padding:14px 10px 5px;
}
.navitem{
  display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:0;background:transparent;
  padding:6px 10px;border-radius:7px;font-size:13px;color:var(--ink-2);transition:background .12s,color .12s;
}
.navitem:hover{background:var(--surface-3);}
.navitem[aria-current="page"]{background:var(--accent-wash);color:var(--accent-ink);font-weight:620;}
.navitem .ct{margin-left:auto;font-size:10.5px;color:var(--ink-4);font-family:ui-monospace,Menlo,monospace;}
.navitem[aria-current="page"] .ct{color:var(--accent-ink);}
.navitem .badge{
  margin-left:auto;background:var(--unread);color:#fff;font-size:10px;font-weight:680;
  min-width:16px;height:16px;border-radius:8px;display:grid;place-items:center;padding:0 4px;
  font-family:ui-monospace,Menlo,monospace;
}
.side .spacer{flex:1;}
.side .foot{font-size:10px;color:var(--ink-4);padding:8px 10px 0;border-top:1px solid var(--line);line-height:1.6;}
.side .foot-btn{
  display:block;width:100%;text-align:left;background:transparent;border:0;border-top:1px solid var(--line);
  border-radius:0 0 7px 7px;transition:background .12s,color .12s;
}
.side .foot-btn:hover{background:var(--surface-3);color:var(--ink-2);}

/* ---------- main ---------- */
.main{padding:24px 28px 40px;min-width:0;overflow:hidden;}
.page-head{margin-bottom:20px;}
.page-head h2{font-size:19px;font-weight:650;letter-spacing:-.012em;margin:0 0 3px;}
.page-head p{margin:0;font-size:12.5px;color:var(--ink-3);}
.page-head .hrow{display:flex;align-items:flex-start;gap:16px;}
.page-head .hrow > div:first-child{flex:1;min-width:0;}

/* ---------- generic bits ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow-1);}
.pad{padding:16px 18px;}
.stack{display:flex;flex-direction:column;gap:12px;}
.row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.sep{height:1px;background:var(--line);margin:14px 0;}
.muted{color:var(--ink-3);}
.tiny{font-size:11.5px;}

.btn{
  border:1px solid var(--line-2);background:var(--surface);border-radius:7px;padding:5px 12px;
  font-size:12.5px;font-weight:550;color:var(--ink-2);transition:background .12s,border-color .12s;
}
.btn:hover{background:var(--surface-2);border-color:var(--ink-4);}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-fg);font-weight:600;}
.btn.primary:hover{filter:brightness(1.08);}
.btn.primary:disabled{opacity:.4;cursor:not-allowed;filter:none;}
.btn.ghost{border-color:transparent;background:transparent;color:var(--ink-3);}
.btn.ghost:hover{background:var(--surface-2);color:var(--ink-2);}
.btn.danger{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 22%,transparent);background:transparent;}
.btn.danger:hover{background:var(--bad-wash);border-color:color-mix(in srgb,var(--bad) 45%,transparent);}
/* 表格里的删除保持无边框，免得二十几行都是红框 */
td.acts .btn.danger{border-color:transparent;color:var(--ink-3);}
tbody tr:hover td.acts .btn.danger{color:var(--bad);}
td.acts .btn.danger:hover{border-color:color-mix(in srgb,var(--bad) 40%,transparent);}
.btn.sm{padding:3px 9px;font-size:11.5px;}

.seg{display:inline-flex;background:var(--surface-3);border-radius:8px;padding:2px;gap:2px;}
.seg button{border:0;background:transparent;padding:4px 12px;border-radius:6px;font-size:12.5px;color:var(--ink-2);}
.seg button[aria-pressed="true"]{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-1);font-weight:600;}

input[type=text],input[type=date],textarea,select{
  font:inherit;width:100%;background:var(--surface);color:var(--ink);
  border:1px solid var(--line-2);border-radius:7px;padding:6px 9px;font-size:13px;
}
textarea{resize:vertical;line-height:1.65;}
input::placeholder,textarea::placeholder{color:var(--ink-4);}
label.fl{display:block;font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);font-weight:640;margin-bottom:5px;}

/* ---------- level pills ---------- */
.lv{font-size:10.5px;font-weight:650;padding:1.5px 7px;border-radius:5px;letter-spacing:.02em;flex:none;}
.lv.daily{background:var(--surface-3);color:var(--ink-3);}
.lv.important{background:var(--warn-wash);color:var(--warn);}
.lv.urgent{background:var(--bad-wash);color:var(--bad);}

/* ---------- relation chips ---------- */
.rel{
  display:inline-flex;align-items:center;font-size:11px;font-weight:560;white-space:nowrap;
  padding:1px 8px;border-radius:999px;letter-spacing:.01em;line-height:1.55;
}
.rel.couple{background:hsl(var(--h) var(--s) var(--chip-l));color:var(--chip-fg);}
.rel.family{
  color:hsl(var(--h) var(--s) var(--rel-l));
  border:1.25px solid hsl(var(--h) var(--s) var(--rel-l));
  background:hsl(var(--h) var(--s) var(--rel-l) / var(--rel-a));
  padding:0 7px;
}
/* 跨组标记：另一半 / 家人不在同一小组 */
.rel .xg{font-size:9.5px;font-weight:650;margin-left:5px;opacity:.82;letter-spacing:.02em;}

.crossnote{
  margin-top:16px;max-width:780px;background:var(--surface);
  border:1px solid var(--line);border-left:3px solid var(--warn);
  border-radius:4px 10px 10px 4px;padding:12px 16px;box-shadow:var(--shadow-1);
}
.crossnote .ch{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;margin-bottom:8px;}
.crossnote .ch b{font-size:12.5px;color:var(--warn);}
.crossnote .ch span{font-size:11.5px;color:var(--ink-3);}
.crossnote ul{margin:0;padding-left:17px;font-size:12.5px;color:var(--ink-2);}
.crossnote li{margin-bottom:4px;}
.crossnote .og{font-size:10.5px;color:var(--ink-4);margin-left:3px;}
.xtbl{border-collapse:collapse;width:100%;font-size:12px;min-width:0;}
.xtbl thead th{
  background:transparent;border-bottom:1px solid var(--line);padding:5px 10px 5px 0;
  font-size:9.5px;letter-spacing:.09em;
}
.xtbl tbody td{padding:7px 10px 7px 0;border-bottom:1px solid var(--line);color:var(--ink-2);}
.xtbl tbody tr:last-child td{border-bottom:0;}
.xtbl tbody tr:hover{background:transparent;}
.xtbl td.xn{color:var(--ink);font-weight:580;white-space:nowrap;}
.ro{
  font-size:9.5px;font-weight:650;letter-spacing:.04em;padding:1px 6px;border-radius:4px;
  background:var(--surface-3);color:var(--ink-3);white-space:nowrap;
}


/* ---------- table ---------- */
.tbl-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px;background:var(--surface);box-shadow:var(--shadow-1);}
table{border-collapse:collapse;width:100%;font-size:12.5px;min-width:760px;}
thead th{
  text-align:left;padding:9px 12px;background:var(--surface-2);border-bottom:1px solid var(--line);
  font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);font-weight:650;white-space:nowrap;
}
tbody td{padding:9px 12px;border-bottom:1px solid var(--line);color:var(--ink-2);vertical-align:middle;}
tbody tr:last-child td{border-bottom:0;}
tbody tr:hover{background:var(--surface-2);}
td.name{color:var(--ink);font-weight:580;white-space:nowrap;}
td.acts{text-align:right;white-space:nowrap;}
/* 操作按钮平时退到背景里，鼠标划过或键盘聚焦时才显现 —— 让密集表格安静下来 */
td.acts .btn{opacity:.42;transition:opacity .12s;}
tbody tr:hover td.acts .btn,
td.acts .btn:focus-visible,
td.acts .btn:hover{opacity:1;}
@media (hover:none){ td.acts .btn{opacity:1;} }
.oncamp{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--good);margin-right:7px;vertical-align:middle;}
.oncamp.off{background:var(--ink-4);opacity:.45;}
/* 男女分节：性别由分节标题承担，行内不再单列一栏 */
tbody tr.sec td{
  background:var(--surface-2);padding:6px 12px;
  border-top:1px solid var(--line);border-bottom:1px solid var(--line);
}
tbody tr.sec:first-child td{border-top:0;}
tbody tr.sec:hover td{background:var(--surface-2);}
tbody tr.sec .sl{font-size:11px;font-weight:680;color:var(--ink-2);letter-spacing:.08em;}
tbody tr.sec .sn{font-size:10.5px;color:var(--ink-4);margin-left:14px;font-family:ui-monospace,Menlo,monospace;}
/* 表头即分组开关 */
thead th.piv{cursor:pointer;transition:color .12s;}
thead th.piv span{border-bottom:1px dotted var(--ink-4);padding-bottom:1px;}
thead th.piv:hover{color:var(--accent-ink);}
thead th.piv:hover span{border-bottom-color:var(--accent);}
.pivot{display:flex;align-items:center;gap:11px;flex-wrap:wrap;margin-bottom:12px;}
.pivot .plab{font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-4);font-weight:650;}
.pivot .phint{font-size:11.5px;color:var(--ink-4);font-family:ui-monospace,Menlo,monospace;}
.daynum{font-weight:620;color:var(--ink);}
.nleft{font-size:10.5px;color:var(--ink-4);margin-left:7px;font-family:ui-monospace,Menlo,monospace;}
.nleft.gone{color:var(--ink-4);font-weight:620;}
.trip{white-space:nowrap;color:var(--ink-2);}
.trip .arrow{color:var(--ink-4);padding:0 3px;}

/* ---------- group cards ---------- */
.gcards{display:grid;gap:10px;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));margin-bottom:20px;}
.gcard{
  background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px 14px;
  box-shadow:var(--shadow-1);text-align:left;width:100%;transition:border-color .12s;
}
.gcard:hover{border-color:var(--accent-line);}
.gcard .gn{font-size:14px;font-weight:640;margin-bottom:2px;}
.gcard .gl{font-size:11.5px;color:var(--ink-3);margin-bottom:9px;}
.gcard .gs{display:flex;gap:16px;}
.gcard .gs b{display:block;font-size:17px;font-weight:640;line-height:1.15;font-family:ui-monospace,Menlo,monospace;}
.gcard .gs span{font-size:10px;color:var(--ink-4);letter-spacing:.06em;}
.gcard .gsex{
  margin-top:9px;padding-top:8px;border-top:1px solid var(--line);
  font-size:11px;color:var(--ink-3);
}
.gcard .gsex b{font-family:ui-monospace,Menlo,monospace;color:var(--ink-2);font-weight:640;}

/* ---------- compose ---------- */
.compose{display:grid;gap:14px;}
.rcp-box{border:1px solid var(--line);border-radius:9px;background:var(--surface-2);padding:12px 14px;}
.chklist{display:grid;gap:2px;max-height:230px;overflow-y:auto;margin-top:10px;}
.chk{display:flex;align-items:center;gap:9px;padding:4px 7px;border-radius:6px;font-size:12.5px;cursor:pointer;}
.chk:hover{background:var(--surface);}
.chk input{width:auto;margin:0;accent-color:var(--accent);}
.chk .gtag{margin-left:auto;font-size:10.5px;color:var(--ink-4);}
.grouphdr{
  font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);font-weight:650;
  padding:9px 7px 3px;display:flex;align-items:center;gap:8px;
}
.grouphdr button{border:0;background:transparent;font-size:10.5px;color:var(--accent-ink);padding:0;text-transform:none;letter-spacing:0;font-weight:600;}
.sendbar{display:flex;align-items:center;gap:12px;padding-top:2px;}
.sendbar .cnt{font-size:12px;color:var(--ink-3);margin-right:auto;}
.sendbar .cnt b{color:var(--ink);font-family:ui-monospace,Menlo,monospace;}

/* ---------- notice cards ---------- */
.notice{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:14px 16px;box-shadow:var(--shadow-1);}
.notice.unread{border-left:3px solid var(--unread);}
.notice .nt{display:flex;align-items:center;gap:9px;margin-bottom:5px;}
.notice .nt h4{margin:0;font-size:14px;font-weight:620;letter-spacing:-.004em;}
.notice .nt .tm{margin-left:auto;font-size:11px;color:var(--ink-4);font-family:ui-monospace,Menlo,monospace;flex:none;}
/* 收件箱保留倒计时：不让通知无声消失 */
.exp{
  font-size:10.5px;font-weight:620;padding:1.5px 7px;border-radius:5px;flex:none;
  background:var(--surface-3);color:var(--ink-3);margin-left:auto;
}
.exp.warn{background:var(--warn-wash);color:var(--warn);}
.exp.bad{background:var(--bad-wash);color:var(--bad);}
.exp.gone{background:var(--surface-3);color:var(--ink-4);}
.notice .nt .exp + .tm{margin-left:0;}
.notice .meta{font-size:11.5px;color:var(--ink-3);margin-bottom:9px;}
.notice .bodytext{font-size:13px;color:var(--ink-2);white-space:pre-wrap;line-height:1.7;}
.notice .footer{margin-top:12px;padding-top:11px;border-top:1px solid var(--line);}

.progress{display:flex;align-items:center;gap:10px;font-size:11.5px;color:var(--ink-3);}
.bar{flex:1;height:5px;background:var(--surface-3);border-radius:3px;overflow:hidden;max-width:180px;}
.bar i{display:block;height:100%;background:var(--good);border-radius:3px;}
.unread-list{margin-top:9px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;}
.uchip{font-size:11px;background:var(--bad-wash);color:var(--bad);padding:1px 8px;border-radius:999px;font-weight:560;}
.privacy-note{font-size:10.5px;color:var(--ink-4);margin-top:8px;}

.escalate{
  margin-top:10px;background:var(--warn-wash);border:1px solid color-mix(in srgb,var(--warn) 30%,transparent);
  border-radius:8px;padding:10px 12px;font-size:12px;color:var(--ink-2);
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
}
.escalate b{color:var(--warn);}
.escalate .btn{margin-left:auto;}

/* ---------- chat ---------- */
.chat-wrap{display:grid;grid-template-columns:180px 1fr;gap:0;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--surface);box-shadow:var(--shadow-1);height:460px;}
@media (max-width:760px){.chat-wrap{grid-template-columns:1fr;height:auto;}}
.chat-list{background:var(--surface-2);border-right:1px solid var(--line);padding:8px;overflow-y:auto;}
.chat-list button{
  display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:0;background:transparent;
  padding:7px 9px;border-radius:7px;font-size:12.5px;color:var(--ink-2);
}
.chat-list button:hover{background:var(--surface-3);}
.chat-list button[aria-pressed="true"]{background:var(--accent-wash);color:var(--accent-ink);font-weight:620;}
.chat-list .dot{width:6px;height:6px;border-radius:50%;background:var(--unread);margin-left:auto;flex:none;}
.chat-panel{display:flex;flex-direction:column;min-width:0;}
.chat-msgs{flex:1;overflow-y:auto;padding:16px 18px;display:flex;flex-direction:column;gap:10px;}
.msg{max-width:78%;padding:8px 12px;border-radius:12px;font-size:13px;line-height:1.6;}
.msg.them{background:var(--surface-2);border:1px solid var(--line);align-self:flex-start;border-bottom-left-radius:4px;}
.msg.me{background:var(--accent);color:var(--accent-fg);align-self:flex-end;border-bottom-right-radius:4px;}
.msg .who{font-size:10px;opacity:.65;margin-bottom:2px;font-weight:600;}
.chat-input{border-top:1px solid var(--line);padding:10px 12px;display:flex;gap:8px;align-items:flex-end;background:var(--surface-2);}
.chat-input textarea{min-height:34px;max-height:100px;border-radius:8px;}

/* ---------- 场次编排 ---------- */
.sestabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px;align-items:stretch;}
.sestab{
  background:var(--surface);border:1px solid var(--line);
  border-left:3px solid hsl(var(--h) var(--s) var(--ses-l));
  border-radius:4px 10px 10px 4px;padding:10px 14px;
  text-align:left;box-shadow:var(--shadow-1);min-width:158px;transition:border-color .12s,background .12s;
}
.sestab:hover{background:var(--surface-2);}
.sestab[aria-pressed="true"]{
  background:hsl(var(--h) var(--s) var(--ses-wash));
  border-color:hsl(var(--h) var(--s) var(--ses-line));
  border-left-color:hsl(var(--h) var(--s) var(--ses-l));
}
.sestab .st{font-size:13px;font-weight:640;color:var(--ink);line-height:1.3;}
.sestab .cir{color:hsl(var(--h) var(--s) var(--ses-l));font-weight:700;margin-right:2px;}
.sestab .sm2{font-size:11px;color:var(--ink-3);margin-top:3px;display:flex;gap:10px;align-items:center;}
.sestab .sm2 b{font-family:ui-monospace,Menlo,monospace;color:var(--ink-2);font-weight:640;}
.sestab.add{border-style:dashed;border-left-color:var(--line);color:var(--ink-3);display:grid;place-items:center;min-width:112px;font-size:12.5px;}
.sestab[draggable="true"]{cursor:grab;}
.sestab[draggable="true"]:active{cursor:grabbing;}
.sestab.dragging{opacity:.35;}
.sestab.dropat{box-shadow:-3px 0 0 var(--accent), var(--shadow-1);}

/* 当前场次卡片：名称与操作同一行，统计紧跟其下 —— 操作对象一目了然 */
.sescur{
  border:1px solid var(--accent-line);border-radius:11px;background:var(--surface);
  box-shadow:var(--shadow-1);margin-bottom:12px;overflow:hidden;
}
.sch{display:flex;align-items:center;gap:18px;padding:14px 18px;flex-wrap:wrap;}
.schl{flex:1;min-width:180px;}
.scn{font-size:16px;font-weight:650;letter-spacing:-.008em;color:var(--ink);line-height:1.3;}
.scm{font-size:12px;color:var(--ink-3);margin-top:3px;font-family:ui-monospace,Menlo,monospace;}
.sca{display:flex;gap:7px;flex:none;}
.scs{
  display:flex;gap:26px;padding:11px 18px;background:var(--surface-2);
  border-top:1px solid var(--line);flex-wrap:wrap;align-items:center;
}
.scs .stat b{display:block;font-size:19px;font-family:ui-monospace,Menlo,monospace;font-weight:640;line-height:1.1;}
.scs .stat span{font-size:10px;color:var(--ink-4);letter-spacing:.06em;}
.scs .stat.w b{color:var(--warn);}
.scs .stat.b b{color:var(--bad);}

.sesnote{
  border-radius:9px;padding:11px 14px;font-size:12.5px;margin-bottom:10px;border:1px solid;
  display:flex;gap:12px;align-items:center;flex-wrap:wrap;color:var(--ink-2);
}
.sesnote.warn{background:var(--warn-wash);border-color:color-mix(in srgb,var(--warn) 30%,transparent);}
.sesnote.warn b{color:var(--warn);}
.sesnote.bad{background:var(--bad-wash);border-color:color-mix(in srgb,var(--bad) 30%,transparent);}
.sesnote.bad b{color:var(--bad);}
.sesnote.info{background:var(--surface-2);border-color:var(--line);}
.sesnote.info b{color:var(--ink);}
.sesnote .btn{margin-left:auto;}

.offc{font-size:10.5px;font-weight:620;padding:1px 7px;border-radius:5px;white-space:nowrap;
      background:var(--bad-wash);color:var(--bad);}
.chk.dim{opacity:.5;}

/* 格子式场次标记：一格一场，填色＝已排。比一行文字好扫得多 */
.chk.ses{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:10px;}
.chk.ses .pcheck{display:flex;align-items:center;gap:9px;min-width:0;cursor:pointer;}
.chk.ses .pname{display:flex;align-items:center;gap:7px;min-width:0;}
.chk.ses .lead{font-size:10px;color:var(--ink-4);}
.pips{display:flex;gap:3px;}
.pip{
  width:17px;height:17px;border-radius:4px;display:grid;place-items:center;flex:none;
  font-size:9.5px;font-weight:700;font-family:ui-monospace,Menlo,monospace;
  border:1px solid var(--line-2);color:var(--ink-4);background:transparent;
}
/* 填色＝已排，颜色对应上方那一场；本场额外加一圈环 */
.pip.on  {background:hsl(var(--h) var(--s) var(--ses-l));border-color:hsl(var(--h) var(--s) var(--ses-l));color:var(--ses-fg);}
.pip.cur {
  background:hsl(var(--h) var(--s) var(--ses-l));border-color:hsl(var(--h) var(--s) var(--ses-l));color:var(--ses-fg);
  box-shadow:0 0 0 1.5px var(--surface), 0 0 0 3px hsl(var(--h) var(--s) var(--ses-l));
}
.pip.here{border-color:hsl(var(--h) var(--s) var(--ses-l));border-style:dashed;color:hsl(var(--h) var(--s) var(--ses-l));}
/* 可点的格子 */
.pip.hot{cursor:pointer;transition:transform .1s,box-shadow .12s;padding:0;}
.pip.hot:hover{transform:translateY(-1px);box-shadow:0 2px 6px -1px hsl(var(--h) var(--s) var(--ses-l) / .5);}
.pip.hot:active{transform:none;}
.pip.cur.hot:hover{box-shadow:0 0 0 1.5px var(--surface),0 0 0 3px hsl(var(--h) var(--s) var(--ses-l)),0 2px 6px -1px hsl(var(--h) var(--s) var(--ses-l) / .5);}
button.pip:disabled{cursor:default;}
.piplegend{
  display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;
  font-size:11px;color:var(--ink-3);margin:10px 0 4px;padding-bottom:10px;
  border-bottom:1px solid var(--line);
}
.piplegend .li{display:flex;align-items:center;gap:5px;}
/* ---------- 全局查找 ---------- */
.findbar{
  display:flex;gap:10px;align-items:center;margin-bottom:6px;
}
.findbar input{font-size:15px;padding:9px 13px;border-radius:9px;}
.findhint{font-size:11.5px;color:var(--ink-4);margin:0 0 18px;}
.fres{display:flex;flex-direction:column;gap:9px;}
.fcard{
  background:var(--surface);border:1px solid var(--line);border-radius:10px;
  padding:13px 16px;box-shadow:var(--shadow-1);
}
.fcard .fh{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:9px;}
.fcard .fn{font-size:15px;font-weight:650;letter-spacing:-.006em;}
.fcard .fg{font-size:11.5px;color:var(--ink-3);}
.fcard .fwhy{
  font-size:10.5px;font-weight:600;padding:1px 7px;border-radius:5px;
  background:var(--surface-3);color:var(--ink-3);white-space:nowrap;
}
.fcard .fa{margin-left:auto;display:flex;gap:6px;}
.fmeta{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));
  gap:9px 16px;font-size:12.5px;
}
.fmeta .fk{font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);font-weight:650;display:block;margin-bottom:1px;}
.fmeta .fv{color:var(--ink-2);}
.fmeta .fv.mono{color:var(--ink);}
.fsec{
  margin-top:11px;padding-top:10px;border-top:1px solid var(--line);
  font-size:12px;color:var(--ink-3);display:flex;gap:8px;flex-wrap:wrap;align-items:baseline;
}
.fsec .fl2{font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);font-weight:650;flex:none;}
.fsec .fss{background:var(--surface-3);color:var(--ink-2);padding:1px 8px;border-radius:5px;font-size:11.5px;}
mark{background:color-mix(in srgb,var(--accent) 26%,transparent);color:inherit;border-radius:3px;padding:0 2px;}

/* ---------- 邀请码 ---------- */
.code{
  font-family:ui-monospace,"SF Mono",Menlo,monospace;font-size:13px;font-weight:680;
  letter-spacing:.09em;color:var(--accent-ink);background:var(--accent-wash);
  border:1px solid var(--accent-line);border-radius:6px;padding:2px 9px;white-space:nowrap;
}
.codeexp{display:block;font-size:10px;color:var(--ink-4);margin-top:3px;}
/* 关系录入行：只有「谁」和「什么关系」 */
.linkrow{display:grid;grid-template-columns:1fr auto 96px auto;gap:8px;align-items:center;margin-bottom:7px;}
.linkrow .lktxt{font-size:12px;color:var(--ink-3);white-space:nowrap;}
.linkrow select{font-size:12.5px;padding:5px 8px;}

/* ---------- 超管标记 ---------- */
.mk{
  font-size:10px;font-weight:680;padding:1px 6px;border-radius:4px;
  margin-left:5px;white-space:nowrap;letter-spacing:.02em;
}
.mk-key{background:var(--bad-wash);color:var(--bad);}
.mk-reg{background:var(--good-wash);color:var(--good);}
/* 名册里的标记开关：点一下就生效 */
.mkset{display:inline-flex;flex-direction:column;gap:2px;align-items:stretch;vertical-align:middle;}
.mktog{
  font-size:9.5px;font-weight:680;padding:0 6px;line-height:15px;border-radius:4px;white-space:nowrap;
  border:1px dashed var(--line-2);background:transparent;color:var(--ink-4);
  transition:opacity .12s,background .12s,color .12s,border-color .12s;letter-spacing:.02em;
  text-align:center;min-width:38px;
}
/* 未标记的开关平时隐形，鼠标划过那一行才出现 ——
   否则二十几行 × 两个空框，表格全是虚线噪音 */
.mktog:not(.on){opacity:0;}
tbody tr:hover .mktog,
.fcard:hover .mktog,
.mktog:focus-visible{opacity:1;}
@media (hover:none){ .mktog{opacity:1;} }
.mktog:hover{border-color:var(--ink-3);color:var(--ink-2);}
.mktog.on{border-style:solid;}
.mktog.mk-key.on{background:var(--bad-wash);color:var(--bad);border-color:color-mix(in srgb,var(--bad) 35%,transparent);}
.mktog.mk-reg.on{background:var(--good-wash);color:var(--good);border-color:color-mix(in srgb,var(--good) 35%,transparent);}
/* 名单变动记录：谁、什么时候、动了谁 */
.lglist{display:flex;flex-direction:column;gap:4px;}
.lg{font-size:12px;color:var(--ink-2);display:flex;align-items:baseline;gap:7px;flex-wrap:wrap;}
.lg b{color:var(--ink);font-weight:620;}
.lgt{font-size:10.5px;color:var(--ink-4);font-family:ui-monospace,Menlo,monospace;}
.lga,.lgd{font-size:10px;font-weight:680;padding:0 6px;border-radius:4px;}
.lga{background:var(--good-wash);color:var(--good);}
.lgd{background:var(--bad-wash);color:var(--bad);}

/* 标记人员的独立勾选区 */
.mkpanel{
  border:1px solid var(--accent-line);border-radius:10px;background:var(--accent-wash);
  padding:4px 12px 10px;margin-bottom:14px;
}
.mkph{
  font-size:10.5px;letter-spacing:.06em;font-weight:650;color:var(--accent-ink);
  padding:10px 4px 8px;border-bottom:1px solid var(--accent-line);
  display:flex;gap:12px;align-items:baseline;flex-wrap:wrap;
}
.mkph span{font-size:10.5px;font-weight:400;color:var(--ink-3);letter-spacing:0;}
.mkpanel .chk:hover{background:var(--surface);}
.chk.ses .lead{font-size:10px;color:var(--ink-4);}
/* 已离营（剩余 0 天）：变灰并排到最后 */
tbody tr.gone td{opacity:.45;}
tbody tr.gone td.name{font-weight:500;}
.chk.gone{opacity:.4;}
.mkchk{display:flex;align-items:center;gap:6px;font-size:12.5px;cursor:pointer;padding:3px 8px;border-radius:6px;}
.mkchk:hover{background:var(--surface);}
.mkchk input{width:auto;margin:0;accent-color:var(--accent);}

/* ---------- 收件层级与越级防误发 ---------- */
.seg button.cross[aria-pressed="true"]{background:var(--warn-wash);color:var(--warn);}
.tierwarn{
  margin-top:11px;background:var(--warn-wash);border:1px solid color-mix(in srgb,var(--warn) 32%,transparent);
  border-radius:8px;padding:10px 13px;font-size:12px;color:var(--ink-2);line-height:1.7;
}
.tierwarn b{color:var(--warn);}
.tierline{
  margin-top:12px;padding-top:10px;border-top:1px solid var(--line);
  font-size:11.5px;color:var(--ink-3);
}
.tierline b{color:var(--accent-ink);font-weight:680;}
.btn.warnbtn{background:var(--warn);border-color:var(--warn);color:#fff;}
.notice.justsent{
  border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-wash),var(--shadow-1);
  animation:landed .5s ease-out;
}
@keyframes landed{from{transform:translateY(-4px);opacity:.6}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.notice.justsent{animation:none;}}
.notice.recalled{opacity:.72;border-style:dashed;}
.notice.recalled h4{text-decoration:line-through;text-decoration-thickness:1px;color:var(--ink-3);}

/* 随通知附带的名单块。按收件人所属小组渲染，别组的看不到 */
.rosterblk{
  margin-top:12px;border:1px solid var(--accent-line);border-radius:9px;
  background:var(--accent-wash);padding:12px 14px;
}
.rosterblk .rt{
  font-size:10.5px;letter-spacing:.06em;font-weight:650;color:var(--accent-ink);
  padding-bottom:9px;margin-bottom:10px;border-bottom:1px solid var(--accent-line);
}
.rgrp{margin-bottom:11px;}
.rgrp:last-of-type{margin-bottom:0;}
.rgrp .rh{
  font-size:12px;font-weight:640;color:var(--ink);margin-bottom:5px;
  display:flex;align-items:baseline;gap:8px;
}
.rgrp .rh span{font-size:10.5px;color:var(--ink-3);font-family:ui-monospace,Menlo,monospace;font-weight:500;}
.rgrp .rr{display:flex;gap:9px;font-size:12.5px;color:var(--ink-2);line-height:1.7;align-items:baseline;}
.rgrp .rk{
  flex:none;width:38px;font-size:10.5px;font-weight:680;letter-spacing:.03em;
  color:var(--accent-ink);font-family:ui-monospace,Menlo,monospace;
}
.rosterblk .rn{font-size:10.5px;color:var(--ink-3);margin-top:10px;padding-top:9px;border-top:1px solid var(--accent-line);}

/* 总名单预览：所见即所得，跟发出去的 Telegram 消息长一样 */
.tgprev{
  border:1px solid var(--line);border-radius:10px;background:var(--surface-2);
  padding:16px 18px;font-size:13.5px;line-height:1.75;
}
.tgprev .tgt{font-size:15px;font-weight:680;color:var(--ink);letter-spacing:-.006em;}
.tgprev .tgm{font-size:12px;color:var(--ink-3);font-family:ui-monospace,Menlo,monospace;margin-bottom:14px;}
.tgsec{margin-bottom:13px;}
.tgsec .tgh{
  font-size:13px;font-weight:680;color:var(--accent-ink);
  display:flex;align-items:baseline;gap:7px;margin-bottom:2px;
}
.tgsec .tgh b{font-family:ui-monospace,Menlo,monospace;font-size:11.5px;color:var(--ink-3);font-weight:600;}
.tgsec .tgnames{color:var(--ink);line-height:1.9;}
.tgsec .tgnames u{text-decoration-thickness:1.5px;text-underline-offset:3px;font-weight:620;}
.tgprev .tgf{font-size:11px;color:var(--ink-4);padding-top:10px;border-top:1px solid var(--line);}

/* ---------- member view ---------- */

.empty{text-align:center;padding:56px 20px;color:var(--ink-4);font-size:13px;}
/* 空状态：不只说"没有"，还要说下一步做什么 */
.blank{
  border:1px dashed var(--line-2);border-radius:12px;background:var(--surface);
  padding:34px 30px;text-align:center;max-width:520px;margin:8px auto 0;
}
.blank h3{margin:0 0 7px;font-size:16px;font-weight:660;color:var(--ink);letter-spacing:-.008em;}
.blank p{margin:0 auto 18px;font-size:13px;color:var(--ink-3);max-width:38ch;line-height:1.75;}
.blank ol{
  text-align:left;max-width:33ch;margin:0 auto 20px;padding-left:20px;
  font-size:13px;color:var(--ink-2);line-height:1.9;
}
.blank ol li{margin:0;}
.blank ol b{color:var(--ink);font-weight:620;}

/* ---------- modal ---------- */
.overlay{
  position:fixed;inset:0;background:rgba(10,20,19,.42);backdrop-filter:blur(3px);
  display:grid;place-items:center;padding:24px;z-index:50;
}
.modal{
  background:var(--surface);border-radius:12px;box-shadow:var(--shadow-win);width:min(560px,100%);
  max-height:90vh;overflow-y:auto;
}
.modal-head{padding:16px 20px 12px;border-bottom:1px solid var(--line);}
.modal-head h3{margin:0;font-size:15.5px;font-weight:650;letter-spacing:-.008em;}
.modal-head p{margin:2px 0 0;font-size:11.5px;color:var(--ink-3);}
.modal-body{padding:18px 20px;display:grid;gap:14px;}
.modal-foot{padding:12px 20px 16px;display:flex;gap:8px;justify-content:flex-end;border-top:1px solid var(--line);}
.f2{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.f3{display:grid;grid-template-columns:1.4fr 1fr;gap:10px;}
.fieldset{border:1px solid var(--line);border-radius:9px;padding:12px 14px;background:var(--surface-2);}
.fieldset > .fl{margin-bottom:10px;}
.stayprev{
  font-size:12.5px;color:var(--ink-2);background:var(--accent-wash);border:1px solid var(--accent-line);
  border-radius:7px;padding:8px 12px;
}
.stayprev b{font-family:ui-monospace,Menlo,monospace;color:var(--accent-ink);font-size:14px;}

/* ---------- toast ---------- */
.toast{
  position:fixed;left:50%;transform:translateX(-50%);bottom:28px;z-index:80;
  background:var(--ink);color:var(--bg);padding:9px 18px;border-radius:9px;font-size:13px;font-weight:550;
  box-shadow:var(--shadow-2);display:flex;align-items:center;gap:16px;max-width:min(92vw,560px);
}
.toast .tundo{
  background:transparent;border:0;color:var(--bg);opacity:.7;font-weight:680;font-size:12.5px;
  text-decoration:underline;text-underline-offset:3px;padding:2px 2px;flex:none;
}
.toast .tundo:hover{opacity:1;}

/* ---------- legend ---------- */
.legend{display:flex;flex-wrap:wrap;gap:8px 18px;font-size:11.5px;color:var(--ink-3);margin-top:14px;align-items:center;}

/* 场次可见范围标记：非公开的场次要一眼认出来 —— 左侧改琥珀色粗条 +
   右上角挂标签 + 淡淡的斜纹底，三重信号，扫一眼就分得清 */
.vlock{
  font-size:9.5px;font-weight:700;padding:1px 7px;border-radius:0 9px 0 9px;
  background:var(--warn);color:#fff;white-space:nowrap;letter-spacing:.03em;
  position:absolute;top:0;right:0;
}
.vlock.big{position:static;border-radius:5px;font-size:10.5px;padding:2px 8px;margin-left:8px;}
.sestab{position:relative;}
.sestab:has(.vlock){
  border-left-color:var(--warn) !important;
  border-left-width:4px;
  background-image:repeating-linear-gradient(135deg,
    color-mix(in srgb,var(--warn) 7%,transparent) 0 6px, transparent 6px 12px);
}
.sestab:has(.vlock)[aria-pressed="true"]{
  background-color:var(--warn-wash);
  border-color:color-mix(in srgb,var(--warn) 40%,transparent);
}
.sescur:has(.vlock){border-color:color-mix(in srgb,var(--warn) 45%,transparent);}

/* 备用登录码 —— 超管专用，样式上跟普通操作拉开距离，提示它不是日常按钮 */
.rc-panel{display:flex;align-items:center;gap:20px;justify-content:space-between;
  padding:14px 18px;margin-bottom:14px;border-radius:12px;
  background:var(--warn-wash);border:1px solid color-mix(in srgb,var(--warn) 30%,transparent);}
.rc-panel b{font-size:13px;color:var(--ink);}
.rc-panel p{margin:4px 0 0;font-size:12px;line-height:1.6;color:var(--ink-2);max-width:62ch;}
.rc-panel .btn{flex:none;}
.rc-code{font:600 26px/1.3 ui-monospace,SFMono-Regular,Menlo,monospace;
  letter-spacing:.14em;text-align:center;padding:18px;margin-bottom:10px;
  border-radius:10px;background:var(--surface-3);color:var(--ink);
  user-select:all;-webkit-user-select:all;}
.rc-wait{padding:24px;text-align:center;color:var(--ink-4);font-size:13px;}
