:root{
  --ink:#16202e; --ink2:#4a5566; --mute:#8590a0; --line:#e3e7ee; --bg:#f4f6f9; --card:#fff;
  --brand:#1f3a5f; --brand2:#2d5a8e; --accent:#e8742c; --ok:#1e8a5a; --bad:#c43d3d; --warn:#b7791f;
  --radius:10px;
}
*{box-sizing:border-box}
html,body{margin:0}
body{font:14px/1.6 -apple-system,"PingFang SC","Microsoft YaHei","Noto Sans SC",system-ui,sans-serif;color:var(--ink);background:var(--bg)}
a{color:var(--brand2);text-decoration:none} a:hover{text-decoration:underline}
h1{font-size:22px;margin:0 0 4px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
h2{font-size:18px} h3{font-size:15px;margin:0 0 14px;color:var(--brand)}
small{font-size:12px}
.muted{color:var(--mute)} .center{text-align:center} .small{font-size:12px}
.mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;color:var(--ink2)}

/* header */
.top{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:24px;padding:0 24px;height:56px;background:var(--brand);color:#fff}
.brand{color:#fff;font-weight:600;display:flex;align-items:center;gap:10px;white-space:nowrap}
.brand:hover{text-decoration:none}
.logo{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:7px;background:var(--accent);color:#fff;font-weight:700}
.top nav{display:flex;gap:4px;flex:1}
.top nav a{color:#c9d6e8;padding:6px 12px;border-radius:6px;position:relative}
.top nav a:hover{background:rgba(255,255,255,.08);text-decoration:none;color:#fff}
.top nav a.on{background:rgba(255,255,255,.14);color:#fff}
.dot{font-style:normal;display:inline-block;min-width:18px;padding:0 5px;margin-left:4px;border-radius:9px;background:var(--accent);color:#fff;font-size:11px;line-height:18px;text-align:center}
.who{display:flex;align-items:center;gap:14px;white-space:nowrap}
.who span{display:flex;flex-direction:column;line-height:1.2;text-align:right}
.who small{color:#9fb3cc}
.who a{color:#c9d6e8;font-size:13px}

main.wrap{max-width:1240px;margin:0 auto;padding:24px}
.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;flex-wrap:wrap}
.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.actions form{margin:0}
.crumbs{font-size:12px;color:var(--mute);margin-bottom:2px}

/* card */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:20px;margin-bottom:16px}
.card.flush{padding:0;overflow:hidden}
.card.narrow{max-width:440px}
.stack{display:flex;flex-direction:column;gap:12px}
.stack label,.login label,.block-label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--ink2)}
.note{background:#eef3fa;border-left:3px solid var(--brand2);padding:10px 14px;border-radius:6px;color:var(--ink2);margin:0 0 16px}
.warn{background:#fff7e8;border:1px solid #f2d39b;color:#7a5410;padding:10px 14px;border-radius:8px;margin-bottom:16px}
.flash{padding:10px 14px;border-radius:8px;margin-bottom:14px}
.flash.ok{background:#e7f5ee;color:#16603f;border:1px solid #bfe3cf}
.flash.error{background:#fdeceb;color:#8f2a2a;border:1px solid #f2c4c1}

/* buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 14px;border-radius:7px;border:1px solid var(--line);background:#fff;color:var(--ink);font:inherit;cursor:pointer;white-space:nowrap}
.btn:hover{border-color:#c4ccd8;text-decoration:none}
.btn.primary{background:var(--brand2);border-color:var(--brand2);color:#fff}
.btn.primary:hover{background:var(--brand)}
.btn.danger{color:var(--bad);border-color:#efc3c3}
.btn.danger:hover{background:#fdeceb}
.btn.ghost{background:transparent}
.btn.small{padding:4px 10px;font-size:13px}
.btn.block{width:100%;padding:10px}

/* forms */
input,select,textarea{font:inherit;color:var(--ink);border:1px solid #d5dbe4;border-radius:7px;padding:7px 10px;background:#fff;width:100%;min-width:0}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand2);box-shadow:0 0 0 3px rgba(45,90,142,.12)}
input[type=checkbox],input[type=radio]{width:auto}
textarea{resize:vertical}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px 28px}
.form-grid.four{grid-template-columns:repeat(4,1fr)}
.fld{display:flex;flex-direction:column;gap:5px}
.fld.full{grid-column:1/-1}
.fld>label{font-size:13px;color:var(--ink2)}
.hint{font-size:12px;color:var(--mute)}
.ro{padding:7px 10px;background:#f1f3f6;border-radius:7px;color:var(--ink2);border:1px solid #e6e9ee}
.checks{display:flex;flex-wrap:wrap;gap:8px 18px;padding:4px 0}
.chk{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;cursor:pointer}
.file-cur{display:flex;gap:14px;align-items:center;font-size:13px}
.dup-box{background:#fff7e8;border:1px solid #f2d39b;color:#7a5410;padding:8px 10px;border-radius:7px;font-size:12.5px}
.sticky-actions{position:sticky;bottom:0;display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:14px 20px;background:rgba(255,255,255,.96);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 -4px 16px rgba(20,30,50,.06)}
.filters{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap}
.filters input{max-width:280px} .filters select{max-width:180px}
.row-actions{display:flex;gap:10px;margin-top:12px}

/* tables */
table{border-collapse:collapse;width:100%}
.list th{background:#f7f9fb;text-align:left;font-weight:500;color:var(--ink2);font-size:12.5px;padding:10px 14px;border-bottom:1px solid var(--line);white-space:nowrap}
.list td{padding:10px 14px;border-bottom:1px solid #eef1f5;vertical-align:top}
.list tr:last-child td{border-bottom:0}
.list tr:hover td{background:#fafbfd}
.list tr.off td{opacity:.5}
.list td input,.list td select{padding:5px 8px}
.card .list{margin:0 -20px -20px;width:calc(100% + 40px)}
.card.flush .list{margin:0;width:100%}
.scroll-x{overflow-x:auto}
.mini{font-size:12.5px;margin-top:8px}
.mini th,.mini td{border:1px solid var(--line);padding:5px 8px;text-align:left;vertical-align:top}
.mini th{background:#f7f9fb;font-weight:500;color:var(--ink2)}
.mini.wide td,.mini.wide th{text-align:center;white-space:nowrap}

/* badges */
.badge{display:inline-block;font-size:12px;font-weight:500;padding:2px 9px;border-radius:20px;background:#eef1f5;color:var(--ink2);white-space:nowrap;vertical-align:middle}
.b-draft{background:#eef1f5;color:#5b6676}
.b-pending,.b-pending_gm,.b-pending_vp{background:#fff3e0;color:#a35a00}
.b-approved,.b-assigned{background:#e4f4ec;color:#16603f}
.b-scored{background:#e7effa;color:#24508a}
.b-rejected{background:#fdeceb;color:#a12f2f}
.tag{display:inline-block;font-size:12px;padding:1px 8px;border-radius:4px;background:#eef3fa;color:var(--brand2);white-space:nowrap}
.tag.red{background:#fdeceb;color:var(--bad)}
.grade{display:inline-flex;align-items:baseline;gap:4px;font-weight:700;font-size:13px;padding:1px 9px;border-radius:6px;color:#fff;vertical-align:middle}
.grade small{font-weight:500;opacity:.9;font-size:11px}
.g-A{background:#1e8a5a}.g-B{background:#2d5a8e}.g-C{background:#b7791f}.g-D{background:#8590a0}

/* view */
.grid{display:grid;grid-template-columns:1fr 1fr;gap:0 28px;margin:0}
.kv{display:grid;grid-template-columns:150px 1fr;gap:10px;padding:8px 0;border-bottom:1px dashed #eceff3}
.kv.full{grid-column:1/-1}
.kv dt{color:var(--mute);font-size:13px}
.kv dd{margin:0;word-break:break-word}
.empty{color:#b3bac5;font-size:13px}
.pre{white-space:pre-wrap}
.two-col{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:16px;align-items:start}
.side-item{padding:8px 0;border-bottom:1px solid #eef1f5}
.side-item:last-child{border:0}
.summary{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;margin-bottom:16px}
.summary>div{background:#fff;padding:12px 16px}
.summary dt{font-size:12px;color:var(--mute)} .summary dd{margin:2px 0 0;font-weight:500}
.approve{border:1px solid #f0c48a;background:#fffaf2}
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:16px}
.tabs a{padding:9px 16px;color:var(--ink2);border-bottom:2px solid transparent;margin-bottom:-1px}
.tabs a.on{color:var(--brand);border-color:var(--brand2);font-weight:500}
.tabs a:hover{text-decoration:none;color:var(--brand)}
.act-head{display:flex;justify-content:space-between;align-items:center;padding:14px 20px;border-bottom:1px solid var(--line);gap:12px;flex-wrap:wrap}
.list.act td{min-width:90px} .list.act td:nth-child(n+5){min-width:150px}
.list.act textarea{min-height:36px}

/* timeline */
.timeline{list-style:none;margin:0;padding:0 0 0 14px;border-left:2px solid var(--line)}
.timeline li{position:relative;padding:0 0 16px 14px}
.timeline li::before{content:"";position:absolute;left:-21px;top:5px;width:12px;height:12px;border-radius:50%;background:#fff;border:2px solid #b8c2d0}
.timeline li.tl-approve::before,.timeline li.tl-gm_approve::before,.timeline li.tl-score::before{border-color:var(--ok);background:var(--ok)}
.timeline li.tl-reject::before,.timeline li.tl-gm_reject::before{border-color:var(--bad);background:var(--bad)}
.timeline li.tl-submit::before{border-color:var(--accent);background:var(--accent)}
.tl-head{display:flex;flex-direction:column}
.tl-head .muted{font-size:12px}
.tl-comment{margin-top:4px;padding:6px 10px;background:#f6f8fa;border-radius:6px;font-size:13px;white-space:pre-wrap}
details{margin-top:6px;font-size:13px}
summary{cursor:pointer;color:var(--brand2)}
.grid.snap{grid-template-columns:1fr;margin-top:6px}
.grid.snap .kv{grid-template-columns:120px 1fr;padding:4px 0;font-size:12.5px}

/* dashboard */
.flow{display:flex;align-items:center;gap:0;margin:4px 0 18px;flex-wrap:wrap;row-gap:8px}
.flow .step{background:#fff;border:1px solid var(--line);border-radius:8px;padding:8px 12px;font-size:13px;display:flex;align-items:center;gap:8px}
.flow .step b{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--brand2);color:#fff;font-size:11px}
.flow i{width:22px;height:2px;background:#c9d2de}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
.stat{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px 18px;color:var(--ink2);font-size:13px}
.stat span{display:block;font-size:26px;font-weight:600;color:var(--brand);line-height:1.2}

/* score */
.pills{display:flex;gap:6px}
.pills label{cursor:pointer}
.pills input{position:absolute;opacity:0;pointer-events:none}
.pills span{display:inline-grid;place-items:center;width:34px;height:30px;border:1px solid #d5dbe4;border-radius:6px;font-weight:500}
.pills input:checked+span{background:var(--brand2);border-color:var(--brand2);color:#fff}
.pills input:focus-visible+span{box-shadow:0 0 0 3px rgba(45,90,142,.25)}
.score-total{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-top:16px;padding-top:14px;border-top:1px solid var(--line);flex-wrap:wrap}
.score-total b{font-size:24px;color:var(--brand)}
.score-total label{display:flex;align-items:center;gap:8px;white-space:nowrap}
.score-total select{width:80px}

/* login */
main.login-wrap{min-height:100vh;display:grid;place-items:center;padding:16px;background:linear-gradient(160deg,#1f3a5f 0%,#2d5a8e 100%)}
.login{width:100%;max-width:380px;display:flex;flex-direction:column;gap:14px;padding:28px}
.login-brand{display:flex;gap:12px;align-items:center;margin-bottom:6px}
.login-brand .logo{width:40px;height:40px;font-size:20px;border-radius:10px}
.login-brand div{display:flex;flex-direction:column}
.login-brand b{font-size:17px}
.login-brand small{color:var(--mute)}

/* required / errors */
.req{color:var(--bad);font-style:normal;margin-left:3px;font-weight:600}
.errs{margin:4px 0 0;padding-left:20px}
.warn-text{color:var(--warn)}
.num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.left{text-align:left!important}
.ok-mark{color:var(--ok);margin-left:2px}
.role-list{margin:6px 0;padding-left:20px}

/* stepper */
.stepper{display:flex;list-style:none;margin:0 0 16px;padding:0;gap:4px;flex-wrap:wrap;counter-reset:st}
.stepper li{counter-increment:st;font-size:12.5px;padding:5px 12px 5px 8px;border-radius:20px;background:#eef1f5;color:var(--mute);display:flex;align-items:center;gap:6px}
.stepper li::before{content:counter(st);display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;background:#d5dbe4;color:#fff;font-size:11px}
.stepper li.done{background:#e4f4ec;color:#16603f}.stepper li.done::before{content:"✓";background:var(--ok)}
.stepper li.cur{background:#fff3e0;color:#a35a00;font-weight:600}.stepper li.cur::before{background:var(--accent)}
.stepper li.bad{background:#fdeceb;color:var(--bad)}.stepper li.bad::before{content:"!";background:var(--bad)}

/* decision chain editor */
.dc-editor{border:1px solid var(--line);border-radius:8px;padding:12px;background:#fbfcfd}
.dc-rows-wrap{overflow-x:auto}
.dc-rows{min-width:900px}
.dc-rows th{font-size:12px;font-weight:500;color:var(--ink2);text-align:left;padding:0 6px 6px}
.dc-rows td{padding:3px 4px;vertical-align:middle}
.dc-rows td input,.dc-rows td select{padding:5px 8px;font-size:13px}
.dc-rows td:first-child{min-width:130px}
.dc-rows td:nth-child(4) select{min-width:140px}.dc-rows td:nth-child(5) select{min-width:78px}.dc-rows td:nth-child(6) select{min-width:120px}
.dc-tools{display:flex;gap:12px;align-items:center;margin-top:8px;flex-wrap:wrap}
.dc-msg{margin-top:10px;padding:8px 12px;border-radius:7px;background:#fdeceb;color:#8f2a2a;border:1px solid #f2c4c1;font-size:13px}
.dc-preview-head{margin:14px 0 6px;font-size:12px;color:var(--mute)}
.dc-preview{background:#fff;border:1px dashed #d5dbe4;border-radius:8px;padding:10px;min-height:60px}

/* decision chain chart (org tree) */
.dc-chart{overflow-x:auto;padding:4px 0 8px}
.org,.org ul{list-style:none;margin:0;padding:0;display:flex;justify-content:center}
.org{width:max-content;margin:0 auto}
.org ul{padding-top:18px;position:relative}
.org li{position:relative;padding:18px 6px 0;display:flex;flex-direction:column;align-items:center}
.org>li{padding-top:0}
.org li::before,.org li::after{content:"";position:absolute;top:0;width:50%;height:18px;border-top:1.5px solid #c4ccd8}
.org li::before{right:50%}
.org li::after{left:50%;border-left:1.5px solid #c4ccd8}
.org li:only-child::before,.org li:only-child::after{display:none}
.org li:only-child{padding-top:0}
.org ul li:only-child{padding-top:18px}
.org ul li:only-child::after{display:block;border-top:0;width:0;left:50%}
.org li:first-child::before,.org li:last-child::after{border:0}
.org li:last-child::before{border-right:1.5px solid #c4ccd8;border-radius:0 6px 0 0}
.org li:first-child::after{border-radius:6px 0 0 0}
.org>li::before,.org>li::after{display:none}
.org ul::before{content:"";position:absolute;top:0;left:50%;height:18px;border-left:1.5px solid #c4ccd8}
.node{background:#fff;border:1px solid #d5dbe4;border-left:4px solid #b8c2d0;border-radius:8px;padding:7px 10px;min-width:130px;max-width:200px;text-align:left;font-size:12.5px;line-height:1.45;box-shadow:0 1px 2px rgba(20,30,50,.05)}
.node.decider{border-color:#e8a46b;border-left-color:var(--accent);background:#fffaf4}
.node-name{font-weight:600;font-size:13.5px;color:var(--ink)}
.node-title{color:var(--ink2)}
.node-meta{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:3px}
.node-note{color:var(--mute);font-size:11.5px;margin-top:2px;word-break:break-word}
.dc-key{color:var(--accent);margin-right:3px}
.att{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px;vertical-align:middle;background:#c4ccd8}
.att-支持{background:#1e8a5a}.att-中立{background:#7a8aa0}.att-反对{background:#c43d3d}.att-未知{background:#d5dbe4}
.att-b-支持{border-left-color:#1e8a5a}.att-b-反对{border-left-color:#c43d3d}.att-b-中立{border-left-color:#7a8aa0}
.node.decider.att-b-支持{border-left-color:#1e8a5a}.node.decider.att-b-反对{border-left-color:#c43d3d}
.att-label{font-size:11.5px;color:var(--ink2);white-space:nowrap}
.dc-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--mute);margin-top:8px}
.kv.chain{grid-template-columns:1fr}
.kv.chain dt{margin-bottom:4px}

/* assign */
.staff-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin-bottom:12px}
.staff{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:8px;padding:10px 12px;cursor:pointer}
.staff:has(input:checked){border-color:var(--brand2);background:#f2f6fb}
.staff span{display:flex;flex-direction:column;line-height:1.3}

/* settings */
.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.list.fx{margin:8px 0 0;width:100%}
.card .list.fx{margin:8px 0 0;width:100%}
.list.fx td{padding:4px 6px}

/* board */
.board-filters{margin:0;align-items:center}
.seg{display:inline-flex;border:1px solid #d5dbe4;border-radius:7px;overflow:hidden;background:#fff}
.seg a{padding:6px 14px;color:var(--ink2);font-size:13px}
.seg a+a{border-left:1px solid #d5dbe4}
.seg a.on{background:var(--brand2);color:#fff}
.seg a:hover{text-decoration:none}
.kpis{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:12px;margin-bottom:16px}
.kpi{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px 18px}
.kpi-label{font-size:12.5px;color:var(--mute)}
.kpi-val{font-size:26px;font-weight:600;color:var(--ink);line-height:1.3;font-variant-numeric:tabular-nums}
.kpi-val small{font-size:13px;font-weight:400;color:var(--mute);margin-left:4px}
.kpi-sub{font-size:12.5px;color:var(--ink2)}
.kpi.hero{background:var(--brand);border-color:var(--brand);color:#fff}
.kpi.hero .kpi-label,.kpi.hero .kpi-sub,.kpi.hero small{color:#c9d6e8}
.kpi.hero .kpi-val{color:#fff;font-size:32px}
.board-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.board-grid .span2{grid-row:span 2}
.bars{width:100%;font-size:13px}
.bars th{text-align:left;font-weight:500;color:var(--ink);padding:5px 10px 5px 0;white-space:nowrap;width:1%;max-width:150px;overflow:hidden;text-overflow:ellipsis}
.bars td{padding:5px 0 5px 10px}
.bars .bar-cell{width:100%;padding-left:0}
.bar{height:14px;border-radius:0 4px 4px 0;background:var(--brand2);min-width:2px}
.bar.light{background:#a9bfdc;height:10px}
.bar.muted-bar{background:#c4ccd8}
.bars tr.sub th{font-weight:400;color:var(--ink2);padding-left:16px;font-size:12.5px}
.bars tr.sub td{padding-top:2px;padding-bottom:2px;font-size:12.5px}
.region-block tr:first-child th,.region-block tr:first-child td{border-top:1px solid #eef1f5;padding-top:9px}
.bars tfoot th,.bars tfoot td{border-top:1.5px solid var(--line);padding-top:8px}
.list.top{min-width:960px}
.bars tr:hover th,.bars tr:hover td{background:#fafbfd}

@media (max-width:900px){
  .kpis{grid-template-columns:1fr 1fr}
  .board-grid,.settings-grid{grid-template-columns:1fr}
  .board-grid .span2{grid-row:auto}
  .two-col{grid-template-columns:1fr}
  .summary{grid-template-columns:1fr 1fr}
  .form-grid.four{grid-template-columns:1fr 1fr}
}
@media (max-width:680px){
  main.wrap{padding:16px}
  .top{flex-wrap:wrap;height:auto;padding:10px 16px;gap:8px 16px}
  .top nav{order:3;flex-basis:100%;overflow-x:auto}
  .who{margin-left:auto}
  .who span{display:none}
  .form-grid,.form-grid.four,.grid{grid-template-columns:1fr}
  .kv{grid-template-columns:110px 1fr}
  .stats{grid-template-columns:1fr 1fr}
  .summary{grid-template-columns:1fr}
  .list th,.list td{padding:8px 10px}
  .card:not(.flush) .list{display:block;overflow-x:auto}
  .flow i{display:none} .flow{gap:6px}
}
