:root{
  --red:#F5333F;--red-dk:#C8202B;--red-bg:#FDECEE;
  --ink:#23272B;--slate:#4A5560;--gray:#8A939C;--line:#E6E9EC;--fill:#F4F6F7;--card:#fff;
  --teal:#0E8C93;--teal-bg:#E4F8F9;--amber:#9A6412;--amber-bg:#FBF3E3;--green:#23824A;--green-bg:#E6F5EC;
  --r:16px;--glass:rgba(255,255,255,.96);--hover:#FAFBFB;--solid:var(--ink);--solid-fg:#fff;--rs:10px;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--fill);color:var(--ink);font:15px/1.5 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Segoe UI",system-ui,sans-serif;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
h1{font-size:26px;line-height:1.2;margin:0;font-weight:700;letter-spacing:-.01em}
h2{font-size:17px;margin:0;font-weight:700}
p{margin:0}
button,input,select,textarea{font:inherit;color:inherit}
.num{font-variant-numeric:tabular-nums}
.muted{color:var(--gray)} .small{font-size:12px} .right{text-align:right} .nowrap{white-space:nowrap}
.red{color:var(--red-dk)} .green{color:var(--green)}

/* ---------- 骨架 ---------- */
.rail{position:fixed;inset:0 auto 0 0;width:216px;background:var(--card);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:26px 14px 18px;z-index:5}
.brand{padding:0 10px 22px}
.brand b{display:block;font-size:17px;letter-spacing:.01em}
.brand b i{font-style:normal;color:var(--red)}
.brand span{font-size:11px;color:var(--gray);letter-spacing:.16em}
.rail nav{display:flex;flex-direction:column;gap:2px;flex:1}
.rail nav a{padding:9px 10px;border-radius:10px;font-size:14px;color:var(--slate);display:flex;justify-content:space-between;align-items:center}
.rail nav a:hover{background:var(--fill)}
.rail nav a.on{color:var(--ink);font-weight:700;background:var(--fill)}
.rail nav a.on::before{content:"";position:absolute;left:0;width:3px;height:20px;background:var(--red);border-radius:0 3px 3px 0}
.rail nav .sep{height:1px;background:var(--line);margin:10px 10px}
.rail .who{padding:10px;font-size:12px;color:var(--gray);border-top:1px solid var(--line)}
.rail .who b{display:block;color:var(--ink);font-size:14px}
.main{margin-left:216px;padding:38px 44px 80px;max-width:1240px}
.topbar,.tabbar{display:none}
.foot{margin-top:56px;font-size:11px;color:var(--gray);line-height:1.8}
.foot a{color:var(--gray)}

.hdr{margin-bottom:26px}
.hdr .eyebrow{font-size:11px;letter-spacing:.14em;color:var(--gray);font-weight:600;margin-bottom:6px}
.hdr .sub{font-size:13px;color:var(--gray);margin-top:6px}
.hdr .row{align-items:flex-end}
.sect{display:flex;align-items:center;justify-content:space-between;margin:30px 2px 10px;font-size:12px;font-weight:700;color:var(--gray);letter-spacing:.08em}
.row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.wrap{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
.grid.two{grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}
.card{background:var(--card);border-radius:var(--r);padding:16px 18px;box-shadow:0 1px 0 rgba(0,0,0,.03)}
.card.pad0{padding:0;overflow:hidden}
a.card{display:block;transition:box-shadow .15s}
a.card:hover{box-shadow:0 6px 22px rgba(35,39,43,.08)}
.empty{padding:28px 18px;text-align:center;color:var(--gray);font-size:13px}

.chip{display:inline-block;font-size:11px;font-weight:600;padding:3px 9px;border-radius:999px;background:var(--fill);color:var(--slate);white-space:nowrap}
.chip.red{background:var(--red-bg);color:var(--red-dk)} .chip.teal{background:var(--teal-bg);color:var(--teal)}
.chip.green{background:var(--green-bg);color:var(--green)} .chip.amber{background:var(--amber-bg);color:var(--amber)}
.chip.muted{background:transparent;color:var(--gray);padding-left:0;padding-right:0;font-weight:500}
.chip.ink{background:var(--solid);color:var(--solid-fg)}
.dot{width:7px;height:7px;border-radius:50%;background:var(--red);display:inline-block;margin-right:6px;box-shadow:0 0 0 3px var(--red-bg);vertical-align:1px}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;background:var(--solid);color:var(--solid-fg);border-radius:12px;padding:10px 18px;font-size:14px;font-weight:700;cursor:pointer;white-space:nowrap}
.btn.primary{background:var(--red);color:#fff} .btn.primary:hover{background:var(--red-dk)}
.btn.ghost{background:var(--card);color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--line)}
.btn.sm{padding:6px 12px;font-size:12px;border-radius:9px}
.btn.block{display:flex;width:100%;padding:14px;font-size:16px;border-radius:14px}
.btn:disabled{opacity:.4;cursor:default}
.link{color:var(--slate);font-size:13px;text-decoration:underline;text-underline-offset:3px;background:none;border:0;padding:0;cursor:pointer}
form.inline{display:inline}

.field{display:block;margin-bottom:12px}
.field span{display:block;font-size:12px;color:var(--gray);margin-bottom:4px}
input[type=text],input[type=tel],input[type=password],input[type=number],input[type=date],select,textarea{width:100%;border:1.5px solid var(--line);border-radius:10px;padding:9px 11px;background:var(--card);outline:0;min-height:40px}
input:focus,select:focus,textarea:focus{border-color:var(--ink)}
textarea{min-height:92px;resize:vertical;line-height:1.6}
.formrow{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:0 12px}
.search{max-width:320px}

.flash{position:fixed;left:50%;top:18px;transform:translateX(-50%);z-index:50;display:flex;flex-direction:column;gap:8px;width:min(92vw,460px)}
.flash div{background:var(--solid);color:var(--solid-fg);border-radius:12px;padding:11px 16px;font-size:14px;box-shadow:0 10px 30px rgba(0,0,0,.18);animation:drop .25s}
.flash div.err{background:var(--red-dk);color:#fff}
@keyframes drop{from{opacity:0;transform:translateY(-8px)}}

/* ---------- 数字卡 ---------- */
.stat{display:flex;gap:18px;align-items:flex-end}
.stat .big{font-size:44px;font-weight:800;line-height:1;letter-spacing:-.02em}
.stat .big small{font-size:14px;font-weight:600;color:var(--gray);margin-left:4px;letter-spacing:0}
.stat .lbl{font-size:12px;color:var(--gray);margin-bottom:6px}
.neck{margin-top:14px;border-top:1px solid var(--line);padding-top:10px;font-size:12px;color:var(--slate)}
.neck div{display:flex;justify-content:space-between;padding:2px 0}
.neck b{font-weight:600}

/* ---------- 项目卡 ---------- */
.proj .name{font-size:17px;font-weight:700;margin:8px 0 2px}
.proj .meta{font-size:12px;color:var(--gray)}
.miles{display:flex;gap:6px;margin-top:12px}
.mile{flex:1;background:var(--fill);border-radius:10px;padding:7px 9px}
.mile .l{font-size:10px;color:var(--gray)} .mile .d{font-size:13px;font-weight:700;margin-top:1px}
.bar{height:4px;border-radius:2px;background:var(--fill);margin-top:12px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--ink);border-radius:2px}

.steps{display:flex;gap:4px;margin:18px 0 4px;overflow-x:auto;scrollbar-width:none}
.steps span{flex:1 0 auto;padding-right:14px;font-size:11px;color:var(--gray);padding-top:9px;border-top:3px solid var(--line);white-space:nowrap}
.steps span.done{border-color:var(--ink);color:var(--slate)}
.steps span.now{border-color:var(--red);color:var(--ink);font-weight:700}
.tabs{display:flex;gap:22px;border-bottom:1px solid var(--line);margin:22px 0 18px;overflow-x:auto;scrollbar-width:none}
.tabs a{padding:10px 0;font-size:14px;color:var(--gray);white-space:nowrap;border-bottom:2px solid transparent;margin-bottom:-1px}
.tabs a.on{color:var(--ink);font-weight:700;border-color:var(--ink)}
.tabs a em{font-style:normal;font-size:11px;background:var(--red);color:#fff;border-radius:9px;padding:1px 6px;margin-left:5px;vertical-align:1px}
.banner{background:var(--card);border-radius:var(--r);padding:16px 18px;display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:14px;box-shadow:inset 3px 0 0 var(--red)}
.banner p{font-size:14px} .banner .small{margin-top:2px}

/* ---------- 清单 ---------- */
.kit{background:var(--card);border-radius:var(--r);margin-bottom:12px;overflow:hidden}
.kit-h{padding:13px 18px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:baseline}
.kit-h b{font-size:14px} .kit-h span{font-size:12px;color:var(--gray)}
.item{padding:12px 18px;border-bottom:1px solid var(--line);display:grid;grid-template-columns:1fr auto;gap:4px 14px;align-items:center}
.item:last-child{border-bottom:0}
.item.tap{cursor:pointer} .item.tap:hover{background:var(--hover)}
.item.off{opacity:.45}
.item .n{font-size:14px;font-weight:600}
.item .spec{font-size:11px;color:var(--gray);margin-top:1px}
.item .q{font-size:17px;font-weight:800;text-align:right;white-space:nowrap}
.item .q small{font-size:11px;font-weight:500;color:var(--gray);margin-left:3px}
.item .under{grid-column:1/-1;display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.sw{display:flex;gap:5px;flex-wrap:wrap}
.s{min-width:20px;height:20px;border-radius:6px;background:#D5DADF;font-size:10px;line-height:20px;text-align:center;color:#fff;padding:0 4px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);overflow:hidden;white-space:nowrap}
.s.txt{background:var(--fill);color:var(--slate);box-shadow:inset 0 0 0 1px var(--line)}
.s.light{color:var(--ink)}
.acts{display:flex;gap:6px;flex-wrap:wrap}

/* ---------- 表格 ---------- */
.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl th{font-size:11px;color:var(--gray);font-weight:600;text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap;letter-spacing:.04em}
.tbl td{padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl tr:last-child td{border-bottom:0}
.tbl td.r,.tbl th.r{text-align:right}
.tbl td b{font-weight:700}
.tbl tr.clk{cursor:pointer} .tbl tr.clk:hover td{background:var(--hover)}
.tbl .code{font-size:11px;color:var(--gray);display:block}
.scroll-x{overflow-x:auto}

/* ---------- 弹层 ---------- */
.dim{position:fixed;inset:0;background:rgba(20,22,25,.45);z-index:40;display:none}
.sheet{position:fixed;z-index:41;background:var(--card);display:none;flex-direction:column;left:50%;top:50%;transform:translate(-50%,-50%);width:min(560px,94vw);max-height:86vh;border-radius:22px;padding:22px 24px 20px}
.open>.dim{display:block} .open>.sheet{display:flex}
.sheet h3{margin:0;font-size:19px}
.sheet .sub{font-size:12px;color:var(--gray);margin-top:3px}
.sheet .body{overflow-y:auto;overflow-x:hidden;margin:14px -6px 0;padding:0 6px;flex:1}
.stepper{display:flex;align-items:center;justify-content:center;gap:22px;margin:22px 0;font-size:30px;font-weight:800}
.stepper small{font-size:13px;color:var(--gray);font-weight:500;margin-left:4px}
.rb{width:42px;height:42px;border-radius:50%;border:1.5px solid var(--line);background:var(--card);font-size:22px;line-height:1;cursor:pointer;color:var(--slate)}
.rb:active{background:var(--fill)}
.cgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:8px;padding:2px}
.cs{min-width:0;border-radius:12px;padding:8px;background:var(--fill);text-align:center;cursor:pointer;user-select:none;position:relative}
.cs .b{height:34px;border-radius:8px;background:#D5DADF;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08)}
.cs .n{font-size:11px;margin-top:5px;font-weight:600;color:var(--slate);line-height:1.3;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-all}
.cs .a{font-size:10px;color:var(--gray)}
.cs.on{background:var(--card);box-shadow:0 0 0 2px var(--ink)}
.cs .cnt{position:absolute;right:5px;top:5px;min-width:20px;height:20px;border-radius:10px;background:var(--red);color:#fff;font-size:12px;font-weight:800;line-height:20px;display:none}
.cs.on .cnt{display:block}
.cs .minus{position:absolute;left:5px;top:5px;width:20px;height:20px;border-radius:10px;background:var(--card);color:var(--slate);font-size:14px;line-height:18px;display:none;box-shadow:0 0 0 1px var(--line)}
.cs.on .minus{display:block}
.sheet .foot2{margin-top:14px;display:flex;gap:10px;align-items:center}
.sheet .foot2 .sum{flex:1;font-size:13px;color:var(--slate)}

/* ---------- 登录 ---------- */
.auth{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px;background:var(--card)}
.auth .box{width:min(360px,100%)}
.auth .brand{padding:0 0 34px}
.auth .brand b{font-size:24px}
.auth .foot{text-align:center}

/* ---------- 手机 ---------- */
@media (max-width:900px){
  .rail{display:none}
  .main{margin:0;padding:14px 14px 104px}
  .topbar{display:flex;justify-content:space-between;align-items:center;padding:4px 4px 14px;font-size:11px;letter-spacing:.14em;color:var(--gray);font-weight:600}
  .topbar b{color:var(--red)}
  .tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;background:var(--glass);backdrop-filter:blur(10px);border-top:1px solid var(--line);justify-content:space-around;padding:8px 4px calc(10px + env(safe-area-inset-bottom));z-index:20}
  .tabbar a{flex:1;text-align:center;font-size:10px;color:var(--gray)}
  .tabbar a svg{display:block;margin:0 auto 3px;width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
  .tabbar a.on{color:var(--ink);font-weight:700}
  .tabbar a.on svg{stroke:var(--red)}
  h1{font-size:23px}
  .hdr{margin-bottom:18px}
  .grid,.grid.two{grid-template-columns:1fr}
  .card{padding:14px 16px} .item,.kit-h{padding-left:16px;padding-right:16px}
  .stat .big{font-size:38px}
  .sheet{left:0;right:0;top:auto;bottom:0;transform:none;width:auto;border-radius:22px 22px 0 0;max-height:88vh;padding:18px 18px calc(18px + env(safe-area-inset-bottom))}
  .cgrid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .hide-m{display:none!important}
  .tbl{font-size:12.5px} .tbl th,.tbl td{padding:9px 8px}
  .foot{margin-top:36px}
  .sticky{position:fixed;left:0;right:0;bottom:calc(58px + env(safe-area-inset-bottom));background:var(--glass);backdrop-filter:blur(10px);border-top:1px solid var(--line);padding:10px 14px;z-index:19}
  .sticky .btn{width:100%;padding:13px;font-size:16px;border-radius:14px}
  .has-sticky{padding-bottom:70px}
}
@media (min-width:901px){.hide-d{display:none!important}}
.mv{width:auto;max-width:116px;min-height:30px;padding:3px 6px;font-size:12px;font-weight:400;margin-left:8px;color:var(--slate);border-radius:8px;vertical-align:2px}

/* ================= 第一版骨架不变，只换配色（试看）================= */
/* 共同的三个动作：① 状态标签收成中性色，只留一个小色点；② 底色和墨色更沉；③ 最要紧的那个数字放进一张深色卡 */
html[data-theme=ink],html[data-theme=moss],html[data-theme=mist]{--teal-bg:var(--chipbg);--amber-bg:var(--chipbg);--green-bg:var(--chipbg)}
html[data-theme=ink] .chip.teal,html[data-theme=ink] .chip.amber,html[data-theme=ink] .chip.green,
html[data-theme=moss] .chip.teal,html[data-theme=moss] .chip.amber,html[data-theme=moss] .chip.green,
html[data-theme=mist] .chip.teal,html[data-theme=mist] .chip.amber,html[data-theme=mist] .chip.green{color:var(--slate)}
html[data-theme=ink] .chip.teal::before,html[data-theme=ink] .chip.amber::before,html[data-theme=ink] .chip.green::before,
html[data-theme=moss] .chip.teal::before,html[data-theme=moss] .chip.amber::before,html[data-theme=moss] .chip.green::before,
html[data-theme=mist] .chip.teal::before,html[data-theme=mist] .chip.amber::before,html[data-theme=mist] .chip.green::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:6px;vertical-align:1px;background:currentColor}
html[data-theme=ink] .chip.teal::before,html[data-theme=moss] .chip.teal::before,html[data-theme=mist] .chip.teal::before{background:var(--teal)}
html[data-theme=ink] .chip.amber::before,html[data-theme=moss] .chip.amber::before,html[data-theme=mist] .chip.amber::before{background:var(--amber)}
html[data-theme=ink] .chip.green::before,html[data-theme=moss] .chip.green::before,html[data-theme=mist] .chip.green::before{background:var(--green)}
html[data-theme=ink] .card,html[data-theme=moss] .card,html[data-theme=mist] .card,
html[data-theme=ink] .kit,html[data-theme=moss] .kit,html[data-theme=mist] .kit{box-shadow:0 1px 2px rgba(20,22,24,.04),0 10px 28px rgba(20,22,24,.045)}
html[data-theme=ink] .hero,html[data-theme=moss] .hero,html[data-theme=mist] .hero{background:var(--hero);color:#fff;box-shadow:0 10px 26px rgba(20,22,24,.10)}
html[data-theme=ink] .hero .lbl,html[data-theme=moss] .hero .lbl,html[data-theme=mist] .hero .lbl,
html[data-theme=ink] .hero .muted,html[data-theme=moss] .hero .muted,html[data-theme=mist] .hero .muted,
html[data-theme=ink] .hero .big small,html[data-theme=moss] .hero .big small,html[data-theme=mist] .hero .big small,
html[data-theme=ink] .hero .neck,html[data-theme=moss] .hero .neck,html[data-theme=mist] .hero .neck{color:rgba(255,255,255,.72)}
html[data-theme=ink] .hero .neck,html[data-theme=moss] .hero .neck,html[data-theme=mist] .hero .neck{border-color:rgba(255,255,255,.14)}
html[data-theme=ink] .hero .neck b,html[data-theme=moss] .hero .neck b,html[data-theme=mist] .hero .neck b{color:#fff}
html[data-theme=ink] .hero .big,html[data-theme=moss] .hero .big,html[data-theme=mist] .hero .big{font-size:56px}
html[data-theme=ink] .stat .big,html[data-theme=moss] .stat .big,html[data-theme=mist] .stat .big{letter-spacing:-.03em}
html[data-theme=ink] .sect,html[data-theme=moss] .sect,html[data-theme=mist] .sect{letter-spacing:.14em}

/* A1 石墨：黑白灰 + 一点红。最不挑人、最耐看 */
html[data-theme=ink]{--fill:#F1F1EF;--card:#fff;--ink:#141517;--slate:#3E4247;--gray:#8C9095;--line:#E6E6E3;--red:#E0282F;--red-dk:#B91D24;--red-bg:#FBE9E9;
  --teal:#4A7FA8;--amber:#C98A1B;--green:#2F9E63;--chipbg:#F1F1EF;--hero:#3C4047;--hover:#F7F7F5;--glass:rgba(255,255,255,.96)}

/* A2 苔原：暖白底 + 墨绿 + 一点红。户外、沉稳、有温度 */
html[data-theme=moss]{--fill:#F2EFE8;--card:#FDFCF9;--ink:#1B241F;--slate:#47524B;--gray:#938F86;--line:#E5E0D5;--red:#D2382D;--red-dk:#AC2A21;--red-bg:#F7E3DF;
  --teal:#2F5D50;--amber:#B08433;--green:#3F7A4F;--chipbg:#F2EFE8;--hero:#21332A;--hover:#F7F4ED;--glass:rgba(253,252,249,.96);--solid:#21332A;--solid-fg:#FDFCF9}
html[data-theme=moss] .auth{background:var(--card)}

/* A3 雾蓝：冷灰蓝底 + 深海军蓝 + 一点红。技术、冷静 */
html[data-theme=mist]{--fill:#ECEFF2;--card:#fff;--ink:#0E1A26;--slate:#3A4A59;--gray:#8391A0;--line:#DDE3E9;--red:#E5343D;--red-dk:#BF2530;--red-bg:#FCE8EA;
  --teal:#2F6F9F;--amber:#C28A2B;--green:#2E8F6B;--chipbg:#ECEFF2;--hero:#0E1A26;--hover:#F4F6F8;--glass:rgba(255,255,255,.96);--solid:#0E1A26;--solid-fg:#fff}

.theme-pick{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px}
.theme-pick button{border:1.5px solid var(--line);background:var(--card);border-radius:var(--rs);padding:12px 10px;text-align:left;cursor:pointer}
.theme-pick button.on{border-color:var(--red)}
.theme-pick b{display:block;font-size:14px} .theme-pick span{font-size:11px;color:var(--gray)}
