/* No external fonts, scripts or CDNs: everything is served from our own domain so it loads in China. */
:root { --ink:#1d2433; --muted:#667085; --line:#e4e7ec; --bg:#f6f7f9; --card:#fff; --accent:#2f5bea; --warn:#b54708; --ok:#067647; --err:#b42318; }
* { box-sizing: border-box; }
body { margin:0; background:var(--bg); color:var(--ink); line-height:1.5;
  font:16px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", Roboto, Helvetica, Arial, sans-serif; }
a { color:var(--accent); text-decoration:none; } a:hover { text-decoration:underline; }
header.top { display:flex; align-items:center; gap:24px; padding:12px 24px; background:var(--card); border-bottom:1px solid var(--line); flex-wrap:wrap; }
.brand { font-weight:700; font-size:18px; color:var(--ink); }
header nav { display:flex; gap:18px; flex:1; }
.signout { display:flex; align-items:center; gap:12px; margin:0; }
.who { color:var(--muted); font-size:14px; }
main { max-width:1000px; margin:24px auto; padding:0 16px 48px; }
h1 { font-size:26px; margin:8px 0 16px; } h2 { font-size:18px; margin:0 0 12px; } h3 { font-size:16px; margin:20px 0 8px; }
.card { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:20px; margin-bottom:16px; overflow-x:auto; }
.card.narrow { max-width:420px; margin:48px auto; }
.muted { color:var(--muted); font-size:14px; }
.pre { white-space:pre-wrap; }
.stats { display:grid; grid-template-columns:repeat(auto-fit, minmax(180px, 1fr)); gap:16px; margin-bottom:16px; }
.stat { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:16px 20px; display:flex; flex-direction:column; }
.stat .num { font-size:32px; font-weight:700; } .stat .lbl { color:var(--muted); font-size:14px; }
table { width:100%; border-collapse:collapse; font-size:15px; }
th, td { text-align:left; padding:10px 8px; border-bottom:1px solid var(--line); vertical-align:middle; }
th { color:var(--muted); font-weight:600; font-size:13px; }
tr.off td { color:var(--muted); }
form.grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(220px, 1fr)); gap:12px; align-items:end; }
form.grid .wide { grid-column:1 / -1; }
label { display:flex; flex-direction:column; gap:4px; font-size:14px; color:var(--muted); }
label.check { flex-direction:row; align-items:center; gap:8px; }
input, select, textarea { font:inherit; color:var(--ink); padding:9px 10px; border:1px solid #cfd4dc; border-radius:8px; background:#fff; width:100%; }
input[type=checkbox] { width:auto; }
input.tz { width:170px; } input.rate { width:90px; }
button { font:inherit; padding:9px 16px; border:0; border-radius:8px; background:var(--accent); color:#fff; cursor:pointer; }
button:hover { filter:brightness(.95); }
button.link { background:none; color:var(--accent); padding:0 4px; }
form.inline { display:inline-flex; gap:6px; align-items:center; margin:0; }
.flash { padding:10px 14px; border-radius:8px; margin-bottom:12px; font-size:14px; border:1px solid var(--line); background:#fff; }
.flash.ok { border-color:#abefc6; background:#ecfdf3; color:var(--ok); }
.flash.error { border-color:#fecdca; background:#fef3f2; color:var(--err); }
.flash.warn { border-color:#fedf89; background:#fffaeb; color:var(--warn); }
@media (max-width:640px) { header.top { padding:12px 16px; gap:12px; } main { margin-top:16px; } }

/* ---- slice 2: schedule and calendar ---- */
.devbar { background:#fff4ce; color:#7a5b00; text-align:center; padding:6px 12px; font-size:13px; border-bottom:1px solid #f1dc8a; }
.btn { display:inline-block; padding:8px 14px; border-radius:8px; background:var(--accent); color:#fff; font-size:14px; text-decoration:none; }
.btn:hover { text-decoration:none; filter:brightness(.95); }
.btn.ghost { background:#fff; color:var(--ink); border:1px solid #cfd4dc; }
.btn.on { background:var(--ink); color:#fff; }
button.ghost { background:#fff; color:var(--ink); border:1px solid #cfd4dc; }
button.danger { background:var(--err); }
button.small { padding:6px 12px; font-size:14px; }
.calbar { display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; }
.calnav { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.calnav .sep { width:12px; }
.filters { display:flex; gap:16px; align-items:end; margin:8px 0 12px; flex-wrap:wrap; }
label.inl { flex-direction:row; align-items:center; gap:8px; }
label.inl select { width:auto; }
.legend { display:flex; gap:8px; flex-wrap:wrap; margin:8px 0 12px; }
.badge { display:inline-block; padding:2px 10px; border-radius:999px; font-size:12px; background:#eef0f4; color:var(--ink); }
.badge.s-proposed, .chip.s-proposed { background:#fff4ce; border-color:#f1dc8a; }
.badge.s-confirmed, .chip.s-confirmed { background:#dcf5e5; border-color:#a6e3bd; }
.badge.s-countered, .chip.s-countered { background:#dbe8ff; border-color:#aac4fb; }
.badge.s-declined, .chip.s-declined { background:#fde1de; border-color:#f6b6b0; }
.badge.s-cancelled, .chip.s-cancelled { background:#eef0f4; border-color:#d7dbe2; color:var(--muted); text-decoration:line-through; }
.week { display:grid; grid-template-columns:repeat(7, minmax(0, 1fr)); gap:8px; }
.day { background:var(--card); border:1px solid var(--line); border-radius:10px; padding:8px; min-height:160px; display:flex; flex-direction:column; gap:6px; }
.day.today, .cell.today { border-color:var(--accent); box-shadow:0 0 0 1px var(--accent) inset; }
.dh { font-size:13px; color:var(--muted); }
.dh strong { color:var(--ink); font-size:16px; }
.chip { display:flex; flex-direction:column; gap:1px; padding:5px 7px; border-radius:8px; border:1px solid var(--line); color:var(--ink); font-size:12px; line-height:1.3; text-decoration:none; }
.chip:hover { text-decoration:none; filter:brightness(.96); }
.chip .t { font-weight:700; } .chip .m { color:var(--muted); }
.month { display:grid; grid-template-columns:repeat(7, minmax(0, 1fr)); gap:4px; }
.mh { font-size:12px; color:var(--muted); text-align:center; padding:4px 0; }
.cell { background:var(--card); border:1px solid var(--line); border-radius:8px; min-height:104px; padding:4px; display:flex; flex-direction:column; gap:3px; }
.cell.out { background:#fafbfc; opacity:.65; }
.cell .dn { font-size:12px; color:var(--muted); align-self:flex-end; }
.cell .more { font-size:11px; color:var(--muted); }
.cell .chip .n { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
table.kv th { width:160px; }
.actions { display:flex; gap:10px; flex-wrap:wrap; align-items:center; }
fieldset.wide { grid-column:1 / -1; border:1px solid var(--line); border-radius:10px; padding:12px; display:flex; flex-direction:column; gap:10px; }
.days { display:flex; gap:14px; flex-wrap:wrap; }
.devrow { margin:6px 0; } .devrow button { width:100%; text-align:left; }
@media (max-width:860px) { .week { grid-template-columns:1fr; } .day { min-height:0; } .month { grid-template-columns:repeat(7, minmax(0, 1fr)); } .cell { min-height:70px; } .cell .chip .m, .cell .chip .t { display:none; } }

.chip .hw { font-style:italic; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

.cell .chip .hw { display:none; }
textarea.wechat { font-family:inherit; line-height:1.5; background:#f7f8fa; }
.lblt { display:block; font-size:13px; color:var(--muted); margin-bottom:4px; }

.badge.fb-missing, .chip.fb-missing { background:#fde1de; border-color:#e8847b; }
.badge.fb-unsent, .chip.fb-unsent { background:#ffe2bd; border-color:#f0a443; }
.badge.fb-sent, .chip.fb-sent { background:#e6e9ef; border-color:#c4cad4; }
.chip.fb-missing { border-left:4px solid #d4382c; }
.chip.fb-unsent { border-left:4px solid #e48a12; }
.chip.fb-sent { border-left:4px solid #5b8e6b; }
.chip .fbl { font-weight:600; color:var(--ink); }
.cell .chip .fbl { display:none; }
nav .count { background:#d4382c; color:#fff; border-radius:10px; padding:0 7px; font-size:12px; margin-left:2px; }
td.rowact { display:flex; gap:10px; align-items:center; white-space:nowrap; }
td.rowact form { margin:0; }
.nw { white-space:nowrap; }

.chatpage { display:grid; grid-template-columns:1fr; gap:14px; }
.chatpage.withside { grid-template-columns:260px 1fr; align-items:start; }
.chatside h2 { margin-top:0; }
.room { display:grid; grid-template-columns:1fr auto; gap:2px 8px; padding:9px 10px; border-radius:8px; color:var(--ink); text-decoration:none; border:1px solid transparent; }
.room:hover { background:#f1f3f8; text-decoration:none; }
.room.on { background:#e8efff; border-color:#c5d5fb; }
.room .rn { font-weight:600; }
.room .rp { grid-column:1 / -1; font-size:12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.chatlog { height:55vh; min-height:280px; overflow-y:auto; border:1px solid var(--line); border-radius:10px; padding:12px; background:#fafbfd; display:flex; flex-direction:column; gap:8px; }
.msg { max-width:80%; align-self:flex-start; background:#fff; border:1px solid var(--line); border-radius:12px; padding:7px 11px; }
.msg.mine { align-self:flex-end; background:#e8efff; border-color:#c5d5fb; }
.msg .meta { font-size:12px; margin-bottom:2px; }
.msg .body { white-space:pre-wrap; overflow-wrap:anywhere; }
.dayline { align-self:center; font-size:12px; color:var(--muted); background:#eef0f4; border-radius:10px; padding:1px 10px; }
.chatform { display:flex; gap:10px; align-items:flex-end; margin-top:10px; }
.chatform textarea { flex:1; resize:vertical; }
@media (max-width:860px) { .chatpage.withside { grid-template-columns:1fr; } .msg { max-width:92%; } }
.room .count { background:#d4382c; color:#fff; border-radius:10px; padding:0 7px; font-size:12px; align-self:center; }
.room .count[hidden] { display:none; }

.shots { display:grid; grid-template-columns:repeat(auto-fill, minmax(180px, 1fr)); gap:12px; }
.shots figure { margin:0; border:1px solid var(--line); border-radius:10px; padding:6px; background:#fff; }
.shots img { width:100%; height:140px; object-fit:cover; border-radius:6px; display:block; }
.shots figcaption { font-size:12px; margin-top:4px; overflow-wrap:anywhere; }
.filelist { padding-left:18px; } .filelist li { margin:4px 0; }
.numform { display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin:6px 0 12px; }
