:root{
  font-family:Inter,Arial,"Microsoft YaHei",sans-serif;
  font-size:14px;
  line-height:1.45;
  color:#172033;
  background:#f3f6fb;
  --blue:#2563eb;
  --blue-dark:#1d4ed8;
  --bg:#f3f6fb;
  --panel:#fff;
  --line:#e5e7eb;
  --muted:#7b8494;
  --text:#172033;
  --sidebar:#0f172a;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);font-size:1rem;color:var(--text)}
input,select,textarea,button{font:inherit}
.layout{display:flex;min-height:100vh}
.sidebar{width:258px;background:linear-gradient(180deg,#0f172a,#111827);color:#fff;padding:20px 16px;position:sticky;top:0;height:100vh;overflow:auto;flex:0 0 258px}
.brand{display:flex;gap:12px;align-items:center;margin-bottom:14px}
.brand-mark{width:42px;height:42px;border-radius:14px;background:var(--blue);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:22px;box-shadow:0 10px 22px rgba(37,99,235,.38)}
.brand h2{margin:0;font-size:20px;line-height:1.15}.brand p{margin:2px 0 0;color:#9ca3af;font-size:12px}
.user-pill{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.12);border-radius:12px;padding:10px 12px;margin:12px 0 16px;color:#e5e7eb}
.nav-title{color:#7dd3fc;font-size:12px;font-weight:700;margin:18px 8px 6px;letter-spacing:.08em}.sidebar a{display:block;color:#e5e7eb;text-decoration:none;padding:10px 11px;border-radius:10px;margin:4px 0}.sidebar a:hover{background:#263244}
.content{flex:1;padding:28px 32px;min-width:0}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:16px}.page-head h1,h1{margin:0 0 6px;font-size:26px;line-height:1.2}h2{font-size:18px;margin:0 0 14px}.muted{color:var(--muted)}.small,small{font-size:12px;color:#8b95a7;display:block}.strong{font-weight:800}.num{text-align:right;font-variant-numeric:tabular-nums}
.cards{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr));gap:14px;margin:16px 0}.card,.panel,.login-card,.hint{background:var(--panel);border:1px solid var(--line);border-radius:16px;box-shadow:0 10px 26px rgba(15,23,42,.06);padding:18px}.card{position:relative;overflow:hidden}.card:after{content:"";position:absolute;right:-25px;top:-25px;width:84px;height:84px;border-radius:999px;background:#dbeafe}.card span{display:block;font-size:28px;font-weight:800;margin-top:8px;position:relative}.two-col{display:grid;grid-template-columns:1.05fr .95fr;gap:16px}
table{width:100%;border-collapse:separate;border-spacing:0;background:#fff;border-radius:14px;overflow:hidden;margin:10px 0 22px;border:1px solid var(--line)}th,td{border-bottom:1px solid #edf0f5;text-align:left;padding:10px 12px;vertical-align:top}tr:last-child td{border-bottom:0}th{background:#f8fafc;color:#334155;font-size:13px;font-weight:800;white-space:nowrap}
.badge{background:#eef2ff;color:#3730a3;border-radius:999px;padding:4px 9px;font-size:12px;white-space:nowrap;font-weight:700}.badge.in{background:#dcfce7;color:#166534}.badge.out{background:#fee2e2;color:#991b1b}.tag{display:inline-block;border-radius:999px;padding:4px 9px;background:#e5e7eb;color:#374151;font-size:12px;font-weight:700;white-space:nowrap}.tag-ok{background:#dcfce7;color:#166534}.tag-warn{background:#fef3c7;color:#92400e}.tag-danger{background:#fee2e2;color:#991b1b}.muted-row{opacity:.62;background:#f9fafb}.muted-row td{color:#6b7280}
.btn,button{background:var(--blue);color:#fff;border:0;border-radius:10px;padding:9px 14px;text-decoration:none;display:inline-block;cursor:pointer;font-weight:700;white-space:nowrap}button:hover,.btn:hover{background:var(--blue-dark)}.ghost{background:#e5e7eb;color:#111827}.danger{background:#dc2626}.danger:hover{background:#b91c1c}.danger-zone{border-left:4px solid #dc2626}.mini-btn{padding:7px 10px;border-radius:9px;font-size:13px}
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(240px,1fr));gap:14px}.field.full,.wide,.actions{grid-column:1/-1}.field label,.field-edit-row label,.node-card label{display:block;font-weight:700;margin:0 0 6px;color:#334155}.field input,.field select,.field textarea,.inline-form input,.inline-form select,.field-edit-row input,.field-edit-row select,.field-edit-row textarea,.node-card input,.node-card select,.node-card textarea{width:100%;border:1px solid #d1d5db;border-radius:10px;padding:9px 10px;background:#fff;color:#172033}.field textarea{min-height:96px}.actions{display:flex;gap:8px}.toolbar{display:flex;gap:10px;align-items:center;margin:10px 0 18px;flex-wrap:wrap}.toolbar a:not(.btn){background:#fff;border:1px solid var(--line);border-radius:10px;padding:8px 12px;text-decoration:none;color:#334155}.inline-form{display:grid;grid-template-columns:1.2fr 2fr auto;gap:10px;align-items:center;background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px;margin:8px 0}.alert{background:#fee2e2;color:#991b1b;border:1px solid #fecaca;padding:10px;border-radius:10px;margin:8px 0}.req{color:#dc2626;margin-left:4px}.login-card{max-width:420px;margin:8vh auto}.login-card form{display:grid;gap:10px}.hint{margin-top:14px;color:#475569}
/* 配置页 */
.config-page .panel{padding:16px}.config-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.config-grid{display:grid;grid-template-columns:repeat(2,minmax(360px,1fr));gap:14px}.node-card,.field-config-card{background:#fbfdff;border:1px solid #e6edf7;border-radius:16px;padding:14px;box-shadow:0 6px 16px rgba(15,23,42,.035)}.node-card-header,.field-config-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}.node-title{display:flex;align-items:center;gap:8px;font-weight:800}.node-index{width:28px;height:28px;border-radius:10px;background:#e0ecff;color:#1d4ed8;display:flex;align-items:center;justify-content:center;font-weight:800}.config-form-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:10px}.config-form-grid .full{grid-column:1/-1}.field-config-body{display:grid;grid-template-columns:1.1fr .85fr .55fr .5fr .65fr auto;gap:10px;align-items:end}.field-config-options{grid-column:1/-2}.field-config-options textarea{min-height:64px}.condition-table td,.condition-table th{padding:9px 10px}.code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;background:#f1f5f9;border-radius:8px;padding:2px 6px;color:#475569;font-size:12px}.empty-note{padding:16px;border:1px dashed #cbd5e1;border-radius:14px;color:#64748b;background:#f8fafc}
@media(max-width:1200px){.config-grid{grid-template-columns:1fr}.field-config-body{grid-template-columns:1fr 1fr}.field-config-options{grid-column:1/-1}}
@media(max-width:1000px){.layout{display:block}.sidebar{width:auto;height:auto;position:static}.cards,.form-grid,.two-col{grid-template-columns:1fr}.inline-form,.field-edit-row,.config-form-grid,.field-config-body{grid-template-columns:1fr}.content{padding:20px}}
/* 流程图 */
.flow-section{margin:18px 0 22px;overflow:hidden}.flow-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:12px}.flow-legend{display:flex;gap:10px;flex-wrap:wrap;align-items:center;color:#64748b;font-size:13px}.legend-dot{width:10px;height:10px;border-radius:999px;display:inline-block;margin-right:5px}.legend-dot.done{background:#22c55e}.legend-dot.current{background:#2563eb}.legend-dot.pending{background:#cbd5e1}.legend-line{width:24px;height:0;border-top:2px dashed #f59e0b;display:inline-block;margin-right:5px;vertical-align:middle}.flowchart-canvas{position:relative;min-height:360px;overflow:auto;background:linear-gradient(180deg,#f8fbff,#ffffff);border:1px solid #e6edf7;border-radius:16px;padding:28px 24px}.flow-svg{position:absolute;inset:0;z-index:1;pointer-events:none;overflow:visible}.flow-node-grid{position:relative;z-index:2;display:grid;grid-template-columns:repeat(4,minmax(190px,1fr));gap:72px 74px;min-width:920px}.flow-node{background:#fff;border:2px solid #dbe5f3;border-radius:16px;padding:12px 14px;min-height:116px;box-shadow:0 10px 22px rgba(15,23,42,.08);transition:.16s ease}.flow-node-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.flow-order{width:28px;height:28px;border-radius:9px;background:#eff6ff;color:#1d4ed8;display:flex;align-items:center;justify-content:center;font-weight:800}.flow-node-name{font-size:16px;font-weight:900;color:#172033;line-height:1.25}.flow-node-assignee{margin-top:8px;color:#64748b;font-size:12px;line-height:1.35}.flow-done{border-color:#86efac;background:#f0fdf4}.flow-current{border-color:#2563eb;background:#eff6ff;box-shadow:0 14px 28px rgba(37,99,235,.18)}.flow-pending{opacity:.86}.flow-voided{border-color:#fca5a5;background:#fff1f2}.flow-line{fill:none;stroke:#94a3b8;stroke-width:2.2px}.flow-line-condition{stroke:#f59e0b;stroke-dasharray:6 5}.flow-line-label{font-size:11px;fill:#475569;font-weight:800}.flow-line-label-bg{fill:#ffffff;stroke:#e2e8f0;stroke-width:1}.type-decision .flow-order{background:#fef3c7;color:#92400e}.type-payment .flow-order{background:#dcfce7;color:#166534}.type-receipt .flow-order{background:#dbeafe;color:#1d4ed8}.type-end .flow-order{background:#e5e7eb;color:#374151}
@media(max-width:1200px){.flow-node-grid{grid-template-columns:repeat(3,minmax(190px,1fr));min-width:760px}}

/* v7 pagination and flow spacing */
.filter-panel{margin:12px 0 16px}.filter-form{display:grid;grid-template-columns:minmax(260px,420px) auto;gap:12px;align-items:end}.filter-btn-field{align-self:end}
.pagination-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 14px;margin:12px 0 22px;box-shadow:0 8px 20px rgba(15,23,42,.04)}
.pagination-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.page-size{border:1px solid var(--line);background:#fff;color:#334155;text-decoration:none;border-radius:10px;padding:7px 10px;font-weight:700}.page-size.active{background:#2563eb;color:#fff;border-color:#2563eb}.pagination-info{color:#64748b;font-weight:700}
.flow-section{margin:26px 0 28px}.request-detail-bottom-flow{margin-top:30px}.flowchart-canvas{min-height:500px;padding:42px 56px}.flow-node-grid{display:flex;gap:110px;align-items:flex-start;min-width:max-content;padding:26px 44px}.flow-node{width:230px;min-width:230px;min-height:132px}.flow-node-name{font-size:17px}.flow-line-label{font-size:10px}.flow-head{margin-bottom:20px}
@media(max-width:1000px){.filter-form{grid-template-columns:1fr}.pagination-bar{display:block}.pagination-actions{margin-top:10px}.flowchart-canvas{padding:30px 32px}.flow-node-grid{gap:70px}.flow-node{width:215px;min-width:215px}}

/* v8: clearer flow map + wider transaction columns + cleaner field config */
.transaction-table th.amount-col,.transaction-table td.amount-col{min-width:150px;padding-right:28px}
.transaction-table th.date-col,.transaction-table td.date-col{min-width:150px;padding-left:28px}
.flowchart-open{min-height:620px;background:#f5f0d8;border-color:#d8d0aa;padding:54px 70px}
.flow-node-grid-map{display:grid!important;grid-template-columns:repeat(7,250px);grid-template-rows:repeat(2,160px);gap:92px 105px;align-items:center;min-width:2350px;padding:42px 54px}
.flow-node-grid-map .flow-node{width:250px;min-width:250px;min-height:126px;border-radius:4px;border:2px solid #6b7280;background:#f8f4de;box-shadow:none;color:#172033}
.flow-node-grid-map .flow-current{background:#eff6ff;border-color:#2563eb;box-shadow:0 0 0 4px rgba(37,99,235,.14)}
.flow-node-grid-map .flow-done{background:#ecfdf5;border-color:#16a34a}
.flow-node-grid-map .type-decision{border-radius:0;transform:rotate(45deg);width:150px;min-width:150px;min-height:150px;margin:auto;background:#fef3c7}
.flow-node-grid-map .type-decision .flow-node-top,.flow-node-grid-map .type-decision .flow-node-name,.flow-node-grid-map .type-decision .flow-node-assignee{transform:rotate(-45deg)}
.flowchart-open .flow-line{stroke:#111827;stroke-width:2px;fill:none}
.flowchart-open .flow-line-condition{stroke:#f59e0b;stroke-dasharray:9 6;stroke-width:2.4px}
.flowchart-open .flow-line-label{font-size:12px;fill:#92400e;font-weight:900}.flowchart-open .flow-line-label-bg{fill:#f5f0d8;stroke:#d6c77a}
.next-handler-box{background:#f8fafc;border:1px dashed #cbd5e1;border-radius:14px;padding:14px}
.field-config-table{width:100%;table-layout:fixed}.field-config-table th:nth-child(1){width:150px}.field-config-table th:nth-child(2){width:180px}.field-config-table th:nth-child(3){width:130px}.field-config-table th:nth-child(4){width:90px}.field-config-table th:nth-child(5){width:90px}.field-config-table th:nth-child(6){width:90px}.field-config-table th:nth-child(7){width:260px}.field-config-table th:nth-child(8){width:90px}.field-config-table input,.field-config-table select,.field-config-table textarea{width:100%;border:1px solid #d1d5db;border-radius:9px;padding:8px 9px;background:#fff}.field-config-table textarea{min-height:60px}.field-node-title{display:flex;align-items:center;gap:10px;margin:18px 0 8px}.field-node-title .node-index{flex:0 0 auto}
@media(max-width:1200px){.flow-node-grid-map{grid-template-columns:repeat(7,230px);gap:80px 92px;min-width:2150px}.flow-node-grid-map .flow-node{width:230px;min-width:230px}.flowchart-open{padding:44px 48px}}
.field-config-list{border:1px solid #e5e7eb;border-radius:16px;overflow:hidden;background:#fff;margin-bottom:18px}.field-config-row{display:grid;grid-template-columns:150px minmax(170px,1.1fr) 130px 86px 86px 94px minmax(240px,1.4fr) 82px;gap:0;border-bottom:1px solid #edf0f5;align-items:center}.field-config-row:last-child{border-bottom:0}.field-config-row>div{padding:10px;border-right:1px solid #edf0f5}.field-config-row>div:last-child{border-right:0}.field-config-row-head{background:#f8fafc;color:#334155;font-weight:900;font-size:13px}.field-config-list input,.field-config-list select,.field-config-list textarea{width:100%;border:1px solid #d1d5db;border-radius:9px;padding:8px 9px;background:#fff}.field-config-list textarea{min-height:54px;resize:vertical}.field-config-panel h3{margin:0;font-size:17px}@media(max-width:1200px){.field-config-row{grid-template-columns:1fr}.field-config-row-head{display:none}.field-config-row>div{border-right:0}.field-config-row>div:before{display:block;font-size:12px;color:#64748b;font-weight:800;margin-bottom:4px}.field-config-row>div:nth-child(1):before{content:'字段编码'}.field-config-row>div:nth-child(2):before{content:'字段名称'}.field-config-row>div:nth-child(3):before{content:'字段类型'}.field-config-row>div:nth-child(4):before{content:'必填'}.field-config-row>div:nth-child(5):before{content:'排序'}.field-config-row>div:nth-child(6):before{content:'启用'}.field-config-row>div:nth-child(7):before{content:'下拉选项'}.field-config-row>div:nth-child(8):before{content:'操作'}}
.danger-inline{ margin-top:8px; }
.mini-btn.danger{ background:#dc2626; }

.link-btn{display:inline-flex;align-items:center;justify-content:center;padding:6px 10px;border-radius:10px;background:#eef4ff;color:#2563eb;font-weight:700;text-decoration:none;border:1px solid #dbe7ff}
.row-actions{display:flex;gap:8px;align-items:center;white-space:nowrap}
.row-actions form{margin:0}
.mini-btn.danger{background:#ef4444;color:#fff;border-color:#ef4444}
.multi-select{min-height:112px}
.preview-panel{min-height:780px;overflow:hidden}
.file-preview-frame,.onlyoffice-frame{width:100%;height:760px;border:1px solid #d7dde8;border-radius:14px;background:#fff}
.image-preview-wrap{display:flex;justify-content:center;align-items:flex-start;min-height:720px;background:#f8fafc;border-radius:14px;border:1px solid #d7dde8;padding:18px;overflow:auto}
.image-preview-wrap img{max-width:100%;height:auto;border-radius:10px;box-shadow:0 8px 22px rgba(15,23,42,.12)}
.preview-error{padding:24px;border-radius:14px;background:#fff7ed;border:1px solid #fed7aa;color:#9a3412;font-weight:700}

.lang-switch{margin:10px 0 16px;padding:8px 10px;border:1px solid rgba(255,255,255,.12);border-radius:12px;color:#a8b3c7;font-size:13px;background:rgba(255,255,255,.04)}
.lang-switch a{color:#cbd5e1;text-decoration:none;font-weight:700}
.lang-switch a.active{color:#ffffff}
.lang-switch span{margin:0 6px;color:#64748b}

/* v14: top persistent user/language bar + simplified role menus */
.content{padding-top:16px}
.topbar{position:sticky;top:0;z-index:50;display:flex;justify-content:space-between;align-items:center;gap:16px;margin:-16px -32px 22px;padding:12px 32px;background:rgba(248,250,252,.96);backdrop-filter:blur(10px);border-bottom:1px solid #e5e7eb;box-shadow:0 8px 20px rgba(15,23,42,.04)}
.topbar-user{display:flex;align-items:center;gap:10px;min-width:0}.topbar-avatar{width:38px;height:38px;border-radius:13px;background:#2563eb;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:900;box-shadow:0 8px 18px rgba(37,99,235,.25)}.topbar-name{font-weight:900;color:#172033;line-height:1.2}.topbar-role{font-size:12px;color:#64748b;margin-top:2px}.topbar-lang{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid #dbe3ef;border-radius:999px;padding:4px;box-shadow:0 8px 18px rgba(15,23,42,.05)}.topbar-lang a{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;color:#475569;border-radius:999px;padding:7px 12px;font-weight:800}.topbar-lang a.active{background:#2563eb;color:#fff}.sidebar .brand{margin-bottom:22px}
@media(max-width:1000px){.topbar{margin:-20px -20px 18px;padding:10px 20px}.topbar{position:static}.topbar-lang a{padding:6px 10px}}

/* v15: editable employee identity and account type */
.config-mini-details{border:1px solid #e5e7eb;border-radius:12px;background:#fbfdff;margin:8px 0;padding:8px 10px}
.config-mini-details summary{cursor:pointer;font-weight:900;color:#1e40af;list-style:none}
.config-mini-details summary::-webkit-details-marker{display:none}
.config-mini-details summary:before{content:'▸';display:inline-block;margin-right:6px;color:#64748b;transition:.12s ease}
.config-mini-details[open] summary:before{transform:rotate(90deg)}
.compact-form{grid-template-columns:repeat(2,minmax(180px,1fr));gap:10px;margin-top:10px}
.compact-form .field label{font-size:12px;margin-bottom:4px;color:#64748b}
.compact-form .field input,.compact-form .field select{padding:7px 8px;border-radius:9px}
@media(max-width:1200px){.compact-form{grid-template-columns:1fr}}

/* v20: fixed workflow candidate checklist alignment.
   Use more specific selectors than .node-card label/input so checkbox stays before the user name. */
.node-card .candidate-checklist{max-height:190px;overflow:auto;border:1px solid #d7e0ea;border-radius:12px;background:#fff;padding:8px;display:grid;gap:6px}
.node-card label.candidate-check{display:flex;align-items:center;justify-content:flex-start;gap:10px;padding:8px 10px;border-radius:10px;cursor:pointer;color:#172033;font-weight:700;margin:0;line-height:1.35}
.node-card label.candidate-check:hover{background:#f1f5ff}
.node-card label.candidate-check input[type=checkbox]{width:16px;height:16px;min-width:16px;max-width:16px;flex:0 0 16px;margin:0;accent-color:#2563eb}
.node-card label.candidate-check span{display:block;min-width:0}


/* v21: force candidate checkbox to stay aligned before username even when older generic input styles are cached. */
.node-card .candidate-checklist{max-height:190px;overflow:auto;border:1px solid #d7e0ea;border-radius:12px;background:#fff;padding:8px;display:grid;gap:6px}
.node-card label.candidate-check{display:grid!important;grid-template-columns:22px minmax(0,1fr)!important;align-items:center!important;justify-content:start!important;column-gap:10px!important;width:100%!important;padding:8px 10px;border-radius:10px;cursor:pointer;color:#172033;font-weight:700;margin:0!important;line-height:1.35}
.node-card label.candidate-check:hover{background:#f1f5ff}
.node-card label.candidate-check input.candidate-checkbox,.node-card label.candidate-check input[type=checkbox]{width:16px!important;height:16px!important;min-width:16px!important;max-width:16px!important;flex:0 0 16px!important;margin:0!important;justify-self:start!important;accent-color:#2563eb}
.node-card label.candidate-check span.candidate-label{display:block!important;min-width:0!important;text-align:left!important;overflow-wrap:anywhere}
