:root{--ground:#f4f3f1;--surface:#fff;--ink:#202323;--muted:#606363;--line:#e8e8e5;--active:#e7e7e3;--blue:#1d5fbf;--red:#a52d35;--green:#226344;font-family:"Microsoft YaHei UI","Microsoft YaHei",system-ui,sans-serif;color:var(--ink);background:var(--ground);font-synthesis:none}
*{box-sizing:border-box}body{margin:0;font-size:14px;line-height:1.6}button,input,select,textarea{font:inherit}button{cursor:pointer;border:1px solid #d0d1ce;border-radius:6px;padding:7px 13px;background:#fff;color:var(--ink);min-height:36px}button:hover{background:var(--active)}button:active{transform:translateY(1px)}button:disabled{cursor:wait;opacity:.6}.primary{background:#222626;color:white;border-color:#222626}.primary:hover{background:#414646}.quiet{border-color:transparent;background:transparent;padding:5px 8px}.danger{color:var(--red)}:focus-visible{outline:2px solid var(--blue);outline-offset:3px}input,select,textarea{width:100%;background:#fff;color:var(--ink);border:1px solid #bcbfbc;border-radius:6px;padding:9px 10px;min-height:40px}textarea{resize:vertical;min-height:96px}input[type=checkbox]{width:18px;min-height:18px;accent-color:#202323}input[type=date]{min-width:0}label{display:flex;flex-direction:column;gap:6px}form{display:grid;gap:16px}fieldset{border:1px solid var(--line);border-radius:6px;padding:12px;margin:0}.checks{display:flex;flex-wrap:wrap;gap:12px}.checks label{flex-direction:row;align-items:center}h1,h2,h3,p{margin:0}h1{font-size:24px;font-weight:600;line-height:1.4}h2{font-size:16px;font-weight:600}h3{font-size:14px;font-weight:600}.muted{color:var(--muted)}.small{font-size:12px}.error{color:var(--red)}.num{font-variant-numeric:tabular-nums}a{color:var(--blue)}[hidden]{display:none!important}.shell{display:grid;grid-template-columns:230px minmax(0,1fr);min-height:100dvh}aside{padding:32px 20px;display:flex;flex-direction:column;gap:16px}.identity{display:flex;align-items:center;gap:10px;font-size:18px;font-weight:600}.identity svg{width:28px;height:28px;fill:none;stroke:var(--ink);stroke-width:2.5}nav{display:grid;gap:4px;margin-top:16px}nav button{text-align:left;border:0;background:none;padding:8px 12px}nav button[aria-current=page]{background:var(--active)}.account{margin-top:auto;display:grid;gap:4px;padding-top:32px}.account button{justify-self:start}main{padding:32px;min-width:0}.title-row,.panel-head,.dialog-head,.between{display:flex;justify-content:space-between;align-items:center;gap:16px}.title-row{margin-bottom:24px}.title-row p{margin-top:6px}.mobile-head{display:none}#content{display:grid;gap:16px}#notice{background:#fff;padding:12px 16px;margin-bottom:16px;border-left:3px solid var(--blue)}#notice.error{border-color:var(--red)}.panel{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:20px;min-width:0}.panel-head{margin-bottom:16px}.panel-head p{margin-top:4px}.metrics{display:grid;grid-template-columns:repeat(3,1fr);background:#fff;border:1px solid var(--line);border-radius:8px}.metric{padding:20px}.metric+.metric{border-left:1px solid var(--line)}.metric p{color:var(--muted)}.metric strong{font-size:26px;font-weight:400;display:block;margin-top:6px}.metric:first-child strong{font-size:34px}.metric small{font-size:14px;color:var(--muted)}
/* Canvas = W - 230px sidebar - 64px gutters. Two equal columns + one 16px gap fill it exactly. */
.two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start}.stack{display:grid;gap:16px}.rows{display:grid}.row{padding:13px 0;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:start;gap:16px}.row:first-child{padding-top:0}.row:last-child{border-bottom:0;padding-bottom:0}.row p{margin-top:3px}.row .body{min-width:0;overflow-wrap:anywhere}.row .right{flex-shrink:0;text-align:right;display:grid;gap:6px;justify-items:end}.status{font-size:12px;padding:2px 7px;background:#f0f0ed;border-radius:4px;display:inline-block}.status.pending_approval{color:#754c12;background:#f8f0df}.status.approved{color:var(--green);background:#e7f1eb}.status.rejected{color:var(--red);background:#faeceb}.empty{padding:14px 0;color:var(--muted)}.progress{height:8px;background:#e9e9e6;border-radius:4px;overflow:hidden;margin:14px 0}.progress span{display:block;height:100%;background:var(--blue)}.source{white-space:pre-wrap;overflow-wrap:anywhere;margin-top:10px;font-size:14px}.record-meta{font-size:12px;color:var(--muted);margin-top:4px}details{margin-top:8px}summary{cursor:pointer;color:var(--muted)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.form-grid .full{grid-column:1/-1}.form-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.role-band{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.role-band div{display:flex;justify-content:space-between;gap:12px;background:#f4f4f1;padding:10px;border-radius:4px}.role-band b{font-weight:400;font-variant-numeric:tabular-nums}.login{max-width:440px;margin:10vh auto;padding:28px;display:grid;gap:22px}.login h1{font-size:24px}.login button{justify-self:start}.login .identity{margin-bottom:12px}dialog{max-width:650px;width:calc(100% - 32px);max-height:90dvh;border:1px solid var(--line);border-radius:8px;padding:24px;color:var(--ink);background:#fff}dialog::backdrop{background:#20232355}.dialog-head{margin-bottom:20px}.hint{background:#f4f4f1;padding:12px;border-radius:6px}.audit{overflow-wrap:anywhere}.loading{opacity:.6;pointer-events:none}.report-text{white-space:pre-wrap;margin-top:8px}.wide{grid-column:1/-1}.step-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px}.step-tabs button[aria-current=step]{background:var(--active)}
@media(max-width:1100px){.shell{display:block}aside{display:none}aside.open{display:flex;position:fixed;inset:0;z-index:3;background:var(--ground);padding:70px 24px 24px}main{padding:16px 24px 32px}.mobile-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;position:relative;z-index:4}.mobile-head button{min-height:44px}.account{margin-top:24px}nav{grid-template-columns:repeat(2,1fr)}nav button{min-height:44px}.title-row{align-items:start}.two{grid-template-columns:1fr 1fr}.role-band{grid-template-columns:repeat(2,1fr)}}
@media(max-width:640px){body{font-size:14px}main{padding:12px 16px 28px}.two,.form-grid{grid-template-columns:1fr}.form-grid .full{grid-column:auto}.title-row{gap:12px;margin-bottom:20px}.title-row h1{font-size:22px}.title-row p{font-size:13px}.title-row>button{min-height:44px}.panel{padding:16px}.panel-head{gap:12px}.metrics{grid-template-columns:1fr}.metric{padding:14px 16px;display:flex;justify-content:space-between;align-items:center}.metric+.metric{border-left:0;border-top:1px solid var(--line)}.metric strong,.metric:first-child strong{font-size:24px;margin:0}.row{gap:12px}.row .right{max-width:110px}button{min-height:44px}input,select{min-height:44px}.login{margin:4vh auto;padding:24px}dialog{padding:18px}.role-band{gap:8px}}
@media(prefers-reduced-motion:reduce){button:active{transform:none}}
progress.progress{display:block;width:100%;appearance:none;border:0;background:#e9e9e6}progress.progress::-webkit-progress-bar{background:#e9e9e6;border-radius:4px}progress.progress::-webkit-progress-value{background:var(--blue);border-radius:4px}progress.progress::-moz-progress-bar{background:var(--blue)}
