:root{
  --primary:#0b7285; --primary-dark:#0a5c6b; --accent:#22b8cf;
  --bg:#f2f6f8; --card:#fff; --text:#1f2933; --muted:#64748b; --line:#e2e8f0;
  --warn:#f59e0b; --info:#3b82f6; --purple:#8b5cf6; --ok:#10b981; --danger:#ef4444;
  --radius:12px;
  --shadow:0 1px 3px rgba(15,42,60,.07),0 4px 14px rgba(15,42,60,.05);
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html{scroll-behavior:smooth}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--text);line-height:1.65;font-size:15px;
  padding-bottom:64px;
}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;background:none;font-size:inherit}
input,select,textarea{font-family:inherit;font-size:15px;color:var(--text)}
/* ---------- header ---------- */
header{background:linear-gradient(135deg,#0a5c6b,#0b7285 60%,#1498ad);color:#fff;position:sticky;top:0;z-index:40;box-shadow:0 2px 8px rgba(15,42,60,.18)}
.hd-inner{max-width:680px;margin:0 auto;padding:10px 14px;display:flex;align-items:center;justify-content:space-between}
.logo{font-size:17px;font-weight:700;letter-spacing:.5px;white-space:nowrap}
.hd-right{display:flex;align-items:center;gap:8px;flex:0 0 auto}
.user-chip{
  background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.3);color:#fff;
  border-radius:999px;padding:3px 10px;font-size:12.5px;display:inline-flex;align-items:center;gap:6px;
  max-width:56vw;min-width:0;
}
.user-chip .u-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.user-chip .u-role{background:rgba(255,255,255,.22);border-radius:999px;padding:0 6px;font-size:11px;flex:0 0 auto}
.user-chip .logout{background:none;border:none;color:#ffe3e3;font-size:12px;padding:0;cursor:pointer;flex:0 0 auto}
.help-btn{
  background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.35);
  color:#fff;border-radius:8px;width:30px;height:30px;font-size:15px;display:inline-flex;
  align-items:center;justify-content:center;flex:0 0 auto;text-decoration:none;
}
/* ---------- main ---------- */
main{max-width:680px;margin:0 auto;padding:14px 12px 20px}
.page-title{font-size:17px;font-weight:700;margin:6px 2px 12px;color:var(--primary-dark)}
/* ---------- card ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px 16px;margin-bottom:12px}
.card h3{font-size:14.5px;font-weight:700;margin-bottom:8px;color:var(--primary-dark);display:flex;align-items:center;gap:6px}
.card h3::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--accent)}
/* ---------- badges ---------- */
.st{display:inline-block;font-size:12px;padding:2px 10px;border-radius:999px;font-weight:600;white-space:nowrap}
.st.wait{background:#fef3c7;color:#b45309}
.st.doing{background:#dbeafe;color:#1d4ed8}
.st.close{background:#ede9fe;color:#6d28d9}
.st.done{background:#d1fae5;color:#047857}
.st.cancel{background:#f1f5f9;color:#64748b}
/* ---------- forms ---------- */
.field{margin-bottom:12px}
.field label{display:block;font-size:13px;font-weight:600;color:var(--muted);margin-bottom:5px}
.field label .req{color:var(--danger)}
.input,.select,.textarea{
  width:100%;border:1.5px solid var(--line);border-radius:10px;padding:9px 12px;
  background:#fff;outline:none;transition:border-color .15s;
}
.input:focus,.select:focus,.textarea:focus{border-color:var(--accent)}
.textarea{min-height:72px;resize:vertical}
.suggest{list-style:none;border:1px solid var(--line);border-radius:10px;margin-top:4px;overflow:hidden;background:#fff}
.suggest li{padding:9px 12px;font-size:14px;border-bottom:1px solid var(--line);cursor:pointer}
.suggest li:last-child{border-bottom:none}
.suggest li small{color:var(--muted);margin-left:6px}
.suggest li:active{background:#f0fafc}
/* ---------- photo group ---------- */
.photos{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.photos[data-max="2"]{grid-template-columns:repeat(2,1fr)}
.ph{position:relative;aspect-ratio:1/1;border-radius:10px;overflow:hidden;background:#0f172a;border:1px solid var(--line)}
.ph img{width:100%;height:100%;object-fit:cover;display:block}
.ph .del{
  position:absolute;top:4px;right:4px;width:22px;height:22px;border-radius:50%;
  background:rgba(0,0,0,.55);color:#fff;font-size:12px;line-height:22px;text-align:center;
}
.ph-add{
  aspect-ratio:1/1;border:1.5px dashed #b9dce4;border-radius:10px;background:#f4fbfc;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:var(--primary);font-size:12px;
}
.ph-add .plus{font-size:26px;line-height:1}
.ph-cap{font-size:12px;color:var(--muted);margin-top:6px}
/* ---------- buttons ---------- */
.btn{
  display:block;width:100%;text-align:center;padding:12px;border-radius:11px;
  font-size:15.5px;font-weight:600;transition:.15s;
}
.btn.primary{background:var(--primary);color:#fff}
.btn.primary:active{background:var(--primary-dark)}
.btn.success{background:var(--ok);color:#fff}
.btn.warn{background:var(--warn);color:#fff}
.btn.ghost{background:#fff;color:var(--primary);border:1.5px solid var(--primary)}
.btn.danger{background:#fff;color:var(--danger);border:1.5px solid var(--danger)}
.btn:disabled{opacity:.5;pointer-events:none}
.btn-row{display:flex;gap:10px}
.btn-row .btn{flex:1}
/* ---------- list ---------- */
.tabs{display:flex;gap:6px;overflow-x:auto;margin-bottom:12px;padding-bottom:2px;-webkit-overflow-scrolling:touch}
.tabs::-webkit-scrollbar{display:none}
.tabs button{
  flex:0 0 auto;border:1.5px solid var(--line);background:#fff;color:var(--muted);
  border-radius:999px;padding:6px 14px;font-size:13.5px;
}
.tabs button.active{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:600}
.searchbar{position:relative;margin-bottom:12px}
.searchbar input{
  width:100%;border:1.5px solid var(--line);border-radius:999px;padding:9px 14px 9px 36px;background:#fff;outline:none;
}
.searchbar::before{content:"🔍";position:absolute;left:12px;top:50%;transform:translateY(-50%);font-size:14px;opacity:.6}
.ocard{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:12px 14px;margin-bottom:10px;display:flex;gap:12px;cursor:pointer}
.ocard:active{background:#f8fcfd}
.ocard .thumb{width:64px;height:64px;border-radius:9px;overflow:hidden;background:#eef2f5;flex:0 0 auto}
.ocard .thumb img{width:100%;height:100%;object-fit:cover}
.ocard .thumb.empty{display:flex;align-items:center;justify-content:center;font-size:20px}
.ocard .main{flex:1;min-width:0}
.ocard .top{display:flex;justify-content:space-between;align-items:center;gap:8px}
.ocard .no{font-size:13.5px;font-weight:700}
.ocard .meta{font-size:12.5px;color:var(--muted);margin-top:3px;display:flex;flex-wrap:wrap;gap:4px 10px}
.ocard .fault{font-size:13.5px;margin-top:4px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.empty-state{text-align:center;color:var(--muted);padding:50px 0;font-size:14px}
/* ---------- detail ---------- */
.kv{display:flex;font-size:14px;padding:5px 0;gap:10px}
.kv .k{flex:0 0 86px;color:var(--muted);font-size:13px}
.kv .v{flex:1;word-break:break-all}
.kv .v.big{font-weight:700;font-size:15px}
.status-hero{background:linear-gradient(135deg,#0a5c6b,#0b7285 60%,#1498ad);color:#fff;border-radius:var(--radius);padding:16px;margin-bottom:12px;box-shadow:var(--shadow)}
.status-hero .no{font-size:17px;font-weight:700;letter-spacing:.5px}
.status-hero .row{display:flex;justify-content:space-between;align-items:center;margin-top:6px}
.status-hero .cab{font-size:13.5px;opacity:.95}
.timeline{list-style:none;position:relative;padding-left:20px}
.timeline li{position:relative;padding:0 0 14px 8px;border-left:2px solid var(--line)}
.timeline li:last-child{border-left-color:transparent}
.timeline li::before{content:"";position:absolute;left:-6px;top:3px;width:10px;height:10px;border-radius:50%;background:var(--accent);border:2px solid #fff;box-shadow:0 0 0 2px var(--accent)}
.timeline .t{font-weight:600;font-size:13.5px}
.timeline .d{font-size:12.5px;color:var(--muted)}
/* ---------- push ---------- */
.push-card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:12px;overflow:hidden}
.push-hd{background:#f0fafc;border-bottom:1px solid #e0f2f7;padding:9px 14px;font-size:12.5px;color:var(--muted);display:flex;justify-content:space-between;align-items:center}
.push-hd .ch{display:inline-flex;align-items:center;gap:5px;color:var(--primary);font-weight:600}
.push-bd{padding:13px 14px;font-size:14px;line-height:1.9}
.push-bd .title{font-weight:700;margin-bottom:4px}
.push-bd .row{display:flex;gap:8px}
.push-bd .row .k{color:var(--muted);flex:0 0 76px}
/* ---------- board ---------- */
.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px}
.stat{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:13px 8px;text-align:center}
.stat .num{font-size:24px;font-weight:800;color:var(--primary)}
.stat .lbl{font-size:12px;color:var(--muted);margin-top:2px}
.bar{background:#eef2f5;border-radius:999px;height:14px;overflow:hidden;margin:6px 0 2px}
.bar i{display:block;height:100%;border-radius:999px;background:var(--accent)}
/* ---------- modal / toast ---------- */
#toast{
  position:fixed;left:50%;top:44%;transform:translate(-50%,-50%) scale(.95);z-index:120;
  background:rgba(20,30,40,.92);color:#fff;padding:12px 20px;border-radius:10px;
  font-size:14px;max-width:76vw;text-align:center;opacity:0;pointer-events:none;transition:.18s;
}
#toast.show{opacity:1;transform:translate(-50%,-50%) scale(1)}
.modal-mask{position:fixed;inset:0;background:rgba(10,20,30,.5);z-index:110;display:flex;align-items:center;justify-content:center;padding:24px}
.modal{background:#fff;border-radius:14px;max-width:340px;width:100%;padding:20px;box-shadow:0 12px 40px rgba(0,0,0,.25)}
.modal h3{font-size:16px;margin-bottom:8px}
.modal p{font-size:14px;color:var(--muted)}
.modal .btn-row{margin-top:16px}
#scanner{position:fixed;inset:0;background:rgba(10,20,30,.6);z-index:115;display:flex;align-items:center;justify-content:center;padding:20px}
#scanner .modal{max-width:420px;width:100%}
/* ---------- lightbox ---------- */
#lightbox{display:none;position:fixed;inset:0;background:rgba(5,15,25,.93);z-index:130;align-items:center;justify-content:center;flex-direction:column}
#lightbox.open{display:flex}
#lightbox img{max-width:94vw;max-height:74vh;border-radius:8px}
#lightbox .lb-cap{color:#cbd5e1;font-size:13px;margin-top:12px}
#lightbox .lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.14);color:#fff;font-size:22px}
#lightbox .lb-prev{left:14px}
#lightbox .lb-next{right:14px}
#lightbox .lb-close{position:absolute;top:14px;right:18px;background:rgba(255,255,255,.14);color:#fff;width:40px;height:40px;border-radius:50%;font-size:17px}
/* ---------- tabbar ---------- */
.tabbar{
  position:fixed;left:0;right:0;bottom:0;z-index:50;background:#fff;border-top:1px solid var(--line);
  display:flex;justify-content:space-around;padding:5px 0 calc(5px + env(safe-area-inset-bottom));
}
.tabbar a{flex:1;text-align:center;font-size:11px;color:var(--muted);padding:3px 0}
.tabbar a .tb-ico{display:block;font-size:19px;line-height:1.3}
.tabbar a.active{color:var(--primary);font-weight:600}
.tabbar a:active{background:#f4fafb}
.tabbar a{border-radius:10px;margin:0 2px}
.sec-title{font-size:13px;font-weight:700;color:var(--muted);margin:16px 2px 8px}
/* ---------- help ---------- */
.steps{list-style:none;margin-top:6px}
.steps li{position:relative;padding:0 0 16px 36px;font-size:14px}
.steps li::before{
  content:counter(step);counter-increment:step;position:absolute;left:0;top:0;
  width:24px;height:24px;border-radius:50%;background:var(--primary);color:#fff;
  font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center;
}
.steps{counter-reset:step}
.steps li b{color:var(--primary-dark)}
.steps li small{display:block;color:var(--muted);font-size:12.5px}
.help-hero{background:linear-gradient(135deg,#0a5c6b,#0b7285 60%,#1498ad);color:#fff;border-radius:var(--radius);padding:16px;margin-bottom:12px}
.help-hero .t{font-size:17px;font-weight:700}
.help-hero .d{font-size:13px;opacity:.92;margin-top:4px}
.faq{border:1px solid var(--line);border-radius:10px;padding:11px 14px;margin-top:9px;background:#fff}
.faq .q{font-weight:700;font-size:13.5px;color:var(--text)}
.faq .a{font-size:13px;color:var(--muted);margin-top:3px}
/* ---------- login ---------- */
.login-wrap{display:flex;flex-direction:column;justify-content:center;min-height:72vh;max-width:420px;margin:0 auto}
.login-card{padding:26px 24px}
.login-card h2{font-size:19px;font-weight:700;color:var(--primary-dark);margin-bottom:4px}
.login-card .sub{font-size:13px;color:var(--muted);margin-bottom:18px}
.demo-box{margin-top:18px;border:1px dashed #b9dce4;border-radius:10px;background:#f0fafc;padding:12px 14px;font-size:12.5px;color:var(--muted)}
.demo-box b{color:var(--primary-dark)}
.demo-box .row{padding:2px 0;font-family:ui-monospace,Consolas,monospace}
