:root{
  --bg:#f4f5f7; --card:#fff; --line:#e6e8eb; --line2:#f0f1f3;
  --tx:#1b1f24; --tx2:#5c636b; --tx3:#8b929a;
  --ok:#0a7a4a; --okbg:#e9f9f0;
  --no:#98a2b3; --nobg:#f1f3f5;
  --warn:#b42318; --warnbg:#fef4f2;
  --p0:#b42318; --p1:#b54708; --p2:#5c636b;
  --pri:#1552d0;
  --r:12px;
  --sb:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html{-webkit-text-size-adjust:100%}
body{background:var(--bg);color:var(--tx);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  line-height:1.5;font-size:15px;
  padding-bottom:calc(74px + var(--sb))}
.hidden{display:none!important}
button{font:inherit}

/* ---- 登录 ---- */
.gate{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}
.gate-in{width:100%;max-width:340px}
.gate h1{font-size:22px;font-weight:650;letter-spacing:-.3px}
.gate-sub{font-size:13px;color:var(--tx3);margin-top:3px;margin-bottom:20px}
.seg2{display:flex;background:#e9ebee;border-radius:9px;padding:2px;margin-bottom:16px}
.seg2 button{flex:1;border:none;background:none;font-size:13px;padding:7px;
  border-radius:7px;cursor:pointer;color:var(--tx3)}
.seg2 button.on{background:#fff;color:var(--tx);font-weight:600}
.fl{display:block;font-size:12px;color:var(--tx2);margin:12px 0 5px}
.opt{color:var(--tx3);margin-left:4px}
.fi{width:100%;font:inherit;font-size:16px;padding:10px 12px;
  border:1px solid var(--line);border-radius:9px;background:#fff;color:var(--tx)}
.fi:focus{outline:none;border-color:#a8c2f0}
.bp{width:100%;margin-top:18px;font-size:15px;font-weight:600;padding:11px;
  border:none;border-radius:9px;background:#1b1f24;color:#fff;cursor:pointer}
.bp:disabled{opacity:.5}
.gt{font-size:12px;color:var(--tx3);margin-top:12px;line-height:1.5}
.gerr{font-size:13px;color:var(--warn);background:var(--warnbg);
  border-radius:8px;padding:8px 10px;margin-top:12px;display:none}
.gerr.on{display:block}

/* ---- 顶栏 ---- */
.hd{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.95);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.hd-row{display:flex;align-items:center;gap:10px;padding:10px 14px}
.hd-l{flex:1;min-width:0}
.hd h1{font-size:16px;font-weight:650;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hd-s{font-size:11.5px;color:var(--tx3);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hd-s span:first-child{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.seg3{display:flex;background:#e9ebee;border-radius:8px;padding:2px;gap:2px;flex:none}
.seg3 button{border:none;background:none;font-size:12px;padding:4px 10px;
  border-radius:6px;cursor:pointer;color:var(--tx3);max-width:64px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.seg3 button.on{background:#fff;color:var(--tx);font-weight:600}

/* 同行位：一枚 = 一位（Ⓜ️ / 🐟 这样） */
.mems{display:flex;gap:5px;flex:none;max-width:190px;overflow-x:auto;
  scrollbar-width:none;-webkit-overflow-scrolling:touch}
.mems::-webkit-scrollbar{display:none}
.mems .m{flex:none;min-width:29px;height:29px;padding:0 8px;border-radius:99px;
  border:1px solid var(--line);background:#fff;color:var(--tx2);font-size:12.5px;
  font-weight:600;cursor:pointer;line-height:1;white-space:nowrap}
.mems .m.on{background:#1b1f24;border-color:#1b1f24;color:#fff}
.mems .m.free{background:#fafbfc;color:var(--tx3);border-style:dashed}
.mems .m.free::after{content:" ＋";font-size:10px}
.mems .m.add{color:var(--tx3);font-size:16px;font-weight:400;padding:0 9px}
.slrow{display:grid;grid-template-columns:1fr 1fr;gap:8px}

/* 选同行位 */
.slp{display:grid;gap:8px;margin-top:12px}
.slp .sl{display:flex;align-items:center;gap:10px;padding:13px 14px;
  border:1px solid var(--line);border-radius:11px;background:#fff;
  cursor:pointer;text-align:left}
.slp .sl b{flex:none;font-size:16px;font-weight:600}
.slp .sl span{font-size:12px;color:var(--tx3);margin-left:auto}
.slp .sl.on{border-color:#1b1f24;background:#f6f7f9}
.slp .sl.taken{background:#fafbfc;cursor:not-allowed;opacity:.6}
.slp .sl.taken span{color:var(--tx2)}

/* ---- 标签页 ---- */
.tabs{display:flex;gap:6px;padding:10px 14px;background:var(--bg);
  position:sticky;top:49px;z-index:29}
.tabs button{font-size:13px;padding:6px 13px;border-radius:8px;
  border:1px solid var(--line);background:#fff;color:var(--tx2);cursor:pointer}
.tabs button.on{background:#1b1f24;border-color:#1b1f24;color:#fff;font-weight:600}
.bd{display:inline-block;min-width:15px;padding:0 4px;border-radius:99px;
  background:#fdeceb;color:var(--warn);font-size:10.5px;font-weight:700;
  font-variant-numeric:tabular-nums;margin-left:4px}
.tabs button.on .bd{background:#fff;color:var(--tx)}

/* ---- 日期条 ---- */
.days{display:flex;gap:5px;overflow-x:auto;padding:2px 14px 10px;scrollbar-width:none}
.days::-webkit-scrollbar{display:none}
.day{flex:none;border:1px solid var(--line);background:#fff;border-radius:10px;
  padding:6px 10px;cursor:pointer;text-align:center;min-width:54px}
.day .d1{font-size:12.5px;font-weight:650;white-space:nowrap}
.day .d2{font-size:9.5px;color:var(--tx3);margin-top:1px;white-space:nowrap}
.day.on{background:#eef4ff;border-color:#a8c2f0}
.day.full .d1{color:var(--ok)}

/* ---- 进度 ---- */
.pbar{display:flex;align-items:center;gap:9px;padding:0 14px 10px}
.ptrack{flex:1;height:6px;background:#e4e7ea;border-radius:99px;overflow:hidden}
.pfill{height:100%;background:var(--ok);width:0;transition:width .2s;border-radius:99px}
.pn{font-size:11.5px;color:var(--tx2);font-variant-numeric:tabular-nums;min-width:76px;text-align:right}

/* ---- 卡片 ---- */
.card{background:var(--card);border-radius:var(--r);margin:0 12px 9px;overflow:hidden}
.ch{display:flex;align-items:center;gap:7px;padding:10px 13px 7px;font-size:13.5px;font-weight:650}
.ch .c{margin-left:auto;font-size:11px;color:var(--tx3);font-weight:500;font-variant-numeric:tabular-nums}
.ch .c.done{color:var(--ok)}

/* ---- 条目 ---- */
.it{display:flex;gap:10px;align-items:flex-start;padding:9px 13px;
  border-top:1px solid var(--line2);cursor:pointer}
.it:first-of-type{border-top:none}
.bx{flex:none;width:22px;height:22px;border-radius:7px;border:1.7px solid #ccd1d8;
  background:#fff;display:flex;align-items:center;justify-content:center;
  font-size:12px;color:#fff;margin-top:1px}
.it.yes .bx{background:var(--ok);border-color:var(--ok)}
.it.yes .bx::after{content:"✓";font-weight:700}
.it.skip .bx{background:var(--nobg);border-color:var(--nobg)}
.it.skip .bx::after{content:"–";color:var(--no);font-weight:700}
.it.yes .nm,.it.skip .nm{color:var(--tx3)}
.it.skip .nm{text-decoration:line-through;text-decoration-color:#ccd1d8}
.bd2{flex:1;min-width:0}
.nm{font-size:14.5px;font-weight:500;word-break:break-word}
.mt{font-size:11.5px;color:var(--tx3);margin-top:3px;line-height:1.45}
.mt em{font-style:normal;background:#f1f3f5;border-radius:4px;padding:0 5px;margin-right:3px}
.mt em.f{background:#eef4ff;color:#1849a9}
.q{font-size:11.5px;color:var(--warn);background:var(--warnbg);border-radius:6px;
  padding:4px 8px;margin-top:5px;line-height:1.45}
.tags{display:flex;gap:4px;margin-top:6px;flex-wrap:wrap}
.tg{font-size:10.5px;padding:1px 7px;border-radius:99px;background:#f1f3f5;color:var(--tx2)}
.tg.p0{background:var(--warnbg);color:var(--p0)}
.tg.p1{background:#fffaeb;color:var(--p1)}
.tg.w{background:#eef4ff;color:#1849a9}
.inp{width:100%;margin-top:6px;font:inherit;font-size:13px;padding:6px 9px;
  border:1px solid var(--line);border-radius:7px;background:#fafbfc;color:var(--tx)}
.inp:focus{outline:none;border-color:#a8c2f0;background:#fff}
.edit{margin-left:auto;flex:none;align-self:center;width:30px;height:30px;
  border:none;background:none;color:var(--tx3);cursor:pointer;font-size:15px}

/* 并列双人打卡 */
.two{display:flex;gap:8px;margin-top:6px}
.two .t{flex:1;display:flex;align-items:center;gap:5px;font-size:11.5px;
  color:var(--tx3);background:#fafbfc;border:1px solid var(--line);
  border-radius:7px;padding:4px 7px;cursor:pointer}
.two .t.y{border-color:#a9e5c4;background:var(--okbg);color:var(--ok);font-weight:600}
.two .t.s{border-color:var(--line2);background:var(--nobg);color:var(--no)}
.two .t .sw{width:7px;height:7px;border-radius:50%;background:#ccd1d8;flex:none}
.two .t.y .sw{background:var(--ok)}
.two .t.s .sw{background:var(--no)}

/* 筛选段：全部 / 待打包 / 已打包 */
.segf{display:flex;gap:5px;padding:0 14px 10px}
.segf button{font-size:12px;padding:5px 11px;border-radius:8px;border:1px solid var(--line);
  background:#fff;color:var(--tx2);cursor:pointer}
.segf button.on{background:#1b1f24;border-color:#1b1f24;color:#fff;font-weight:600}

/* 携带人标签：可点开多选 */
.brow{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:2px}
.brow .tags{margin-top:0}
.ow{display:inline-flex;align-items:center;gap:4px;font-size:11px;padding:2px 8px;
  border-radius:99px;background:#eef4ff;color:#1849a9;cursor:pointer;
  border:1px solid #dbe6fb}
.ow i{font-style:normal;opacity:.5}
.ow.none{background:#f6f7f9;color:var(--tx3);border-color:var(--line2)}
.ow.none span{border-bottom:1px dashed var(--tx3)}

/* 携带人行：勾 + 位名 + 备注输入 */
.ck2{display:flex;align-items:center;gap:9px;padding:9px 0;
  border-top:1px solid var(--line2);cursor:pointer}
.ck2:first-of-type{border-top:none}
.ck2 input[type=checkbox]{width:19px;height:19px;accent-color:var(--ok);flex:none}
.ck2 b{flex:none;font-size:14.5px;font-weight:600}
.ck2 .sn{flex:1;min-width:0;font-size:13.5px;padding:7px 9px}
.ck2 .opt{margin-left:auto}

/* 每人一枚状态点 */
.who{display:flex;gap:5px;flex-wrap:wrap;margin-top:7px}
.who .w{display:inline-flex;align-items:center;gap:4px;font-size:11px;padding:3px 8px;
  border-radius:99px;border:1px solid var(--line);background:#fafbfc;
  color:var(--tx3);cursor:pointer}
.who .w i{width:6px;height:6px;border-radius:50%;background:#ccd1d8;flex:none}
.who .w.yes{background:var(--okbg);border-color:#a9e5c4;color:var(--ok);font-weight:600}
.who .w.yes i{background:var(--ok)}
.who .w.skip{background:var(--nobg);border-color:var(--line2);color:var(--no)}
.who .w.skip i{background:var(--no)}
.tdy{display:inline-block;font-style:normal;font-size:9px;font-weight:600;
  color:#fff;background:var(--warn);border-radius:4px;padding:0 3px;
  margin-left:3px;vertical-align:1px}
.dged{display:block;width:100%;margin:9px 13px 11px;font-size:12.5px;padding:7px;
  border:1px solid var(--line2);border-radius:8px;background:#fff;
  color:var(--tx2);cursor:pointer}
.ph{font-size:15.5px;font-weight:650;margin-top:4px}

/* ---- 行程 ---- */
.dc{border:1px solid #dbe6fb}
.th{font-size:15px;font-weight:650;padding:0 13px 8px;letter-spacing:-.2px}
.sp{padding:0 13px 4px}
.spi{display:flex;gap:8px;align-items:flex-start;font-size:13.5px;
  color:var(--tx);line-height:1.5;padding:2px 0}
.spn{flex:none;width:5px;height:5px;border-radius:50%;background:#b6c3d8;margin-top:8px}
.mn{font-size:12px;color:var(--tx2);background:#f6f7f9;border-radius:7px;
  margin:6px 13px 0;padding:7px 9px;line-height:1.5}
.tp{margin:6px 13px 0;padding:7px 9px;border-radius:7px;background:var(--warnbg)}
.tpi{font-size:12px;color:var(--p0);line-height:1.5}
.tpi+.tpi{margin-top:4px}
.card[data-day]{cursor:default}

/* ---- 模板 ---- */
.tbar{display:flex;gap:6px;padding:0 13px 8px}
.tbar .tb{flex:1;font:inherit;font-size:12.5px;padding:6px 10px;border-radius:8px;
  border:1px solid var(--line2);background:#fff;color:var(--tx2);cursor:pointer}
.tbar .tb:active{background:#f1f3f5}
.otpl{border:1px solid var(--line);border-radius:9px;margin-top:12px;overflow:hidden}
.otpl .chk{padding:10px 12px;border-bottom:1px solid var(--line);margin:0}
.otpl .chk:last-child{border-bottom:none}
.otpl .chk .opt{margin-left:auto;font-size:11px;color:var(--tx3)}
p.gt b.warn{color:var(--p0)}
textarea.sn{line-height:1.5;font-size:13.5px}

/* ---- 空态 ---- */
.empty{text-align:center;padding:38px 20px;color:var(--tx3);font-size:13.5px;line-height:1.7}
.empty b{display:block;color:var(--tx2);font-size:14.5px;margin-bottom:5px}

/* ---- 悬浮按钮 ---- */
.fab{position:fixed;right:16px;bottom:calc(18px + var(--sb));width:50px;height:50px;
  border:none;border-radius:50%;background:#1b1f24;color:#fff;font-size:25px;
  cursor:pointer;box-shadow:0 4px 14px rgba(16,24,40,.22);z-index:40;
  line-height:1;padding-bottom:3px}
.fab:active{transform:scale(.95)}

/* ---- 弹层：宽屏居中卡片，窄屏底部抽屉 ---- */
.sheet{position:fixed;inset:0;background:rgba(16,24,40,.45);z-index:50;
  display:flex;align-items:center;justify-content:center;padding:20px}
.sheet-in{width:100%;max-width:440px;max-height:86vh;display:flex;flex-direction:column;
  background:#fff;border-radius:14px;box-shadow:0 12px 40px rgba(16,24,40,.22);
  animation:pop .16s ease-out}
@keyframes pop{from{opacity:0;transform:translateY(8px) scale(.99)}}

/* 头部固定，标题 + 关闭 */
.sh-hd{display:flex;align-items:center;gap:10px;padding:16px 18px 10px;flex:none}
.sh-hd h3{flex:1;font-size:16.5px;font-weight:650;letter-spacing:-.2px}
.sh-x{flex:none;width:30px;height:30px;border:none;border-radius:8px;background:#f1f3f5;
  color:var(--tx2);font-size:17px;line-height:1;cursor:pointer}
.sh-x:active{background:#e4e7ea}

/* 中间滚动区 */
.sh-bd{flex:1;overflow-y:auto;padding:0 18px;-webkit-overflow-scrolling:touch}

/* 底部操作条固定，不随内容滚动 */
.sh-ft{flex:none;padding:12px 18px 16px;border-top:1px solid var(--line2);
  display:flex;gap:9px;background:#fff}

.si{display:block;font-size:12.5px;color:var(--tx2);margin:14px 0 6px;font-weight:500}
.si:first-child{margin-top:4px}
.si .opt{color:var(--tx3);margin-left:4px;font-weight:400}
.sn{width:100%;font:inherit;font-size:15px;padding:10px 12px;
  border:1px solid var(--line2);border-radius:9px;color:var(--tx);background:#fff;
  font-family:inherit}
.sn:focus{outline:none;border-color:#a8c2f0;box-shadow:0 0 0 3px rgba(168,194,240,.18)}
textarea.sn{line-height:1.6;font-size:14px;resize:vertical;min-height:64px}

.srow{display:flex;gap:9px}
.sbtn{flex:1;font-size:15px;padding:12px;border:none;border-radius:10px;
  background:#1b1f24;color:#fff;cursor:pointer;font-weight:600}
.sbtn:active{opacity:.85}
.sbtn:disabled{opacity:.45}
.sbtn.sec{background:#f1f3f5;color:var(--tx2);font-weight:500}
.sbtn.dan{background:var(--warnbg);color:var(--warn);flex:0 0 auto;padding-left:16px;padding-right:16px}
.chk{display:flex;align-items:center;gap:10px;padding:11px 0;font-size:14.5px;
  border-top:1px solid var(--line2);cursor:pointer}
.chk:first-of-type{border-top:none}
.chk input{width:20px;height:20px;accent-color:var(--ok);flex:none}
.code{display:flex;align-items:center;gap:10px;background:#f7f8fa;
  border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin-top:4px}
.code .cc{flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:20px;font-weight:650;letter-spacing:.5px}
.code .cb{border:none;background:none;color:var(--pri);font-size:13.5px;
  cursor:pointer;white-space:nowrap;padding:4px}

@media(max-width:520px){
  .sheet{align-items:flex-end;padding:0}
  .sheet-in{max-width:none;max-height:92vh;border-radius:16px 16px 0 0;animation:up .2s ease-out}
  @keyframes up{from{transform:translateY(24px)}}
  .sh-ft{padding-bottom:calc(16px + var(--sb))}
}

.toast{position:fixed;left:50%;bottom:calc(84px + var(--sb));transform:translateX(-50%);
  background:#1b1f24;color:#fff;font-size:13px;padding:8px 15px;border-radius:8px;
  z-index:60;opacity:0;pointer-events:none;transition:opacity .2s;white-space:nowrap}
.toast.on{opacity:1}

@media(min-width:640px){
  .hd-row,.tabs,.days,.pbar{max-width:600px;margin-left:auto;margin-right:auto}
  .card{max-width:576px;margin-left:auto;margin-right:auto}
  .sheet-in{max-width:600px;margin:0 auto}
}
@media print{
  .hd,.tabs,.days,.pbar,.fab,.tabs{display:none}
  body{background:#fff;padding:0}
  .card{border:1px solid #ddd;break-inside:avoid}
}