.kpi-row{grid-template-columns:repeat(4,1fr)}
.kpi{padding:18px 20px;position:relative;overflow:hidden}
.kpi .lab{font-size:12.5px;color:var(--ink-3);font-weight:600;display:flex;align-items:center;gap:6px}
.kpi .val{font-size:31px;font-weight:720;letter-spacing:-1px;margin-top:9px;line-height:1}
.kpi .val small{font-size:14px;font-weight:600;color:var(--ink-3);letter-spacing:0}
.kpi .foot{margin-top:11px;font-size:12px;color:var(--ink-2);display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.trend{font-weight:700}
.trend.up{color:var(--red)}.trend.down{color:var(--green)}
.kpi .spark{position:absolute;right:0;bottom:0;opacity:.9}
.kpi.hero{background:linear-gradient(140deg,#0C1A2B,#123A63);color:#fff;border-color:transparent}
.kpi.hero .lab{color:#8FA6BF}
.kpi.hero .foot{color:#B4C4D7}
.ring-wrap{display:flex;align-items:center;gap:16px}
.ring-meta .big{font-size:34px;font-weight:750;letter-spacing:-1.5px}
.ring-meta .small{font-size:12px;color:#8FA6BF;margin-top:2px}
.dashboard-compact{padding:12px 30px 8px}
.dashboard-compact .grid{gap:8px}
.dashboard-compact .mb{margin-bottom:8px}
.dashboard-compact .kpi{padding:11px 14px;min-height:104px}
.dashboard-compact .kpi .val{font-size:24px;margin-top:5px;letter-spacing:0}
.dashboard-compact .kpi .foot{margin-top:6px;font-size:11px;line-height:1.3}
.dashboard-compact .ring-wrap{margin-top:7px!important;gap:10px}
.dashboard-compact .ring-wrap svg{width:48px;height:48px}
.dashboard-compact .ring-wrap circle{r:23px;cx:36px;cy:36px;stroke-width:7}
.dashboard-compact .ring-meta .big{font-size:24px;letter-spacing:0}
.dashboard-compact .ring-meta .small{font-size:10.5px}
.dashboard-compact .company-mini{display:flex;gap:4px;margin-top:6px;flex-wrap:wrap}
.dashboard-compact .company-mini span{font-size:10px;padding:2px 5px;line-height:1.25}
.contract-mini{display:grid!important;grid-template-columns:1fr;gap:4px!important;margin-top:7px!important}
.contract-mini span{display:grid!important;grid-template-columns:36px 1fr;gap:2px 6px;align-items:center;background:rgba(255,255,255,.08);border-radius:7px;padding:4px 7px!important;color:#D7E6F5}
.contract-mini b{font-size:10.5px;color:#fff;font-weight:760}
.contract-mini em{font-style:normal;font-size:9.5px;color:#B4C4D7;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.contract-mini i{grid-column:1 / -1;height:4px;border-radius:20px;background:linear-gradient(90deg,var(--flame-2),var(--flame));box-shadow:0 0 0 1px rgba(255,255,255,.06)}
.dashboard-compact .weather-priority-title{display:none}
.dashboard-compact .weather-priority-card .card-h{padding:9px 14px 0}
.dashboard-compact .weather-priority-card .card-h h3{font-size:13.5px}
.dashboard-compact .weather-priority-card .card-h .sub{font-size:11px}
.dashboard-compact .weather-strip{padding:3px 14px 6px;overflow-x:hidden}
.dashboard-compact .wcard{flex:1 1 0;min-width:0;padding:5px 3px}
.dashboard-compact .wcard:first-child{flex:1.08 1 0}
.dashboard-compact .wcard .wd{font-size:10.5px;line-height:1.15}
.dashboard-compact .wcard .wdate{font-size:10px;line-height:1.1}
.dashboard-compact .wcard .wic{display:none}
.dashboard-compact .wcard .wtemp{font-size:11.5px;line-height:1.2;margin-top:2px}
.dashboard-compact .wcard .wdelta{display:none}
.dashboard-compact .weather-priority-card .note{display:none}
.input-compact{display:flex;align-items:center;gap:14px;border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.72);padding:7px 12px;color:var(--ink-2);box-shadow:var(--shadow)}
.input-compact div{display:flex;gap:5px;align-items:center;font-size:12px}
.input-compact b{color:var(--ink-3);font-weight:700}
.input-compact em{font-style:normal;font-family:var(--mono);font-weight:760;color:var(--primary)}
.input-compact em.warn{color:#B57812}
.input-compact small{margin-left:auto;font-size:11.5px;color:var(--ink-3)}
.leader-strip{background:linear-gradient(135deg,#0C1A2B,#123A63);border-radius:var(--radius);padding:18px 20px;color:#fff;display:flex;align-items:center;gap:18px;box-shadow:var(--shadow)}
.leader-main{flex:1;min-width:0}
.leader-kicker{font-size:11px;letter-spacing:1.4px;color:#8FA6BF;font-weight:750}
.leader-title{font-size:20px;font-weight:720;margin-top:5px;letter-spacing:0;line-height:1.35}
.leader-tags{display:flex;gap:8px;flex-wrap:wrap;margin-top:11px}
.leader-actions{display:flex;gap:10px;flex:0 0 auto}
.leader-actions .btn{box-shadow:none}
.hidden-panel{display:none!important}
.source-mini,.company-mini{display:grid;grid-template-columns:1fr;gap:5px;margin-top:12px}
.source-mini span,.company-mini span{font-size:11.5px;color:#B4C4D7;background:rgba(255,255,255,.08);border-radius:7px;padding:4px 7px}
.company-mini span{display:flex;justify-content:space-between}

.review-row{grid-template-columns:1.05fr 1.25fr 1fr}
.dashboard-review-row{grid-template-columns:1fr 1fr}
.dashboard-year-layout{grid-template-columns:minmax(0,2.1fr) minmax(300px,.9fr)}
.annual-row{grid-template-columns:1.2fr 1fr 1fr}
.year-card .legend{padding-bottom:6px}
.dashboard-compact .year-card .card-h{padding:10px 14px 0}
.dashboard-compact .year-card .card-h h3{font-size:13.8px}
.dashboard-compact .year-summary{padding:7px 14px 0;gap:6px}
.dashboard-compact .year-summary div{padding:6px 8px;border-radius:8px}
.dashboard-compact .year-summary b{font-size:13px;margin-top:2px}
.dashboard-compact .year-summary small{font-size:10.2px;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dashboard-compact .year-card .legend{padding:5px 14px 2px;font-size:11px;gap:10px}
.dashboard-compact #chart-year{min-height:210px}
.dashboard-compact .year-card .chart-box{padding:0 8px 8px}
.dashboard-compact .year-events{display:none}
.dashboard-compact .year-event{padding:3px 6px;font-size:10px;border-radius:7px}
.dashboard-compact .year-insight{padding:0 14px 7px}
.dashboard-compact .yi-main{padding:6px 8px;gap:7px;grid-template-columns:.85fr .8fr minmax(180px,1.35fr) auto}
.dashboard-compact .yi-main span{font-size:10.5px}
.dashboard-compact .yi-main b{font-size:12.5px;margin-top:1px}
.dashboard-compact .yi-main p{font-size:10.8px;line-height:1.3;margin-top:1px}
.dashboard-compact .yi-main .btn{padding:5px 9px;font-size:11px}
.dashboard-year-facts{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;padding:0 14px 8px}
.dashboard-year-facts div{border:1px solid var(--line-2);border-radius:8px;background:#FAFCFE;padding:6px 8px}
.dashboard-year-facts span{display:block;font-size:10.8px;color:var(--ink-3);font-weight:750}
.dashboard-year-facts b{display:block;margin-top:2px;font-size:12px;color:var(--primary)}
.dashboard-year-facts small{display:block;margin-top:1px;font-size:10.2px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dashboard-compact #alertList{margin-top:4px!important}
.dashboard-compact .alert-item{padding:8px 12px;gap:8px}
.dashboard-compact .alert-item .at{font-size:12px}
.dashboard-compact .alert-item .ad{font-size:10.8px;line-height:1.25}
.dashboard-compact .alert-ico{width:25px;height:25px;flex-basis:25px;font-size:12px;border-radius:8px}
.dashboard-compact .alert-right .btn{padding:3px 8px!important;font-size:10.5px!important}
.dashboard-compact .audit-note{margin-top:6px;font-size:10.5px}
.annual-integrated{display:grid;grid-template-columns:1.15fr 1fr;gap:12px;padding:0 20px 20px}
.annual-block{border:1px solid var(--line-2);border-radius:10px;background:#FAFCFE;overflow:hidden;min-width:0}
.annual-block.annual-wide{grid-column:1 / -1}
.annual-h{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px 14px;border-bottom:1px solid var(--line-2)}
.annual-h.compact{align-items:center}
.annual-h h4{font-size:13.5px;font-weight:760;color:var(--ink);margin:0}
.annual-h p{font-size:11.8px;line-height:1.45;color:var(--ink-3);margin-top:3px}
.annual-org-grid{padding:8px 12px 12px;display:grid;gap:6px;overflow-x:auto}
.annual-org{display:grid;grid-template-columns:1.05fr .9fr .9fr .75fr 2fr;gap:10px;align-items:center;min-width:780px;border:1px solid var(--line-2);border-radius:8px;background:var(--panel);padding:8px 10px;font-size:12px}
.annual-org.head{background:var(--line-2);border-color:var(--line-2);color:var(--ink-3);font-weight:750;font-size:11.2px}
.annual-org.total{border-color:#BFE5F3;background:#F2FAFD}
.annual-org span{font-weight:750;color:var(--ink)}
.annual-org b{font-size:12.5px;color:var(--primary);font-weight:760}
.annual-org em{font-style:normal;color:var(--ink-2);font-size:11.5px;white-space:nowrap}
.holiday-grid{grid-template-columns:repeat(2,1fr);padding:12px 14px 14px}
.holiday-grid div{background:var(--panel)}
.year-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:12px 20px 2px}
.year-summary div{border:1px solid var(--line-2);border-radius:10px;padding:10px 12px;background:#FAFCFE}
.year-summary span{display:block;font-size:11.5px;color:var(--ink-3);font-weight:700}
.year-summary b{display:block;margin-top:5px;font-size:17px;color:var(--primary);font-weight:760}
.year-summary small{display:block;margin-top:3px;font-size:11.5px;color:var(--ink-3)}
.year-events{display:flex;gap:8px;flex-wrap:wrap;padding:0 20px 12px}
.year-event{border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:6px 9px;display:flex;align-items:center;gap:7px;font-size:11.5px;font-weight:700;color:var(--ink-2)}
.year-event:hover{border-color:var(--flame);color:var(--primary);background:var(--flame-soft)}
.year-event span{font-family:var(--mono);color:var(--ink-3);font-weight:700}
.year-event.info{border-color:#BFE5F3;background:#F2FAFD}
.year-event.warn{border-color:#F0D39A;background:#FFFAEF}
.year-event.risk{border-color:#F1B8BD;background:#FFF5F6}
.year-insight{padding:0 20px 18px}
.yi-main{display:grid;grid-template-columns:1fr 1fr minmax(220px,1.4fr) auto;gap:10px;align-items:center;border:1px solid var(--line);border-left:4px solid var(--flame);border-radius:10px;background:#FAFCFE;padding:11px 12px}
.yi-main.warn{border-left-color:var(--amber)}
.yi-main.risk{border-left-color:var(--red)}
.yi-main.ok{border-left-color:var(--green)}
.yi-main span{display:block;font-size:11.5px;color:var(--ink-3);font-weight:700}
.yi-main b{display:block;margin-top:3px;font-size:15px;color:var(--ink);font-weight:760}
.yi-main small{font-size:11px;color:var(--ink-3);margin-left:6px}
.yi-main p{font-size:12.2px;color:var(--ink-2);line-height:1.45;margin-top:3px}
.decision-panel{padding:14px 20px 18px}
.decision-main{display:flex;align-items:baseline;justify-content:space-between;gap:16px}
.decision-main span{font-size:12.5px;color:var(--ink-3);font-weight:650}
.decision-main b{font-size:25px;color:var(--primary);letter-spacing:-.5px}
.decision-tags{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}
.decision-note{font-size:12.5px;color:var(--ink-2);line-height:1.65;margin-top:12px;padding-top:12px;border-top:1px solid var(--line-2)}
.version-list{padding:12px 20px 16px}
.version-list.compact{padding:14px 0 0;margin-top:14px;border-top:1px solid var(--line-2)}
.version-list div{display:flex;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px solid var(--line-2);font-size:12.2px}
.version-list div:last-child{border-bottom:none}
.version-list span{color:var(--ink-3);font-weight:650}
.version-list b{font-family:var(--mono);font-size:11.5px;color:var(--ink);text-align:right;word-break:break-all}
.version-list b.state-ok{font-family:var(--sans);color:var(--green)}
.version-list b.state-warn{font-family:var(--sans);color:#B57812}

/* 天气条 */
.weather-strip{display:flex;gap:0;overflow-x:auto;padding:6px 20px 14px}
.wcard{flex:0 0 84px;text-align:center;padding:10px 4px;border-right:1px solid var(--line-2);position:relative}
.wcard:first-child{flex:0 0 90px}
.wcard .wd{font-size:11.5px;color:var(--ink-3);font-weight:600}
.wcard .wdate{font-size:10.5px;color:var(--ink-3);margin-top:1px}
.wcard .wic{margin:6px auto 4px;width:26px;height:26px}
.wcard .wtemp{font-size:12.5px;font-weight:700;font-family:var(--mono)}
.wcard .wtemp small{color:var(--ink-3);font-weight:500}
.wcard .wdelta{margin-top:6px;font-size:10.5px;font-weight:700;padding:1px 6px;border-radius:20px;display:inline-block}
.wcard.alert{background:var(--red-soft)}
.wcard.alert .wd{color:var(--red)}
