:root{color-scheme:light;--bg:#f6f4ef;--card:#fff;--ink:#23262b;--mute:#6b7078;--line:#e4e0d6;--main:#2f6f62;--main-soft:#e3efec;--warn:#b5532a;--warn-soft:#f8e9e1;--r:14px}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.5 -apple-system,BlinkMacSystemFont,"PingFang SC","Noto Sans SC","Microsoft YaHei",sans-serif}
#app{max-width:640px;margin:0 auto;padding:16px 16px 40px}
h1{font-size:22px;margin:4px 0 2px}h2{font-size:17px;margin:22px 0 8px}p{margin:6px 0}
.mute{color:var(--mute);font-size:14px}.pad{padding:16px}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px;margin:10px 0}
button,select,input{font:inherit}
button{border:0;border-radius:10px;padding:11px 14px;background:var(--main);color:#fff;font-weight:600;cursor:pointer;min-height:44px}
button.alt{background:var(--main-soft);color:var(--main)}
button.warn{background:var(--warn-soft);color:var(--warn)}
button.link{background:none;color:var(--main);padding:8px 0;min-height:0;font-weight:500}
button:disabled{opacity:.55}
input,select{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#fff;min-height:44px;color:var(--ink)}
label{display:block;font-size:14px;color:var(--mute);margin:8px 0 3px}
.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.row>.grow{flex:1;min-width:120px}

/* 顶栏与模块菜单 */
.bar{display:flex;align-items:center;gap:10px;position:sticky;top:0;z-index:5;background:var(--bg);margin:-16px -16px 0;padding:10px 16px;border-bottom:1px solid var(--line)}
.bar .who{flex:1;min-width:0}.bar .who strong{display:block;font-size:18px;line-height:1.2}
.bar .who span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bar .burger{background:#fff;color:var(--ink);border:1px solid var(--line);font-size:22px;line-height:1;padding:0;width:46px}
.menu{position:sticky;top:67px;z-index:4;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:6px;margin:8px 0;box-shadow:0 8px 24px rgba(0,0,0,.08)}
.menu button{display:block;width:100%;text-align:left;background:none;color:var(--ink);font-weight:500}
.menu button.on{background:var(--main-soft);color:var(--main);font-weight:600}
.menu hr{border:0;border-top:1px solid var(--line);margin:6px 8px}

.names{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:8px;margin-top:10px}
.names button{background:#fff;color:var(--ink);border:1px solid var(--line);font-weight:500}
.chips{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0}
.chips button{min-height:38px;padding:6px 12px;background:#fff;color:var(--ink);border:1px solid var(--line)}
.chips button.on,.tabs button.on{background:var(--main);color:#fff;border-color:var(--main)}
.tabs{display:flex;gap:6px;margin:12px 0}
.tabs button{flex:1;background:#fff;color:var(--ink);border:1px solid var(--line)}
.ok{text-align:center;padding:36px 16px}.ok .big{font-size:52px;line-height:1;color:var(--main)}
.ok h1.name{font-size:30px}.ok .row{justify-content:center;margin-top:16px}
.msg{padding:10px 12px;border-radius:10px;background:var(--warn-soft);color:var(--warn);margin:10px 0}
.tag{display:inline-block;font-size:13px;padding:1px 8px;border-radius:99px;background:var(--main-soft);color:var(--main)}
.tag.hot{background:var(--warn-soft);color:var(--warn)}
.rosterline{display:flex;align-items:center;justify-content:space-between;padding:9px 0;border-bottom:1px solid var(--line)}
.rosterline:last-child{border:0}.rosterline input{width:24px;height:24px;min-height:0}
#qr{display:flex;justify-content:center;background:#fff;padding:18px;border-radius:var(--r)}
#qr img,#qr canvas{width:min(78vw,420px)!important;height:auto!important}
details summary{cursor:pointer;color:var(--main);padding:8px 0}
.full{width:100%}.mt{margin-top:12px}.left{text-align:left;margin:4px 0}
#wait{position:fixed;left:16px;right:16px;bottom:16px;z-index:9;max-width:608px;margin:0 auto;padding:12px 14px;border-radius:12px;background:var(--ink);color:#fff;font-size:15px;text-align:center}
label.rosterline{font-size:16px;color:var(--ink);margin:0;cursor:pointer}
.names button.done{background:var(--main-soft);color:var(--main);border-color:var(--main-soft);opacity:1;cursor:default}
.ok .lead{font-size:19px;line-height:1.5;margin-top:18px}.ok .sub{font-size:17px;color:var(--mute);margin:18px 0 10px}.ok h1{font-size:28px}.ok>p{font-size:18px}
