/* 供应商独立门户 · 企业蓝 · 无主站依赖 */
:root { --p-primary:#1f6feb; --p-primary-dark:#1557c0; --p-bg:#f4f7fb; --p-card:#fff; --p-text:#1f2d3d; --p-muted:#7a8798; --p-border:#e6ebf2; --p-success:#18a058; --p-warning:#d98b00; --p-danger:#d03050; --p-radius:10px; }
* { box-sizing:border-box; }
html,body { margin:0; padding:0; }
body { font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif; color:var(--p-text); background:var(--p-bg); font-size:14px; line-height:1.6; }
a { color:var(--p-primary); text-decoration:none; }
a:hover { color:var(--p-primary-dark); }
button,input,select,textarea { font:inherit; }
.portal-header { position:sticky; top:0; z-index:20; height:64px; background:#0f2f5f; color:#fff; display:flex; align-items:center; gap:24px; padding:0 28px; box-shadow:0 2px 12px rgba(8,40,90,.18); }
.portal-brand { display:flex; align-items:center; gap:10px; color:#fff; min-width:220px; }
.portal-brand:hover { color:#fff; }
.portal-brand-mark { width:34px; height:34px; border-radius:9px; background:linear-gradient(135deg,#3b82f6,#1f6feb); display:flex; align-items:center; justify-content:center; font-weight:700; }
.portal-brand-img { width:34px; height:34px; object-fit:contain; border-radius:7px; background:#fff; }
.portal-brand b { display:block; font-size:14px; letter-spacing:.3px; }
.portal-brand em { display:block; font-style:normal; font-size:10px; color:#9fc3f9; }
.portal-nav { display:flex; align-items:center; gap:4px; flex:1; }
.portal-nav a { color:#c7d9f5; padding:8px 12px; border-radius:7px; font-size:13px; white-space:nowrap; }
.portal-nav a:hover { color:#fff; background:rgba(255,255,255,.08); }
.portal-nav a.is-active { color:#fff; background:rgba(255,255,255,.16); font-weight:600; }
.portal-user { display:flex; align-items:center; gap:12px; font-size:12px; color:#c7d9f5; white-space:nowrap; }
.portal-user-name { color:#fff; max-width:190px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.portal-bell { position:relative; color:#fff; font-size:16px; }
.portal-bell em { position:absolute; top:-6px; right:-8px; background:#f56c6c; color:#fff; font-style:normal; font-size:10px; line-height:14px; padding:0 4px; border-radius:8px; }
.portal-logout button { border:1px solid rgba(255,255,255,.28); background:transparent; color:#dbe7f8; font-size:11px; padding:4px 8px; border-radius:5px; cursor:pointer; }
.portal-logout button:hover { background:rgba(255,255,255,.12); color:#fff; }
.portal-nav-toggle { display:none; border:0; background:transparent; color:#fff; font-size:20px; cursor:pointer; }
.portal-subnav { display:flex; gap:2px; align-items:center; padding:0 28px; background:#fff; border-bottom:1px solid var(--p-border); overflow-x:auto; }
.portal-subnav a { padding:10px 12px; color:var(--p-muted); font-size:12px; white-space:nowrap; border-bottom:2px solid transparent; }
.portal-subnav a:hover { color:var(--p-primary); }
.portal-subnav a.is-active { color:var(--p-primary); border-bottom-color:var(--p-primary); font-weight:600; }
.portal-page { max-width:1600px; margin:0 auto; padding:24px 28px 40px; }
.portal-page-head { display:flex; justify-content:space-between; align-items:flex-end; gap:20px; margin-bottom:18px; }
.portal-page-head h1 { margin:0 0 4px; font-size:22px; letter-spacing:.2px; }
.portal-page-head p { margin:0; color:var(--p-muted); font-size:12px; }
.portal-card { background:var(--p-card); border:1px solid var(--p-border); border-radius:var(--p-radius); padding:0; margin-bottom:16px; box-shadow:0 2px 10px rgba(25,55,90,.04); overflow:hidden; }
.portal-card-head { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:14px 18px; border-bottom:1px solid var(--p-border); }
.portal-card-head h3 { margin:0; font-size:14px; }
.portal-card-head a { font-size:12px; }
.portal-kpi-grid { display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:14px; margin-bottom:18px; }
.portal-kpi { display:flex; flex-direction:column; gap:2px; background:#fff; border:1px solid var(--p-border); border-radius:var(--p-radius); padding:16px 18px; min-height:104px; color:var(--p-text); box-shadow:0 2px 10px rgba(25,55,90,.04); }
.portal-kpi:hover { border-color:#b9d4ff; box-shadow:0 6px 18px rgba(31,111,235,.12); color:var(--p-text); }
.portal-kpi span { color:var(--p-muted); font-size:12px; }
.portal-kpi b { font-size:28px; line-height:1.2; }
.portal-kpi b.is-warning { color:var(--p-warning); }
.portal-kpi b.is-info { color:var(--p-primary); }
.portal-kpi b.is-money { font-size:22px; }
.portal-kpi em { font-style:normal; color:#8b98a9; font-size:11px; margin-top:auto; }
.portal-kpi em strong { color:var(--p-danger); }
.portal-dashboard-grid { display:grid; grid-template-columns:minmax(0,1.6fr) minmax(300px,1fr); gap:16px; align-items:start; }
.portal-side { display:flex; flex-direction:column; gap:16px; }
.portal-activity { list-style:none; margin:0; padding:4px 18px 12px; }
.portal-activity li { display:flex; gap:12px; padding:12px 0; border-bottom:1px dashed #edf1f6; }
.portal-activity li:last-child { border-bottom:0; }
.portal-activity-dot { width:8px; height:8px; border-radius:50%; margin-top:7px; flex:0 0 8px; background:var(--p-primary); }
.portal-activity-dot.is-acceptance { background:var(--p-success); } .portal-activity-dot.is-contract { background:var(--p-warning); } .portal-activity-dot.is-statement { background:#8b5cf6; }
.portal-activity a { font-size:13px; font-weight:500; }
.portal-activity p { margin:3px 0; color:var(--p-muted); font-size:12px; }
.portal-activity time { color:#a5b1c2; font-size:11px; }
.portal-score-hero { display:flex; align-items:center; gap:14px; padding:16px 18px; }
.portal-score-hero-lg { padding:22px 18px; }
.portal-grade { width:52px; height:52px; border-radius:12px; display:flex; align-items:center; justify-content:center; font-size:24px; font-weight:700; background:#eef4ff; color:var(--p-primary); }
.portal-grade.is-a { background:#e8f8ef; color:#18a058; } .portal-grade.is-b { background:#eef4ff; color:#1f6feb; } .portal-grade.is-c { background:#fff7e6; color:#d98b00; } .portal-grade.is-d { background:#f3f4f6; color:#6b7280; }
.portal-score-hero b { display:block; font-size:24px; line-height:1.2; }
.portal-score-hero em { font-style:normal; color:var(--p-muted); font-size:11px; }
.portal-list-row { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:11px 18px; border-bottom:1px dashed #edf1f6; color:var(--p-text); }
.portal-list-row:last-child { border-bottom:0; }
.portal-list-row b { display:block; font-size:12px; }
.portal-list-row em { display:block; font-style:normal; color:var(--p-muted); font-size:11px; }
.portal-btn { display:inline-flex; align-items:center; justify-content:center; height:34px; padding:0 14px; border:1px solid var(--p-border); border-radius:7px; background:#fff; color:#44546a; font-size:12px; cursor:pointer; white-space:nowrap; }
.portal-btn:hover { border-color:#a9c8f5; color:var(--p-primary); }
.portal-btn.is-primary { background:var(--p-primary); border-color:var(--p-primary); color:#fff; }
.portal-btn.is-primary:hover { background:var(--p-primary-dark); color:#fff; }
.portal-btn.is-block { width:100%; }
.portal-tag { display:inline-flex; align-items:center; height:22px; padding:0 8px; border-radius:11px; font-size:11px; white-space:nowrap; }
.portal-tag.is-success { background:#e8f8ef; color:#18a058; } .portal-tag.is-warning { background:#fff7e6; color:#d98b00; } .portal-tag.is-danger { background:#fdecef; color:#d03050; } .portal-tag.is-info { background:#eef4ff; color:#1f6feb; }
.portal-tabs { display:flex; gap:4px; margin-bottom:12px; background:#fff; border:1px solid var(--p-border); border-radius:9px; padding:4px; width:max-content; }
.portal-tabs a { padding:7px 14px; border-radius:6px; color:var(--p-muted); font-size:12px; }
.portal-tabs a.is-active { background:#eef4ff; color:var(--p-primary); font-weight:600; }
.portal-table-wrap { overflow-x:auto; }
.portal-table { width:100%; border-collapse:collapse; font-size:12px; }
.portal-table th { background:#f7f9fc; color:#66758a; font-weight:600; text-align:left; padding:10px 14px; white-space:nowrap; }
.portal-table td { padding:11px 14px; border-top:1px solid #edf1f6; color:#334155; }
.portal-table tr:hover td { background:#f8fbff; }
.portal-table .is-right { text-align:right; } .portal-table .is-center { text-align:center; }
.portal-muted { color:var(--p-muted); font-size:11px; }
.portal-empty { padding:34px 12px; text-align:center; color:var(--p-muted); font-size:12px; }
.portal-link { font-size:12px; }
.portal-back { display:inline-block; font-size:12px; margin-bottom:6px; }
.portal-detail-grid { display:grid; grid-template-columns:minmax(0,1.5fr) minmax(300px,1fr); gap:16px; align-items:start; }
.portal-dl { display:grid; grid-template-columns:120px 1fr; gap:8px 12px; margin:0; padding:14px 18px; font-size:12px; }
.portal-dl dt { color:var(--p-muted); } .portal-dl dd { margin:0; color:var(--p-text); }
.portal-timeline { list-style:none; margin:0; padding:16px 18px; }
.portal-timeline li { display:flex; gap:12px; padding:0 0 18px; position:relative; }
.portal-timeline li::before { content:''; position:absolute; left:5px; top:14px; bottom:0; width:1px; background:#e1e8f2; }
.portal-timeline li:last-child::before { display:none; }
.portal-timeline-dot { width:11px; height:11px; border-radius:50%; margin-top:4px; flex:0 0 11px; background:#c9d5e5; }
.portal-timeline li.is-done .portal-timeline-dot { background:var(--p-primary); }
.portal-timeline b { font-size:12px; } .portal-timeline p { margin:2px 0; color:var(--p-muted); font-size:11px; } .portal-timeline time { color:#a5b1c2; font-size:10px; }
.portal-acceptance-kpis, .portal-statement-kpis { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:12px; padding:14px 18px; }
.portal-acceptance-kpis > div, .portal-statement-kpis > div { background:#f8fafd; border-radius:8px; padding:10px 12px; }
.portal-acceptance-kpis span, .portal-statement-kpis span { display:block; color:var(--p-muted); font-size:11px; }
.portal-acceptance-kpis b, .portal-statement-kpis b { font-size:20px; }
.portal-acceptance-kpis b.is-good { color:var(--p-success); } .portal-statement-kpis b.is-good { color:var(--p-success); } .portal-statement-kpis b.is-danger { color:var(--p-danger); }
.portal-photo-grid { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px; padding:0 18px 16px; }
.portal-photo-grid a { display:block; border:1px solid var(--p-border); border-radius:8px; overflow:hidden; color:var(--p-muted); }
.portal-photo-grid img { display:block; width:100%; aspect-ratio:4/3; object-fit:cover; background:#eef3fa; }
.portal-photo-grid span { display:block; padding:5px 8px; font-size:10px; }
.portal-note { margin:0 18px 16px; padding:10px 12px; border-radius:7px; background:#f7faff; color:#5a6b82; font-size:11px; line-height:1.8; border:1px solid #e3edfb; }
.portal-note b { color:#334155; }
.portal-score-bars { padding:4px 18px 18px; }
.portal-score-row { display:flex; align-items:center; gap:10px; margin-top:12px; font-size:12px; }
.portal-score-row > span { width:96px; flex:0 0 96px; }
.portal-score-row em { display:block; color:#a5b1c2; font-size:10px; font-style:normal; }
.portal-bar { flex:1; height:8px; background:#edf2f9; border-radius:4px; overflow:hidden; }
.portal-bar i { display:block; height:100%; background:linear-gradient(90deg,#3b82f6,#1f6feb); border-radius:4px; }
.portal-score-row > b { width:40px; text-align:right; color:var(--p-primary); }
.portal-notify-list { list-style:none; margin:0; padding:0; }
.portal-notify-list li { display:flex; gap:12px; padding:14px 18px; border-bottom:1px solid #edf1f6; }
.portal-notify-list li:last-child { border-bottom:0; }
.portal-notify-list li.is-unread { background:#f8fbff; }
.portal-notify-type { height:22px; padding:0 8px; border-radius:11px; background:#eef4ff; color:var(--p-primary); font-size:11px; display:inline-flex; align-items:center; flex:0 0 auto; }
.portal-notify-list b { font-size:12px; } .portal-notify-list p { margin:2px 0; color:var(--p-muted); font-size:11px; } .portal-notify-list time { color:#a5b1c2; font-size:10px; }
.portal-notify-list em { font-style:normal; color:var(--p-danger); font-size:10px; margin-left:auto; }
.portal-field { display:flex; flex-direction:column; gap:5px; font-size:12px; margin-bottom:12px; }
.portal-field > span { color:#5a6b82; font-size:11px; }
.portal-field input, .portal-field select { height:38px; border:1px solid #dbe3ee; border-radius:7px; padding:0 10px; background:#fff; color:var(--p-text); width:100%; outline:none; }
.portal-field input:focus, .portal-field select:focus { border-color:#8bb8f8; box-shadow:0 0 0 3px rgba(31,111,235,.1); }
.portal-field input[readonly] { background:#f7f9fc; color:#6b7c93; }
.portal-field em { font-style:normal; color:#a5b1c2; font-size:10px; }
.portal-grid-2 { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:0 16px; padding:14px 18px 2px; }
.portal-card > h3 { margin:0; padding:14px 18px 0; font-size:14px; }
.portal-card > .portal-hint { margin:6px 18px 0; color:var(--p-muted); font-size:11px; }
.portal-form-actions { display:flex; gap:10px; margin:4px 0 18px; }
.portal-password-card { padding:20px; max-width:560px; }
.portal-upload { padding:4px 18px 16px; }
.portal-upload-drop { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:4px; min-height:110px; border:1px dashed #b9c8dc; border-radius:9px; color:var(--p-muted); cursor:pointer; text-align:center; padding:14px; background:#fafcff; }
.portal-upload-drop:hover, .portal-upload-drop.is-dragover { border-color:var(--p-primary); background:#f4f9ff; }
.portal-upload-drop input { display:none; }
.portal-upload-drop b { color:#44546a; font-size:12px; } .portal-upload-drop span { font-size:11px; }
.portal-upload-list { display:flex; flex-wrap:wrap; gap:10px; margin-top:10px; }
.portal-upload-item { position:relative; width:130px; border:1px solid var(--p-border); border-radius:7px; overflow:hidden; background:#fff; }
.portal-upload-item img { width:130px; height:86px; object-fit:cover; display:block; }
.portal-upload-pdf { height:86px; display:flex; align-items:center; justify-content:center; background:#fff7e6; color:#d98b00; font-size:14px; }
.portal-upload-item b { display:block; padding:4px 6px; font-size:10px; font-weight:400; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.portal-upload-item button { position:absolute; right:3px; top:3px; width:20px; height:20px; border:0; border-radius:50%; background:rgba(0,0,0,.55); color:#fff; cursor:pointer; }
.portal-upload-progress { display:flex; align-items:center; gap:8px; margin-top:8px; font-size:11px; color:var(--p-muted); }
.portal-upload-progress i { flex:1; height:6px; background:#e8eef7; border-radius:3px; overflow:hidden; }
.portal-upload-progress i::after { content:''; display:block; width:100%; height:100%; background:var(--p-primary); transform:scaleX(0); transform-origin:left; }
.portal-upload-error { margin-top:8px; padding:7px 10px; border-radius:6px; background:#fdecef; color:#d03050; font-size:11px; }
.portal-flash { max-width:1600px; margin:14px auto 0; padding:9px 14px; border-radius:7px; font-size:12px; display:flex; justify-content:space-between; gap:12px; }
.portal-flash.is-success { background:#e8f8ef; color:#167a45; border:1px solid #ccecd9; }
.portal-flash.is-danger { background:#fdecef; color:#b32442; border:1px solid #f7d2da; }
.portal-flash.is-warning { background:#fff7e6; color:#a66a00; border:1px solid #f7e3b8; }
.portal-flash button { border:0; background:transparent; color:inherit; cursor:pointer; font-size:14px; }
.portal-footer { text-align:center; color:#9aa7b8; font-size:11px; padding:18px 20px 26px; }
.portal-footer span { margin:0 6px; }
.portal-error-page { max-width:600px; margin:80px auto; text-align:center; background:#fff; border:1px solid var(--p-border); border-radius:14px; padding:42px 28px; }
.portal-error-code { font-size:54px; font-weight:700; color:#c9d7ea; line-height:1; }
.portal-error-page h1 { margin:12px 0 6px; font-size:20px; } .portal-error-page p { color:var(--p-muted); font-size:12px; }
.portal-error-page .portal-form-actions { justify-content:center; }
.portal-lightbox { position:fixed; inset:0; z-index:100; display:flex; align-items:center; justify-content:center; }
.portal-lightbox[hidden] { display:none; }
.portal-lightbox-backdrop { position:absolute; inset:0; background:rgba(8,20,40,.72); }
.portal-lightbox-dialog { position:relative; z-index:1; background:#fff; border-radius:10px; padding:10px; max-width:88vw; max-height:90vh; }
.portal-lightbox-dialog img { display:block; max-width:82vw; max-height:76vh; object-fit:contain; }
.portal-lightbox-dialog p { margin:8px 4px 2px; text-align:center; color:var(--p-muted); font-size:11px; }
.portal-lightbox-close { position:absolute; right:-12px; top:-12px; width:30px; height:30px; border:0; border-radius:50%; background:#fff; color:#333; font-size:18px; cursor:pointer; box-shadow:0 2px 8px rgba(0,0,0,.25); }
/* 登录/注册 */
.portal-auth-body { background:linear-gradient(120deg,#0c2f5e 0%,#15478c 55%,#1f6feb 100%); min-height:100vh; }
.portal-auth-wrap { display:grid; grid-template-columns:minmax(0,1.1fr) minmax(400px,.9fr); min-height:100vh; max-width:1500px; margin:0 auto; }
.portal-auth-brand { color:#fff; padding:9vh 7vw 8vh; display:flex; flex-direction:column; justify-content:center; }
.portal-auth-logo { display:flex; align-items:center; gap:10px; color:#fff; margin-bottom:44px; }
.portal-auth-logo img { width:38px; height:38px; }
.portal-auth-logo span { font-size:16px; font-weight:600; } .portal-auth-logo em { display:block; font-style:normal; font-size:10px; color:#a8c8f5; font-weight:400; }
.portal-auth-brand h1 { margin:0 0 14px; font-size:38px; line-height:1.35; letter-spacing:.5px; }
.portal-auth-brand > p { color:#bcd4f5; font-size:14px; max-width:480px; }
.portal-auth-brand ul { list-style:none; margin:34px 0 0; padding:0; color:#dbe8fb; font-size:12px; line-height:2.2; }
.portal-auth-brand li::before { content:'✓'; color:#68d391; margin-right:8px; }
.portal-auth-card-wrap { display:flex; flex-direction:column; justify-content:center; align-items:center; padding:40px 24px; }
.portal-auth-card { width:100%; max-width:430px; background:#fff; border-radius:16px; padding:32px; box-shadow:0 18px 60px rgba(4,25,60,.22); }
.portal-auth-card h2 { margin:0 0 4px; font-size:24px; } .portal-auth-sub { color:var(--p-muted); font-size:12px; margin:0 0 20px; }
.portal-auth-links { margin-top:16px; text-align:center; font-size:12px; }
.portal-auth-foot { margin-top:18px; color:#c5d8f2; font-size:11px; }
.portal-register-body { background:#f4f7fb; }
.portal-register-wrap { max-width:1100px; margin:0 auto; padding:26px 20px 48px; }
.portal-register-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:18px; }
.portal-register-head .portal-auth-logo { color:#1f2d3d; margin:0; } .portal-register-head .portal-auth-logo em { color:var(--p-muted); }
.portal-register-head > a { font-size:12px; }
.portal-register-card .portal-card { border-radius:12px; }
.portal-register-card .portal-section-head { display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:14px; }
.portal-section-head h2 { margin:0 0 4px; font-size:24px; } .portal-section-head p { margin:0; color:var(--p-muted); font-size:12px; }
.portal-register-card .portal-card { margin-bottom:14px; padding-bottom:8px; }
.portal-register-card .portal-card h3 { padding:16px 18px 4px; }
@media (max-width:1280px) {
  .portal-header { gap:14px; padding:0 18px; }
  .portal-nav a { padding:8px 9px; font-size:12px; }
  .portal-user-name { max-width:130px; }
  .portal-kpi-grid { grid-template-columns:repeat(3,minmax(0,1fr)); }
  .portal-page { padding:20px 18px 32px; }
}
@media (max-width:1024px) {
  .portal-nav { display:none; position:absolute; top:64px; left:0; right:0; background:#0f2f5f; flex-direction:column; padding:8px; gap:2px; box-shadow:0 10px 24px rgba(0,0,0,.18); }
  .portal-nav.is-open { display:flex; }
  .portal-nav a { padding:10px 12px; }
  .portal-nav-toggle { display:block; margin-left:auto; }
  .portal-user-name { display:none; }
  .portal-dashboard-grid, .portal-detail-grid { grid-template-columns:1fr; }
  .portal-kpi-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .portal-auth-wrap { grid-template-columns:1fr; }
  .portal-auth-brand { padding:42px 24px 0; min-height:auto; }
  .portal-auth-brand h1 { font-size:28px; }
  .portal-auth-card-wrap { padding:24px; }
  .portal-detail-grid .portal-side { order:2; }
}
@media (max-width:640px) {
  .portal-page { padding:16px 12px 28px; }
  .portal-page-head { flex-direction:column; align-items:flex-start; gap:10px; }
  .portal-page-head h1 { font-size:19px; }
  .portal-kpi-grid { grid-template-columns:1fr 1fr; gap:10px; }
  .portal-kpi { min-height:92px; padding:12px; }
  .portal-kpi b { font-size:22px; }
  .portal-acceptance-kpis, .portal-statement-kpis { grid-template-columns:1fr 1fr; gap:8px; }
  .portal-photo-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .portal-grid-2 { grid-template-columns:1fr; }
  .portal-table th, .portal-table td { padding:8px 10px; }
  .portal-header { padding:0 12px; }
  .portal-brand { min-width:0; }
  .portal-brand b { font-size:12px; }
  .portal-auth-brand { display:none; }
  .portal-auth-card { padding:24px 18px; }
  .portal-register-wrap { padding:16px 12px 32px; }
}

/* mobile hardening */
.portal-auth-card-wrap { min-width:0; }
.portal-auth-card { max-width:100%; }
.portal-kpi-grid { min-width:0; }
.portal-kpi { min-width:0; }
.portal-kpi b, .portal-kpi em { overflow-wrap:anywhere; }
@media (max-width:640px) {
  .portal-auth-card-wrap { padding:20px 14px; }
  .portal-auth-card { width:100%; max-width:none; }
  .portal-kpi b { font-size:20px; }
  .portal-kpi em { font-size:10px; }
  .portal-page-head h1 { font-size:18px; }
}

@media (min-width:1101px) and (max-width:1280px) {
  .portal-kpi-grid { grid-template-columns:repeat(5,minmax(0,1fr)); }
}
@media (min-width:641px) and (max-width:1100px) {
  .portal-kpi-grid { grid-template-columns:repeat(3,minmax(0,1fr)); }
}

/* WAVE6 门户自助 */
.portal-pad { padding:14px 18px 16px; }
.portal-mini-title { margin:0 0 10px; font-size:12px; color:var(--p-text); }
.portal-input { width:100%; border:1px solid #dbe3ee; border-radius:7px; padding:8px 10px; min-height:36px; background:#fff; color:var(--p-text); outline:none; }
.portal-input:focus { border-color:#8bb8f8; box-shadow:0 0 0 3px rgba(31,111,235,.1); }
.portal-checkbox { display:flex; align-items:center; gap:7px; font-size:12px; color:var(--p-text-2); padding-top:24px; }
.portal-field-full { grid-column:1 / -1; }
.portal-category-grid { display:flex; flex-wrap:wrap; gap:8px 16px; padding-top:4px; }
.portal-category-grid .portal-checkbox { padding-top:0; }
.portal-todo-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; padding:10px 18px 16px; }
.portal-todo-item { display:flex; align-items:center; gap:10px; padding:10px 12px; border:1px solid var(--p-border); border-radius:7px; color:var(--p-text); background:#fbfcfe; }
.portal-todo-item:hover { border-color:#b9d4ff; background:#f6faff; color:var(--p-text); }
.portal-todo-icon { width:28px; height:28px; border-radius:7px; background:#eef4ff; color:var(--p-primary); display:flex; align-items:center; justify-content:center; font-size:11px; flex:0 0 28px; }
.portal-todo-icon.is-warning { background:#fff7e6; color:#d98b00; } .portal-todo-icon.is-danger { background:#fdecef; color:#d03050; }
.portal-todo-item > div { flex:1; min-width:0; } .portal-todo-item b { display:block; font-size:12px; } .portal-todo-item em { display:block; font-style:normal; color:var(--p-muted); font-size:10px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.portal-status { display:inline-flex; align-items:center; height:22px; padding:0 8px; border-radius:11px; font-size:11px; }
.portal-status.is-success { background:#e8f8ef; color:#18a058; } .portal-status.is-warning { background:#fff7e6; color:#d98b00; } .portal-status.is-danger { background:#fdecef; color:#d03050; } .portal-status.is-info { background:#eef4ff; color:#1f6feb; }
@media (max-width:900px) { .portal-todo-grid { grid-template-columns:1fr; } }
