:root{
  --paper:#F7F6F2; --card:#FFFFFF; --ink:#16181D; --ink2:#5C5F66; --ink3:#9A9DA3;
  --line:#E4E2DB; --red:#E5352B; --chip:#EDEBE4; --gold:#B8892B;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  --safe-b:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;height:100%}
body{
  background:var(--paper);font-family:var(--sans);color:var(--ink);
  -webkit-font-smoothing:antialiased;overscroll-behavior-y:none;
}
.hidden{display:none !important}
button{font-family:inherit}

/* ---------- 登录 ---------- */
.auth{
  position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  padding:24px;background:var(--paper);
}
.auth-card{width:100%;max-width:340px}
.auth-logo{width:56px;height:56px;margin-bottom:18px}
.auth-title{font-size:26px;font-weight:700;letter-spacing:-.6px;margin:0 0 6px}
.auth-sub{font-size:13px;color:var(--ink3);margin:0 0 26px}
.tabs{display:flex;gap:18px;margin-bottom:18px;border-bottom:1px solid var(--line)}
.tab-btn{
  border:none;background:none;padding:0 0 10px;font-size:14px;color:var(--ink3);
  cursor:pointer;position:relative;
}
.tab-btn.on{color:var(--ink);font-weight:600}
.tab-btn.on::after{
  content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--ink);
}
.input{
  width:100%;height:48px;border-radius:12px;border:1px solid var(--line);
  background:var(--card);padding:0 14px;font-size:16px;font-family:inherit;color:var(--ink);
  outline:none;appearance:none;
}
.input:focus{border-color:var(--ink);box-shadow:0 0 0 3px rgba(22,24,29,.06)}
.input::placeholder{color:#B7B9BE}
.field{margin-bottom:16px}
.label{font-size:11px;font-weight:700;letter-spacing:1.2px;color:var(--ink3);margin-bottom:8px}
.btn-primary{
  width:100%;height:50px;border-radius:13px;border:none;background:var(--ink);color:#fff;
  font-size:15px;font-weight:600;cursor:pointer;
}
.btn-primary:active{opacity:.85}
.btn-primary:disabled{opacity:.4}
.form-err{font-size:12.5px;color:var(--red);margin:10px 2px 0;line-height:1.6}
.auth-foot{font-size:11.5px;color:var(--ink3);text-align:center;line-height:1.8;margin-top:22px}

/* ---------- 主容器 ---------- */
.app{position:fixed;inset:0;display:flex;flex-direction:column}
.screen{
  flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;
  padding:0 18px calc(96px + var(--safe-b));
}
.view{display:none}
.view.on{display:block}
.topbar{
  display:flex;align-items:flex-end;justify-content:space-between;
  padding:calc(14px + env(safe-area-inset-top,0px)) 0 16px;
}
.eyebrow{font-size:10.5px;letter-spacing:2.2px;color:var(--ink3);margin:0 0 6px;font-weight:600}
h1{font-size:27px;font-weight:700;margin:0;letter-spacing:-.6px}
.icon-btn{
  width:38px;height:38px;border-radius:50%;border:none;background:var(--chip);
  display:flex;align-items:center;justify-content:center;padding:0;cursor:pointer;
}
.icon-btn:active{background:#E2DFD6}

/* ---------- 提示条 ---------- */
.tipbar{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  background:#FBEFD6;color:#7A5410;border-radius:12px;padding:11px 13px;
  font-size:12.5px;line-height:1.5;margin-bottom:14px;
}
.tipbar button{
  border:none;background:rgba(122,84,16,.12);color:#7A5410;font-size:12px;font-weight:600;
  padding:6px 11px;border-radius:8px;cursor:pointer;flex:none;
}

.memchips{
  display:flex;gap:8px;flex-wrap:nowrap;overflow-x:auto;margin-bottom:14px;
  padding-bottom:2px;-webkit-overflow-scrolling:touch;
}
.memchips::-webkit-scrollbar{display:none}
.memchips .chip{flex:none;height:32px;padding:0 13px;font-size:12.5px}

/* ---------- 数字条 ---------- */
.strip{
  display:grid;grid-template-columns:1fr 1fr 1fr;background:var(--card);
  border-radius:16px;padding:16px 4px;border:1px solid var(--line);margin-bottom:20px;
}
.strip>div{text-align:center;position:relative}
.strip>div+div::before{
  content:"";position:absolute;left:0;top:4px;bottom:4px;width:1px;background:var(--line);
}
.strip b{
  display:block;font-size:20px;font-weight:700;letter-spacing:-.6px;
  font-variant-numeric:tabular-nums;line-height:1.2;white-space:nowrap;
}
.strip b .u{display:inline;font-size:11px;font-weight:600;color:var(--ink3);margin-left:2px;letter-spacing:0}
.strip b.pb-num{font-size:17.5px;letter-spacing:-.9px;color:var(--red)}
.strip span.kk{display:block;font-size:11px;color:var(--ink3);margin-top:5px}

/* ---------- 年份与卡片 ---------- */
.year{
  display:flex;align-items:center;gap:10px;font-size:12px;font-weight:700;
  letter-spacing:1.6px;color:var(--ink3);margin:0 2px 10px;
}
.year::after{content:"";flex:1;height:1px;background:var(--line)}
.race{
  background:var(--card);border:1px solid var(--line);border-radius:16px;
  padding:14px;display:flex;gap:13px;margin-bottom:10px;cursor:pointer;
  transition:transform .12s;
}
.race:active{transform:scale(.988)}
.date-col{
  width:46px;flex:none;text-align:center;padding-top:2px;
  border-right:1px solid var(--line);padding-right:12px;align-self:flex-start;
}
.date-col b{display:block;font-size:15px;font-weight:700;font-variant-numeric:tabular-nums}
.date-col span{display:block;font-size:10px;color:var(--ink3);margin-top:3px}
.race-main{flex:1;min-width:0}
.race-main h3{
  margin:0 0 5px;font-size:15px;font-weight:600;letter-spacing:-.2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.meta{font-size:11.5px;color:var(--ink3);margin:0 0 6px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.badge{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.4px;padding:2px 6px;border-radius:5px;line-height:1.4}
.badge.FM{background:var(--red);color:#fff}
.badge.HM{background:var(--ink);color:#fff}
.badge.TEN,.badge.FIVE{background:var(--chip);color:var(--ink2)}
.badge.OTHER{background:var(--chip);color:var(--ink3)}
.badge.virtual{background:#FBEFD6;color:#9A6B14}
.plist{margin-top:1px}
.prow{
  display:grid;grid-template-columns:minmax(44px,auto) 50px minmax(0,1fr) 84px;
  gap:6px;align-items:center;padding:4px 0;
}
.prow+.prow{border-top:1px dashed #F0EEE7}
.prow .nm{font-size:12px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.prow .bib{font-size:10.5px;color:var(--ink3);font-variant-numeric:tabular-nums;letter-spacing:.2px}
.tt{text-align:right;line-height:1.15}
.tt .t{display:block;font-size:15px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:-.4px}
.tt .t.pb{color:var(--red)}
.tt .t.pb::after{content:"PB";font-size:7.5px;font-weight:700;letter-spacing:.3px;margin-left:2px;vertical-align:2px}
.tt .t.dnf{font-size:12px;color:var(--ink3);font-weight:600;letter-spacing:0}
.tt .p{display:block;font-size:9px;color:var(--ink3);font-variant-numeric:tabular-nums;margin-top:2px}

.empty{text-align:center;padding:60px 20px;color:var(--ink3)}
.empty svg{opacity:.3;margin-bottom:14px}
.empty p{font-size:13px;margin:0;line-height:1.8}

/* ---------- FAB / Tab ---------- */
.fab{
  position:absolute;right:18px;bottom:calc(88px + var(--safe-b));width:56px;height:56px;
  border-radius:20px;background:var(--red);border:none;display:flex;align-items:center;
  justify-content:center;box-shadow:0 8px 22px rgba(229,53,43,.36);cursor:pointer;z-index:30;
}
.fab:active{transform:scale(.94)}
.tabbar{
  position:absolute;left:0;right:0;bottom:0;height:calc(74px + var(--safe-b));
  padding-bottom:var(--safe-b);background:rgba(247,246,242,.95);
  backdrop-filter:blur(14px);border-top:1px solid var(--line);
  display:grid;grid-template-columns:1fr 1fr 1fr;z-index:20;
}
.tab{
  border:none;background:none;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:3px;font-size:10px;color:var(--ink3);cursor:pointer;padding:0;
}
.tab.on{color:var(--ink);font-weight:600}
.tab.on svg{stroke:var(--red)}

/* ---------- 弹层 ---------- */
.sheet{
  position:fixed;inset:0;z-index:40;background:var(--paper);
  display:flex;flex-direction:column;
  transform:translateY(100%);transition:transform .26s cubic-bezier(.32,.72,0,1);
}
.sheet.on{transform:none}
.sheet-head{
  display:flex;align-items:center;gap:12px;flex:none;
  padding:calc(10px + env(safe-area-inset-top,0px)) 18px 12px;
  background:var(--paper);border-bottom:1px solid transparent;
}
.sheet-head h2{font-size:17px;font-weight:700;margin:0;flex:1;letter-spacing:-.2px}
.text-btn{border:none;background:none;font-size:14px;color:var(--ink2);padding:8px 2px;cursor:pointer}
.text-btn.save{color:var(--red);font-weight:600}
.sheet-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:4px 18px calc(30px + var(--safe-b))}

/* ---------- 表单 ---------- */
.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{
  height:36px;padding:0 14px;border-radius:10px;border:1px solid var(--line);
  background:var(--card);font-size:13px;color:var(--ink2);cursor:pointer;
  display:flex;align-items:center;gap:6px;
}
.chip.on{background:var(--ink);color:#fff;border-color:var(--ink);font-weight:600}
.chip.on .dot{background:#fff}
.dot{width:6px;height:6px;border-radius:50%;background:var(--ink3)}
.hint{font-size:12px;color:var(--ink3);margin:8px 2px 0;line-height:1.6}
.hint b{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.switch{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--ink2);cursor:pointer}
.switch input{width:20px;height:20px;accent-color:var(--ink)}

/* ---------- 参赛人卡 ---------- */
.pcard{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:13px 14px;margin-bottom:10px}
.pcard-top{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.pcard-top .name{font-size:14px;font-weight:600;flex:1}
.mini-label{font-size:10.5px;color:var(--ink3);margin-bottom:5px;font-weight:600;letter-spacing:.4px}
.mini-input{
  width:100%;height:40px;border-radius:9px;border:1px solid var(--line);background:#FBFAF7;
  padding:0 11px;font-size:15px;font-family:inherit;color:var(--ink);outline:none;
  font-variant-numeric:tabular-nums;appearance:none;
}
.mini-input:focus{border-color:var(--ink);background:#fff}
.pcard-actions{display:flex;gap:8px;margin-top:11px}
.btn-ghost{
  flex:1;height:38px;border-radius:10px;border:1px dashed #CFCCC2;background:#FBFAF7;
  font-size:12.5px;color:var(--ink2);cursor:pointer;display:flex;align-items:center;
  justify-content:center;gap:6px;
}
.btn-ghost:active{background:#F3F1EA}
.btn-ghost.has{border-style:solid;border-color:var(--line);color:var(--ink)}
.rank-box{margin-top:11px;padding-top:11px;border-top:1px dashed var(--line)}
.cert-thumbs{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.cert-thumb{
  width:56px;height:56px;border-radius:9px;overflow:hidden;background:#EDEBE4;
  border:1px solid var(--line);position:relative;cursor:pointer;
}
.cert-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.cert-thumb .x{
  position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;
  background:var(--ink);color:#fff;border:none;font-size:12px;line-height:20px;
  text-align:center;cursor:pointer;padding:0;
}

/* ---------- 详情 ---------- */
.detail-hero{padding:6px 18px 18px}
.detail-hero .eyebrow{margin-bottom:8px}
.detail-hero h2{font-size:23px;font-weight:700;margin:0 0 8px;letter-spacing:-.5px;line-height:1.3}
.detail-hero p{font-size:12.5px;color:var(--ink3);margin:0}
.res-row{
  background:var(--card);border:1px solid var(--line);border-radius:14px;
  padding:14px;margin:0 18px 10px;display:flex;align-items:center;gap:12px;
}
.res-row .who{flex:1;min-width:0}
.res-row .who b{font-size:14px;display:block;margin-bottom:3px}
.res-row .who span{font-size:11px;color:var(--ink3);font-variant-numeric:tabular-nums}
.rnote{display:block;font-style:normal;font-size:10.5px;color:#B0B2B7;margin-top:4px;line-height:1.5}
.detail-certs{padding:0 18px}
.cert-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.cert-grid figure{
  margin:0;background:var(--card);border:1px solid var(--line);border-radius:12px;
  overflow:hidden;cursor:pointer;
}
.cert-grid img{width:100%;display:block;aspect-ratio:1.414;object-fit:cover}
.cert-grid figcaption{font-size:10.5px;color:var(--ink3);padding:6px 8px}
.danger{color:var(--red)}
.sheet-foot{padding:10px 18px calc(16px + var(--safe-b));border-top:1px solid var(--line)}

/* ---------- 统计 ---------- */
.pb-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;margin-bottom:12px}
.pb-card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:15px}
.pb-card .k{font-size:10.5px;font-weight:700;letter-spacing:1.4px;color:var(--ink3)}
.pb-card .v{font-size:26px;font-weight:700;letter-spacing:-1px;margin:6px 0 4px;font-variant-numeric:tabular-nums}
.pb-card .s{font-size:10.5px;color:var(--ink3);line-height:1.5}
.pb-card.gold .v{color:var(--gold)}
.pb-card.empty-pb .v{color:var(--ink3);font-size:20px}
.chart{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px 14px 12px;margin-bottom:12px}
.chart h3{font-size:12px;font-weight:700;letter-spacing:.8px;color:var(--ink2);margin:0 0 16px}
.bars{display:flex;align-items:flex-end;gap:7px;height:110px}
.bar-wrap{flex:1;display:flex;flex-direction:column;align-items:center;gap:7px;height:100%;justify-content:flex-end;min-width:0}
.bar{width:100%;max-width:38px;background:var(--ink);border-radius:5px 5px 2px 2px}
.bar.hi{background:var(--red)}
.bar-num{font-size:10px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--ink2)}
.bar-y{font-size:9px;color:var(--ink3);letter-spacing:-.2px}
.kv{background:var(--card);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.kv-row{display:flex;justify-content:space-between;align-items:center;padding:14px;font-size:13.5px}
.kv-row+.kv-row{border-top:1px solid var(--line)}
.kv-row b{font-variant-numeric:tabular-nums;font-weight:600}

/* ---------- 我的 ---------- */
.me-card{
  background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px;
  display:flex;align-items:center;gap:12px;margin-bottom:20px;
}
.avatar{
  width:44px;height:44px;border-radius:50%;background:var(--ink);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:700;
}
.me-card .n{font-size:15px;font-weight:600}
.me-card .u{font-size:11.5px;color:var(--ink3);margin-top:3px}
.list-card{background:var(--card);border:1px solid var(--line);border-radius:14px;overflow:hidden;margin-bottom:16px}
.list-row{display:flex;align-items:center;gap:12px;padding:14px;font-size:14px;cursor:pointer}
.list-row+.list-row{border-top:1px solid var(--line)}
.list-row .nm{flex:1}
.list-row .sub{font-size:11px;color:var(--ink3);margin-top:2px}
.list-row .chev{color:#C9C6BC;flex:none}
.add-member{padding:13px;text-align:center;font-size:13px;color:var(--red);font-weight:600;border-top:1px solid var(--line);cursor:pointer}
.mtag{font-size:10px;color:var(--ink3);border:1px solid var(--line);border-radius:5px;padding:1px 5px}

/* ---------- 灯箱 / toast ---------- */
.lightbox{
  position:fixed;inset:0;z-index:60;background:#111;display:flex;align-items:center;
  justify-content:center;padding:0;
}
.lightbox img{max-width:100%;max-height:100%;object-fit:contain}
.lightbox .close{
  position:absolute;top:calc(14px + env(safe-area-inset-top,0px));right:16px;
  width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,.16);border:none;
  color:#fff;font-size:18px;cursor:pointer;
}
.toast{
  position:fixed;left:50%;bottom:calc(110px + var(--safe-b));transform:translateX(-50%);
  background:rgba(22,24,29,.92);color:#fff;font-size:13px;padding:10px 16px;border-radius:10px;
  z-index:80;max-width:80%;text-align:center;line-height:1.5;
  opacity:0;transition:opacity .2s;pointer-events:none;
}
.toast.on{opacity:1}
