/* 投递 · iOS 极简质感设计系统 */
:root{
  --bg:#F2F2F7;
  --bg-elev:#FFFFFF;
  --card:#FFFFFF;
  --fill:rgba(120,120,128,.12);
  --fill-2:rgba(120,120,128,.08);
  --fill-3:rgba(120,120,128,.16);
  --sep:rgba(60,60,67,.10);
  --sep-strong:rgba(60,60,67,.18);
  --label:#1C1C1E;
  --label-2:rgba(60,60,67,.60);
  --label-3:rgba(60,60,67,.32);
  --accent:#0A84FF;
  --accent-soft:color-mix(in srgb, var(--accent) 12%, transparent);
  --green:#30D158;
  --orange:#FF9F0A;
  --pink:#FF375F;
  --purple:#BF5AF2;
  --teal:#40C8E0;
  --indigo:#5E5CE6;
  --radius-card:20px;
  --radius-row:14px;
  --spring:cubic-bezier(.32,.72,0,1);
  --spring-soft:cubic-bezier(.34,1.2,.44,1);
  --ease:cubic-bezier(.25,.1,.25,1);
  --shadow-card:0 1px 2px rgba(16,24,40,.04),0 10px 26px -16px rgba(16,24,40,.22);
  --shadow-float:0 8px 30px -6px rgba(16,24,40,.18),0 2px 6px rgba(16,24,40,.06);
  --nav-h:52px;
  --tab-h:64px;
  --safe-b:env(safe-area-inset-bottom,0px);
  --safe-t:env(safe-area-inset-top,0px);
  --blur:saturate(180%) blur(22px);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%;margin:0;padding:0}
body{
  background:var(--bg);color:var(--label);
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","PingFang SC","Helvetica Neue","Microsoft YaHei",system-ui,sans-serif;
  font-size:15px;line-height:1.42;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  overscroll-behavior:none;
}
button,input,textarea,select{font:inherit;color:inherit}
button{border:0;background:none;padding:0;cursor:pointer}
input,textarea{border:0;background:none;outline:none}
::selection{background:color-mix(in srgb,var(--accent) 22%,transparent)}
#stage{position:fixed;inset:0;display:flex;flex-direction:column;overflow:hidden}
#views{position:relative;flex:1;overflow:hidden}
#layers{position:fixed;inset:0;pointer-events:none;z-index:80}
#layers>*{pointer-events:auto}

/* ---------- 视图容器 ---------- */
.view{position:absolute;inset:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;
  padding:calc(var(--safe-t) + 4px) 0 calc(var(--tab-h) + var(--safe-b) + 34px);
  scrollbar-width:none;opacity:0;pointer-events:none;transform:translateY(6px) scale(.995)}
.view::-webkit-scrollbar{display:none}
.view.is-active{opacity:1;pointer-events:auto;transform:none;transition:opacity .34s var(--ease),transform .42s var(--spring)}
.view.is-leaving{opacity:0;transform:translateY(-4px) scale(.995);transition:opacity .2s var(--ease),transform .24s var(--ease)}
.stagger>*{opacity:0;animation:riseIn .5s var(--spring) forwards}
.stagger>*:nth-child(1){animation-delay:.02s}
.stagger>*:nth-child(2){animation-delay:.05s}
.stagger>*:nth-child(3){animation-delay:.08s}
.stagger>*:nth-child(4){animation-delay:.11s}
.stagger>*:nth-child(5){animation-delay:.14s}
.stagger>*:nth-child(6){animation-delay:.17s}
.stagger>*:nth-child(7){animation-delay:.2s}
.stagger>*:nth-child(8){animation-delay:.23s}
.stagger>*:nth-child(n+9){animation-delay:.26s}
@keyframes riseIn{from{opacity:0;transform:translateY(12px) scale(.985)}to{opacity:1;transform:none}}

/* ---------- 大标题 ---------- */
.nav{position:sticky;top:0;z-index:20;padding:calc(var(--safe-t) + 10px) 18px 8px;
  background:linear-gradient(to bottom,rgba(242,242,247,.94) 62%,rgba(242,242,247,0))}
.nav-inner{display:flex;align-items:flex-end;justify-content:space-between;gap:10px;min-height:40px}
.nav h1{margin:0;font-size:30px;line-height:1.1;font-weight:700;letter-spacing:-.02em;
  transform-origin:left bottom;transition:transform .3s var(--spring),opacity .28s var(--ease)}
.view.is-scrolled .nav h1{transform:scale(.62) translateY(2px)}
.nav-actions{display:flex;align-items:center;gap:4px;padding-bottom:2px}
.iconbtn{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;color:var(--accent);
  background:var(--fill-2);transition:transform .22s var(--spring),background .2s var(--ease),opacity .2s}
.iconbtn:active{transform:scale(.9);background:var(--fill-3)}
.iconbtn.ghost{background:transparent}
.iconbtn.plain{color:var(--label-2);background:transparent}
.iconbtn svg{width:20px;height:20px}
.iconbtn.on{color:#fff;background:var(--accent)}
.nav-sub{display:flex;align-items:center;gap:8px;padding:0 18px 2px;min-height:0}

/* 搜索条 */
.searchbar{display:flex;align-items:center;gap:8px;margin:6px 18px 2px;padding:9px 12px;border-radius:12px;
  background:var(--fill-2);color:var(--label-3);
  opacity:0;transform:translateY(-8px);pointer-events:none;transition:opacity .26s var(--ease),transform .34s var(--spring)}
.searchbar.on{opacity:1;transform:none;pointer-events:auto}
.searchbar svg{width:17px;height:17px;flex:none}
.searchbar input{flex:1;font-size:16px;color:var(--label)}
.searchbar input::placeholder{color:var(--label-3)}
.search-clear{color:var(--label-3);display:grid;place-items:center;width:20px;height:20px}

/* 分段控件 */
.seg{display:inline-flex;position:relative;background:var(--fill-2);border-radius:11px;padding:2px;margin:8px 0 2px}
.seg-inner{position:absolute;top:2px;bottom:2px;border-radius:9px;background:var(--card);
  box-shadow:0 1px 3px rgba(16,24,40,.10),0 1px 1px rgba(16,24,40,.04);
  transition:transform .38s var(--spring),width .38s var(--spring)}
.seg button{position:relative;z-index:1;padding:6px 14px;font-size:13px;font-weight:590;color:var(--label-2);
  transition:color .22s var(--ease);white-space:nowrap}
.seg button.on{color:var(--label)}
.seg.mono button{font-variant-numeric:tabular-nums}

/* ---------- 卡片 / 行 ---------- */
.wrap{padding:0 14px}
.stack{display:flex;flex-direction:column;gap:10px}
.card{background:var(--card);border-radius:var(--radius-card);box-shadow:var(--shadow-card);
  transition:transform .26s var(--spring),box-shadow .26s var(--ease)}
.card.tap:active{transform:scale(.982);box-shadow:0 1px 2px rgba(16,24,40,.05)}
.sec-title{margin:22px 20px 8px;font-size:13px;font-weight:600;color:var(--label-3);letter-spacing:.02em}
.sec{display:flex;flex-direction:column;background:var(--card);border-radius:var(--radius-card);
  box-shadow:var(--shadow-card);overflow:hidden}
.row{display:flex;align-items:center;gap:12px;padding:12px 15px;position:relative;min-height:50px}
.row+.row::before{content:"";position:absolute;left:15px;right:0;top:0;height:.5px;background:var(--sep)}
.row.tap{transition:background .18s var(--ease)}
.row.tap:active{background:var(--fill-2)}
.row .r-label{flex:1;font-size:16px;letter-spacing:-.01em}
.row .r-label small{display:block;font-size:12px;color:var(--label-3);margin-top:1px}
.row .r-value{font-size:15px;color:var(--label-2);display:flex;align-items:center;gap:6px;max-width:58%;justify-content:flex-end}
.row .r-value .ellip{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.row svg{width:12px;height:12px;color:var(--label-3);flex:none}
.row .r-icon{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:var(--fill-2);flex:none}
.row .r-icon svg{width:17px;height:17px;color:var(--accent)}
.row input{flex:1;font-size:16px;min-width:0}
.row input::placeholder{color:var(--label-3)}
.spacer{flex:1}
/* ---------- 状态胶囊 ---------- */
.pill{display:inline-flex;align-items:center;gap:5px;height:23px;padding:0 9px;border-radius:999px;
  font-size:12px;font-weight:600;letter-spacing:0;white-space:nowrap;
  background:color-mix(in srgb,var(--c) 14%,transparent);color:var(--c);
  transition:background .3s var(--ease),color .3s var(--ease)}
.pill .dot{width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
.pill.solid{background:var(--c);color:#fff}
.pill.lg{height:28px;font-size:13px;padding:0 12px}
.pill.pop{animation:pillPop .45s var(--spring)}
@keyframes pillPop{0%{transform:scale(.86)}55%{transform:scale(1.06)}100%{transform:scale(1)}}

.tagchip{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:7px;background:var(--fill-2);
  color:var(--label-2);font-size:11.5px;font-weight:560}

/* ---------- 记录卡 ---------- */
.rec{position:relative;background:var(--card);border-radius:18px;box-shadow:var(--shadow-card);overflow:hidden}
.rec-body{display:flex;align-items:center;gap:12px;padding:13px 15px;position:relative;z-index:1;background:var(--card);
  transition:transform .34s var(--spring),background .2s}
.rec-body:active{}
.rec-main{flex:1;min-width:0}
.rec-top{display:flex;align-items:center;gap:8px}
.rec-name{font-size:16px;font-weight:640;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rec-pos{font-size:12.5px;color:var(--label-2);margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rec-meta{display:flex;align-items:center;gap:6px;margin-top:7px;flex-wrap:nowrap;overflow:hidden}
.rec-meta .num{font-size:11.5px;color:var(--label-3);font-variant-numeric:tabular-nums;flex:none}
.rec-right{display:flex;flex-direction:column;align-items:flex-end;gap:6px;flex:none}
.rec-avatar{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;flex:none;
  font-size:15px;font-weight:650;letter-spacing:.01em;
  background:linear-gradient(160deg,color-mix(in srgb,var(--c) 20%,#fff),color-mix(in srgb,var(--c) 8%,#fff));
  color:color-mix(in srgb,var(--c) 82%,#000);box-shadow:inset 0 0 0 .5px color-mix(in srgb,var(--c) 18%,transparent)}
.stars{display:flex;gap:2px}
.stars svg{width:11px;height:11px;color:var(--orange);opacity:.22}
.stars svg.on{opacity:1}
.rec.selected .rec-body{transform:translateX(6px)}
.check{width:22px;height:22px;border-radius:50%;box-shadow:inset 0 0 0 1.6px var(--sep-strong);display:grid;place-items:center;
  transition:background .25s var(--ease),box-shadow .25s var(--ease)}
.check svg{width:12px;height:12px;color:#fff;opacity:0;transform:scale(.6);transition:all .25s var(--spring)}
.check.on{background:var(--accent);box-shadow:inset 0 0 0 1.6px var(--accent)}
.check.on svg{opacity:1;transform:none}
.swipe-wrap{position:relative}
.swipe-actions{position:absolute;inset:0;display:flex;justify-content:flex-end;align-items:stretch;gap:0;padding:0}
.swipe-actions button{width:74px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  color:#fff;font-size:11.5px;font-weight:600}
.swipe-actions button svg{width:19px;height:19px}
.swipe-actions .a-star{background:var(--orange)}
.swipe-actions .a-status{background:var(--accent)}
.swipe-actions .a-del{background:#FF3B30}
.swipe-actions button:first-child{border-radius:0 0 0 0}
.rec .swipe-actions{border-radius:18px;overflow:hidden}

/* ---------- 标签栏 ---------- */
.tabbar{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(var(--safe-b) + 12px);z-index:60;
  display:flex;align-items:center;gap:2px;padding:6px;border-radius:26px;
  background:rgba(255,255,255,.72);backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  box-shadow:var(--shadow-float),inset 0 0 0 .5px rgba(255,255,255,.6);
  transition:transform .4s var(--spring),opacity .3s}
.tabbar.hidden{transform:translateX(-50%) translateY(140%);opacity:0}
.tab{position:relative;display:flex;align-items:center;gap:0;height:44px;padding:0 14px;border-radius:20px;
  color:var(--label-3);transition:color .28s var(--ease),padding .42s var(--spring),background .3s var(--ease)}
.tab svg{width:22px;height:22px;flex:none;transition:transform .42s var(--spring)}
.tab span{max-width:0;overflow:hidden;white-space:nowrap;font-size:13.5px;font-weight:620;letter-spacing:0;
  opacity:0;transition:max-width .42s var(--spring),opacity .26s var(--ease),margin .42s var(--spring)}
.tab.on{color:var(--accent);background:var(--accent-soft)}
.tab.on span{max-width:76px;opacity:1;margin-left:7px}
.tab.on svg{transform:scale(1.06)}
.tab:active svg{transform:scale(.88)}
.fab{position:fixed;right:18px;bottom:calc(var(--safe-b) + 84px);z-index:61;width:52px;height:52px;border-radius:50%;
  background:var(--accent);color:#fff;display:grid;place-items:center;
  box-shadow:0 10px 26px -8px color-mix(in srgb,var(--accent) 70%,transparent),0 2px 8px rgba(16,24,40,.16);
  transition:transform .42s var(--spring),opacity .3s}
.fab:active{transform:scale(.9)}
.fab.hidden{opacity:0;pointer-events:none;transform:scale(.6)}
.fab-inner{width:20px;height:20px;position:relative}
.fab-inner::before,.fab-inner::after{content:"";position:absolute;background:#fff;border-radius:2px;
  transition:transform .42s var(--spring)}
.fab-inner::before{left:0;right:0;top:9px;height:2px}
.fab-inner::after{top:0;bottom:0;left:9px;width:2px}
.fab.open .fab-inner::before{transform:rotate(45deg)}
.fab.open .fab-inner::after{transform:rotate(45deg)}

/* ---------- 弹层 ---------- */
.backdrop{position:fixed;inset:0;background:rgba(20,20,24,.28);backdrop-filter:blur(2px);
  opacity:0;transition:opacity .34s var(--ease)}
.backdrop.on{opacity:1}
.sheet{position:fixed;left:0;right:0;bottom:0;max-height:92vh;display:flex;flex-direction:column;
  background:var(--bg);border-radius:26px 26px 0 0;box-shadow:0 -12px 40px rgba(16,24,40,.22);
  transform:translateY(102%);transition:transform .46s var(--spring);will-change:transform;
  padding-bottom:var(--safe-b)}
.sheet.on{transform:none}
.sheet.dragging{transition:none}
.sheet-head{position:relative;padding:14px 18px 10px;flex:none}
.sheet-grab{position:absolute;left:50%;top:8px;transform:translateX(-50%);width:38px;height:5px;border-radius:3px;
  background:var(--sep-strong)}
.sheet-title{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-top:6px;min-height:32px}
.sheet-title h2{margin:0;font-size:20px;font-weight:700;letter-spacing:-.02em}
.sheet-title .sub{font-size:12.5px;color:var(--label-3);font-weight:500}
.sheet-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:4px 0 20px;scrollbar-width:none}
.sheet-body::-webkit-scrollbar{display:none}
.sheet-foot{flex:none;padding:8px 18px 16px;border-top:.5px solid var(--sep);background:rgba(242,242,247,.86);
  backdrop-filter:var(--blur);display:flex;gap:10px}
.btn{flex:1;height:48px;border-radius:14px;font-size:16px;font-weight:620;display:grid;place-items:center;
  background:var(--fill-2);color:var(--label);transition:transform .24s var(--spring),background .2s}
.btn:active{transform:scale(.97)}
.btn.primary{background:var(--accent);color:#fff;box-shadow:0 8px 20px -10px color-mix(in srgb,var(--accent) 70%,transparent)}
.btn.danger{color:#FF3B30;background:color-mix(in srgb,#FF3B30 10%,transparent)}
.btn[disabled]{opacity:.4;pointer-events:none}
.tabbar-under{position:fixed;bottom:calc(var(--safe-b) + 12px);left:50%;transform:translateX(-50%);z-index:60}

/* 长按菜单 */
.ctx{position:fixed;width:216px;padding:6px;border-radius:16px;background:rgba(255,255,255,.82);
  backdrop-filter:var(--blur);-webkit-backdrop-filter:var(--blur);
  box-shadow:0 16px 44px -10px rgba(16,24,40,.30),inset 0 0 0 .5px rgba(255,255,255,.6);
  transform-origin:var(--ox,50%) var(--oy,50%);transform:scale(.86);opacity:0;
  transition:transform .32s var(--spring-soft),opacity .2s var(--ease)}
.ctx.on{transform:none;opacity:1}
.ctx button{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border-radius:11px;font-size:15px;
  transition:background .16s}
.ctx button:active{background:var(--fill-2)}
.ctx button svg{width:18px;height:18px;color:var(--label-2)}
.ctx button.danger{color:#FF3B30}
.ctx button.danger svg{color:#FF3B30}
.ctx hr{border:0;border-top:.5px solid var(--sep);margin:5px 8px}

/* toast */
.toast-wrap{position:fixed;left:0;right:0;bottom:calc(var(--safe-b) + 92px);display:flex;flex-direction:column;
  align-items:center;gap:8px;z-index:120;pointer-events:none}
.toast{display:flex;align-items:center;gap:9px;padding:11px 16px;border-radius:999px;
  background:rgba(28,28,30,.86);backdrop-filter:var(--blur);color:#fff;font-size:14px;font-weight:540;
  box-shadow:0 12px 30px -10px rgba(0,0,0,.4);transform:translateY(14px) scale(.94);opacity:0;
  transition:transform .4s var(--spring),opacity .3s var(--ease)}
.toast.on{transform:none;opacity:1}
.toast button{color:var(--accent);font-weight:640;font-size:14px;margin-left:2px}
.toast svg{width:16px;height:16px}
/* ---------- 筛选 chips ---------- */
.chips{display:flex;gap:7px;overflow-x:auto;padding:10px 18px;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{flex:none;height:32px;padding:0 13px;border-radius:16px;background:var(--card);color:var(--label-2);
  font-size:13px;font-weight:560;display:inline-flex;align-items:center;gap:6px;
  box-shadow:0 1px 2px rgba(16,24,40,.05);transition:transform .24s var(--spring),background .24s,color .24s}
.chip:active{transform:scale(.94)}
.chip.on{background:var(--accent);color:#fff;box-shadow:0 6px 16px -8px color-mix(in srgb,var(--accent) 70%,transparent)}
.chip svg{width:14px;height:14px}
.chip .cnt{font-size:11px;opacity:.7;font-variant-numeric:tabular-nums}
.chips.grid{flex-wrap:wrap;overflow:visible;padding:10px 4px}
.chips.grid .chip{background:var(--fill-2)}

/* ---------- 看板 ---------- */
.board{display:flex;gap:12px;padding:8px 14px 20px;overflow-x:auto;scroll-snap-type:x proximity;
  height:100%;align-items:stretch;scrollbar-width:none}
.board::-webkit-scrollbar{display:none}
.kcol{flex:none;width:74vw;max-width:300px;scroll-snap-align:center;display:flex;flex-direction:column;
  max-height:100%;background:color-mix(in srgb,var(--card) 62%,transparent);border-radius:20px;padding:8px}
.kcol.drag-over{background:var(--accent-soft);box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--accent) 40%,transparent)}
.kcol-head{display:flex;align-items:center;gap:8px;padding:6px 8px 10px}
.kcol-head .pill{pointer-events:none}
.kcol-head .cnt{margin-left:auto;font-size:12px;color:var(--label-3);font-variant-numeric:tabular-nums;font-weight:600}
.kcol-body{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:8px;padding:0 2px 4px;scrollbar-width:none;min-height:60px}
.kcol-body::-webkit-scrollbar{display:none}
.kcard{background:var(--card);border-radius:15px;padding:11px 12px;box-shadow:var(--shadow-card);
  transition:transform .3s var(--spring),box-shadow .3s}
.kcard:active{transform:scale(.97)}
.kcard.dragging{opacity:.35}
.kcard.ghost{position:fixed;z-index:200;pointer-events:none;transform:scale(1.04) rotate(1.2deg);
  box-shadow:0 18px 40px -12px rgba(16,24,40,.35);width:260px}
.kcard .rec-name{font-size:14.5px}
.kcard .meta{display:flex;align-items:center;gap:6px;margin-top:6px;font-size:11.5px;color:var(--label-3)}
.kcol-empty{border:1.5px dashed var(--sep-strong);border-radius:14px;height:64px;display:grid;place-items:center;
  color:var(--label-3);font-size:12px}

/* ---------- 日历 ---------- */
.cal{padding:6px 14px 0}
.cal-head{display:flex;align-items:center;justify-content:space-between;padding:4px 4px 12px}
.cal-head .m{font-size:17px;font-weight:660;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.cal-head .nav-btns{display:flex;gap:6px}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.cal-dow{text-align:center;font-size:11px;color:var(--label-3);padding:4px 0 6px;font-weight:600}
.cal-day{position:relative;aspect-ratio:1/1.06;border-radius:13px;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:3px;font-size:14px;font-variant-numeric:tabular-nums;color:var(--label);
  transition:background .22s var(--ease),transform .3s var(--spring)}
.cal-day:active{transform:scale(.92)}
.cal-day.out{color:var(--label-3);opacity:.5}
.cal-day.today{color:var(--accent);font-weight:680}
.cal-day.sel{background:var(--accent);color:#fff;font-weight:660;box-shadow:0 8px 18px -10px color-mix(in srgb,var(--accent) 80%,transparent)}
.cal-day .dots{display:flex;gap:3px;height:5px}
.cal-day .dots i{width:4.5px;height:4.5px;border-radius:50%;background:var(--c,var(--accent));display:block}
.cal-day.sel .dots i{background:#fff}
.cal-slide{animation:calIn .34s var(--spring)}
@keyframes calIn{from{opacity:.2;transform:translateX(var(--dx,14px)) scale(.98)}to{opacity:1;transform:none}}

/* 热力图 */
.heat{display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,1fr);gap:3px;padding:2px}
.heat i{width:11px;height:11px;border-radius:3px;background:var(--fill-2);opacity:0;animation:fadeIn .4s var(--ease) forwards}
@keyframes fadeIn{to{opacity:1}}

/* ---------- 统计 ---------- */
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.stat{background:var(--card);border-radius:var(--radius-card);padding:14px 15px;box-shadow:var(--shadow-card)}
.stat .k{font-size:12px;color:var(--label-3);font-weight:560}
.stat .v{font-size:26px;font-weight:700;letter-spacing:-.03em;margin-top:4px;font-variant-numeric:tabular-nums;
  display:flex;align-items:baseline;gap:2px}
.stat .v em{font-size:14px;font-weight:600;font-style:normal;color:var(--label-3)}
.stat .d{font-size:11.5px;color:var(--label-3);margin-top:2px}
.stat.wide{grid-column:span 2}
.ring{display:block;transform:rotate(-90deg)}
.ring circle{fill:none;stroke-linecap:round}
.bars{display:flex;flex-direction:column;gap:11px;padding:14px 15px}
.bar-row{display:grid;grid-template-columns:74px 1fr 40px;align-items:center;gap:10px;font-size:12.5px}
.bar-row .n{color:var(--label-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bar-row .t{height:9px;border-radius:5px;background:var(--fill-2);overflow:hidden}
.bar-row .t i{display:block;height:100%;border-radius:5px;background:var(--c,var(--accent));width:0;
  transition:width .9s var(--spring)}
.bar-row .q{text-align:right;color:var(--label-3);font-variant-numeric:tabular-nums}
.funnel{display:flex;flex-direction:column;gap:6px;padding:14px 15px}
.fn-row{display:flex;align-items:center;gap:10px}
.fn-bar{flex:1;height:34px;border-radius:10px;position:relative;overflow:hidden;background:var(--fill-2)}
.fn-bar i{position:absolute;inset:0;transform-origin:left;transform:scaleX(0);border-radius:10px;
  background:linear-gradient(90deg,color-mix(in srgb,var(--c) 86%,#fff),var(--c));
  transition:transform .8s var(--spring)}
.fn-bar b{position:absolute;left:11px;top:0;bottom:0;display:flex;align-items:center;font-size:12.5px;
  font-weight:620;color:#fff;letter-spacing:.01em}
.fn-row .q{width:46px;text-align:right;font-size:13px;font-weight:640;font-variant-numeric:tabular-nums}
.legend{display:flex;flex-direction:column;gap:9px;padding:14px 15px}
.lg-row{display:flex;align-items:center;gap:9px;font-size:13px}
.lg-row i{width:9px;height:9px;border-radius:3px;background:var(--c);flex:none}
.lg-row .q{margin-left:auto;color:var(--label-3);font-variant-numeric:tabular-nums}

/* ---------- 时间线 ---------- */
.tl{position:relative;padding:6px 15px 10px}
.tl-item{position:relative;padding:0 0 16px 24px}
.tl-item:last-child{padding-bottom:2px}
.tl-item::before{content:"";position:absolute;left:5px;top:14px;bottom:-2px;width:1.5px;background:var(--sep-strong)}
.tl-item:last-child::before{display:none}
.tl-item .kd{position:absolute;left:0;top:5px;width:11px;height:11px;border-radius:50%;background:var(--c);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--c) 16%,transparent)}
.tl-item .tm{font-size:11.5px;color:var(--label-3);font-variant-numeric:tabular-nums}
.tl-item .tx{font-size:13.5px;margin-top:1px;color:var(--label)}
.tl-item .tx b{font-weight:620}

/* 清单 / 问答 */
.todo{display:flex;align-items:center;gap:11px;padding:11px 15px;position:relative}
.todo+.todo::before{content:"";position:absolute;left:15px;right:0;top:0;height:.5px;background:var(--sep)}
.todo .check{width:21px;height:21px;box-shadow:inset 0 0 0 1.5px var(--sep-strong)}
.todo.done .t{color:var(--label-3);text-decoration:line-through}
.todo .t{flex:1;font-size:14.5px}
.todo input{flex:1;font-size:14.5px}
.qa-item{padding:12px 15px;position:relative}
.qa-item+.qa-item::before{content:"";position:absolute;left:15px;right:0;top:0;height:.5px;background:var(--sep)}
.qa-item .q{font-size:14px;font-weight:600;display:flex;gap:8px;align-items:flex-start}
.qa-item .q svg{width:14px;height:14px;color:var(--accent);flex:none;margin-top:3px}
.qa-item .a{font-size:13.5px;color:var(--label-2);margin-top:5px;padding-left:22px;white-space:pre-wrap}
.qa-item textarea{width:100%;font-size:13.5px;resize:none;min-height:34px;color:var(--label-2)}

/* ---------- 表单 ---------- */
.switch{width:51px;height:31px;border-radius:16px;background:var(--fill-3);position:relative;flex:none;
  transition:background .3s var(--ease)}
.switch i{position:absolute;top:2px;left:2px;width:27px;height:27px;border-radius:50%;background:#fff;
  box-shadow:0 2px 5px rgba(0,0,0,.16);transition:transform .34s var(--spring)}
.switch.on{background:var(--green)}
.switch.on i{transform:translateX(20px)}
.field{display:flex;flex-direction:column;gap:6px;padding:12px 15px}
.field label{font-size:12px;color:var(--label-3);font-weight:600}
.field input,.field textarea{font-size:16px}
.field textarea{resize:none;min-height:76px;line-height:1.5}
.stepper{display:flex;align-items:center;gap:0;background:var(--fill-2);border-radius:9px;overflow:hidden}
.stepper button{width:34px;height:30px;display:grid;place-items:center;color:var(--accent);font-size:18px;font-weight:500}
.stepper button:active{background:var(--fill-3)}
.stepper span{min-width:34px;text-align:center;font-size:14px;font-variant-numeric:tabular-nums;font-weight:600}
.color-dots{display:flex;gap:10px;padding:12px 15px;flex-wrap:wrap}
.color-dots button{width:28px;height:28px;border-radius:50%;background:var(--c);position:relative;
  transition:transform .28s var(--spring)}
.color-dots button:active{transform:scale(.88)}
.color-dots button.on::after{content:"";position:absolute;inset:-4px;border-radius:50%;box-shadow:0 0 0 2px var(--c)}

/* ---------- 空状态 ---------- */
.empty{display:flex;flex-direction:column;align-items:center;gap:14px;padding:56px 30px;text-align:center}
.empty .bubble{width:64px;height:64px;border-radius:22px;background:var(--card);box-shadow:var(--shadow-card);
  display:grid;place-items:center;animation:floaty 3.4s var(--ease) infinite}
.empty .bubble svg{width:26px;height:26px;color:var(--accent)}
@keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
.empty .btn{flex:none;padding:0 20px;height:42px}

/* 市场(企业大全) */
.mk-item{display:flex;align-items:center;gap:12px;padding:11px 15px;position:relative}
.mk-item+.mk-item::before{content:"";position:absolute;left:15px;right:0;top:0;height:.5px;background:var(--sep)}
.mk-item .nm{font-size:15px;font-weight:600;letter-spacing:-.01em}
.mk-item .mt{font-size:11.5px;color:var(--label-3);margin-top:2px;display:flex;gap:6px;align-items:center}
.mk-item .act{display:flex;gap:6px;align-items:center}
.hl{color:var(--accent);font-weight:700}
.skeleton{height:58px;border-radius:18px;background:linear-gradient(100deg,var(--fill-2) 30%,var(--fill) 50%,var(--fill-2) 70%);
  background-size:220% 100%;animation:shimmer 1.3s linear infinite}
@keyframes shimmer{from{background-position:120% 0}to{background-position:-120% 0}}

/* 多选工具条 */
.bulk{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(var(--safe-b) + 12px);z-index:62;
  display:flex;align-items:center;gap:4px;padding:6px;border-radius:24px;
  background:rgba(255,255,255,.78);backdrop-filter:var(--blur);box-shadow:var(--shadow-float);
  animation:riseIn .4s var(--spring)}
.bulk button{height:40px;padding:0 13px;border-radius:18px;display:flex;align-items:center;gap:6px;font-size:13.5px;
  font-weight:600;color:var(--label-2);transition:background .2s}
.bulk button:active{background:var(--fill-2)}
.bulk button svg{width:17px;height:17px}
.bulk button.danger{color:#FF3B30}

/* 报告 */
.report{font-family:ui-monospace,"SF Mono",Menlo,monospace;font-size:12.5px;line-height:1.7;white-space:pre-wrap;
  padding:12px 15px;color:var(--label-2)}

@media (min-width:640px){
  .wrap{max-width:640px;margin:0 auto}
  .nav{max-width:640px;margin:0 auto}
  .chips{max-width:640px;margin:0 auto}
  .kcol{width:300px}
}
@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms !important;transition-duration:.06s !important}}
/* ---------- 看板视图布局 ---------- */
#v-board{overflow:hidden;display:flex;flex-direction:column}
#v-board .nav{flex:none}
#v-board .board{flex:1;min-height:0;height:auto;padding-top:0}
#v-board .kcol{max-height:100%}
#v-board .kcard{touch-action:pan-y;user-select:none;-webkit-user-select:none}