:root{font-family:Inter,Noto Sans SC,Microsoft YaHei,system-ui,sans-serif;color:#1d2421;background:#f4f6f3;font-synthesis:none;--ink: #1d2421;--muted: #65706b;--line: #dfe4df;--surface: #ffffff;--soft: #f4f6f3;--green: #177256;--green-dark: #105742;--green-soft: #e5f3ed;--amber: #9b6214;--amber-soft: #fff2d9;--red: #b33b40;--red-soft: #fbe9e9;--blue: #29658f;--blue-soft: #e9f2f8;--shadow: 0 12px 34px rgba(24, 38, 31, .09)}*{box-sizing:border-box;letter-spacing:0}html,body,#app{margin:0;min-height:100%}body{min-width:320px;background:var(--soft)}button,input,textarea,select{font:inherit}button{cursor:pointer}a{color:inherit;text-decoration:none}.btn{display:inline-flex;min-height:40px;align-items:center;justify-content:center;gap:8px;border:1px solid transparent;border-radius:6px;padding:0 15px;font-weight:650;color:#fff;background:var(--green);transition:background .18s,border-color .18s,transform .18s}.btn:hover{background:var(--green-dark)}.btn:active{transform:translateY(1px)}.btn:disabled{cursor:not-allowed;opacity:.55;transform:none}.btn.secondary{background:#fff;border-color:var(--line);color:var(--ink)}.btn.secondary:hover{background:#f7f8f6;border-color:#bbc5be}.btn.danger{background:var(--red)}.btn.ghost{min-height:36px;background:transparent;color:var(--muted);padding:0 10px}.btn.ghost:hover{background:#edf0ed;color:var(--ink)}.btn.icon{width:38px;min-height:38px;padding:0}.btn.small{min-height:34px;padding:0 11px;font-size:13px}.field{display:grid;gap:7px}.field>label,.field-label{font-size:13px;font-weight:650;color:#46504b}.input,.select,.textarea{width:100%;border:1px solid #ccd3ce;border-radius:6px;background:#fff;color:var(--ink);outline:none;transition:border-color .18s,box-shadow .18s}.input,.select{height:42px;padding:0 12px}.textarea{min-height:118px;resize:vertical;padding:11px 12px;line-height:1.55}.input:focus,.select:focus,.textarea:focus{border-color:var(--green);box-shadow:0 0 0 3px #1772561f}.help{margin:0;font-size:12px;line-height:1.5;color:var(--muted)}.panel{border:1px solid var(--line);border-radius:8px;background:var(--surface)}.panel-head{display:flex;min-height:64px;align-items:center;justify-content:space-between;gap:16px;padding:14px 18px;border-bottom:1px solid var(--line)}.panel-head h2{margin:0;font-size:17px}.panel-body{padding:18px}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:20px}.page-head h1{margin:0 0 5px;font-size:25px;line-height:1.25}.page-head p{margin:0;color:var(--muted);font-size:14px}.actions{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.table-wrap{overflow-x:auto}.data-table{width:100%;min-width:720px;border-collapse:collapse}.data-table th{height:43px;padding:0 14px;border-bottom:1px solid var(--line);background:#f7f8f6;color:var(--muted);font-size:12px;font-weight:700;text-align:left;white-space:nowrap}.data-table td{height:54px;padding:8px 14px;border-bottom:1px solid #edf0ed;font-size:13px;vertical-align:middle}.data-table tr:last-child td{border-bottom:0}.data-table tbody tr:hover{background:#fafbfa}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.muted{color:var(--muted)}.truncate{max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.badge{display:inline-flex;height:25px;align-items:center;gap:5px;border-radius:999px;padding:0 9px;font-size:12px;font-weight:700;white-space:nowrap}.badge.green{color:var(--green-dark);background:var(--green-soft)}.badge.amber{color:var(--amber);background:var(--amber-soft)}.badge.red{color:var(--red);background:var(--red-soft)}.badge.blue{color:var(--blue);background:var(--blue-soft)}.badge.gray{color:#5f6763;background:#ecefed}.filters{display:grid;grid-template-columns:minmax(180px,1.2fr) minmax(150px,.8fr) minmax(180px,1fr) auto;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line)}.empty{display:grid;min-height:220px;place-items:center;padding:32px;color:var(--muted);text-align:center}.empty svg{margin-bottom:10px;color:#9aa59f}.empty p{margin:0}.loading{display:grid;min-height:220px;place-items:center;color:var(--muted)}.spinner{width:22px;height:22px;border:2px solid #dbe1dc;border-top-color:var(--green);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.pagination{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-top:1px solid var(--line);font-size:13px;color:var(--muted)}.pagination-controls{display:flex;gap:7px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;place-items:center;padding:18px;background:#11181580}.modal{width:min(620px,100%);max-height:calc(100vh - 36px);overflow:auto;border-radius:8px;background:#fff;box-shadow:0 24px 80px #0000003d}.modal.wide{width:min(780px,100%)}.modal-head{display:flex;min-height:64px;align-items:center;justify-content:space-between;gap:16px;padding:14px 20px;border-bottom:1px solid var(--line)}.modal-head h3{margin:0;font-size:18px}.modal-body{display:grid;gap:16px;padding:20px}.modal-actions{display:flex;justify-content:flex-end;gap:9px;padding:14px 20px;border-top:1px solid var(--line)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.notice-stack{position:fixed;z-index:100;top:18px;right:18px;display:grid;width:min(360px,calc(100vw - 36px));gap:8px}.notice{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-left:4px solid var(--green);border-radius:6px;padding:12px 14px;background:#fff;box-shadow:var(--shadow);font-size:14px}.notice.error{border-left-color:var(--red)}.notice.success svg{color:var(--green)}.notice.error svg{color:var(--red)}.segmented{display:inline-grid;grid-auto-flow:column;gap:3px;border-radius:7px;padding:3px;background:#edf0ed}.segmented button{min-height:34px;border:0;border-radius:5px;padding:0 13px;background:transparent;color:var(--muted);font-weight:650}.segmented button.active{background:#fff;color:var(--ink);box-shadow:0 1px 4px #141e191a}@media(max-width:760px){.page-head{align-items:stretch;flex-direction:column}.filters,.form-grid{grid-template-columns:1fr}.panel-head,.pagination{align-items:flex-start;flex-direction:column}.modal-actions .btn{flex:1}}
