:root{font-family:Inter,PingFang SC,Microsoft YaHei,Noto Sans SC,sans-serif;color:var(--ink);background:var(--canvas);font-weight:500;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;--primary:#2665d9;--ink:#172c46;--muted:#73839b;--line:#e6edf5;--canvas:#f5f8fc;--blue-soft:#edf4ff;--success:#21866b;--warning:#b98027;--danger:#c44e54;--radius:12px}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-width:320px}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}a{color:inherit;text-decoration:none}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.5}img{display:block;max-width:100%}h1,h2,h3,h4,p{margin-top:0}h1,h2,h3,h4{letter-spacing:-.02em}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:3px solid #91b7f2;outline-offset:3px}input,select,textarea{max-width:100%}svg{flex-shrink:0}::selection{background:#dceaff}table{border-collapse:collapse;width:100%}.btn{display:inline-flex;justify-content:center;align-items:center;gap:8px;min-height:38px;padding:9px 17px;border:1px solid #dce5f1;background:#fff;color:#3c506c;border-radius:7px;font-size:14px;font-weight:600;line-height:1.45;transition:background .18s,border-color .18s,transform .18s;white-space:nowrap}.btn:hover{border-color:#a6c2ec;background:#f6f9ff}.btn:active{transform:translateY(1px)}.btn svg{width:16px;height:16px}.btn.btn-primary,.btn.btn-soft,.a-btn.primary{background:var(--blue-soft);color:var(--primary);border-color:#e2edff;box-shadow:none}.btn.btn-primary:hover,.btn.btn-soft:hover,.a-btn.primary:hover{background:#e2edff;color:var(--primary);border-color:#a6c2ec}.btn-sm{min-height:30px;padding:5px 11px;font-size:12px}.btn-danger{color:#b34850;background:#fff8f8;border-color:#f0d4d6}.btn-link{background:transparent;border:0;padding:4px;color:var(--primary);font-size:13px}.muted{color:var(--muted)}.small{font-size:12px}.panel{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:24px}.page-heading{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:24px}.page-heading h1{font-size:25px;line-height:1.4;margin-bottom:7px;font-weight:700}.page-heading p{color:var(--muted);font-size:14px;margin-bottom:0;line-height:1.7}.badge{display:inline-flex;align-items:center;gap:5px;padding:4px 9px;line-height:1.35;border-radius:5px;background:#edf3fc;color:#4775af;font-size:12px;font-weight:600;white-space:nowrap}.badge-success{background:#e9f6ef;color:#298462}.badge-warning{background:#fff5e4;color:#a77728}.badge-danger{background:#fff0f0;color:#bd5259}.badge-neutral{background:#f1f4f8;color:#718097}.field{display:block;width:100%;height:42px;padding:8px 12px;border:1px solid #dce5ef;background:#fff;border-radius:7px;color:var(--ink);font-size:14px;transition:border-color .2s}.field:focus{border-color:#87acf0;outline:2px solid #e7efff;outline-offset:0}.field::placeholder{color:#9aa9bb}textarea.field{height:auto;min-height:110px;resize:vertical;line-height:1.8}.filters{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 20px}.filters .field{width:auto;min-width:140px}.filters input.field{min-width:220px}.table-wrap{width:100%;overflow:auto}.data-table{font-size:14px;text-align:left;white-space:nowrap}.data-table th{font-size:13px;font-weight:600;color:#8290a3;background:#f7f9fc;padding:13px 16px;border-bottom:1px solid var(--line)}.data-table td{padding:17px 16px;border-bottom:1px solid #eef2f7;color:#41536c}.data-table tr:last-child td{border-bottom:0}.data-table tbody tr:hover{background:#fafcff}.data-table a{color:#285da9}.empty-state{padding:58px 22px;text-align:center;color:#8795a8;font-size:14px;line-height:1.8}.empty-state svg{margin:0 auto 14px;color:#adc0d7}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}.form-field{display:flex;flex-direction:column;gap:9px}.form-field>label{font-size:14px;font-weight:600;color:#52627a}.form-field small{font-size:12px;color:#8897aa;line-height:1.7}.form-field.full{grid-column:1/-1}.detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.detail-item{min-width:0;font-size:14px;line-height:1.8}.detail-item>label,.detail-item>span:first-child{display:block;color:#8794a8;font-size:12px;margin-bottom:5px}.divider{border:0;border-top:1px solid var(--line);margin:24px 0}.actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.text-link{color:var(--primary)}.error-message{color:var(--danger);font-size:12px;line-height:1.7}.demo-note{font-size:12px;color:#8b98aa;line-height:1.7}.toast-stack{position:fixed;left:50%;top:24px;transform:translate(-50%);z-index:10000;display:flex;flex-direction:column;gap:10px;max-width:calc(100vw - 32px);pointer-events:none}.toast-item{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid #dfebf6;box-shadow:0 8px 30px #214c7a22;padding:13px 20px;border-radius:9px;color:#314c6d;font-size:14px;line-height:1.7}.toast-dot{width:7px;height:7px;border-radius:50%;background:#4b87db;flex-shrink:0}.toast-enter-active,.toast-leave-active{transition:all .22s}.toast-enter-from,.toast-leave-to{opacity:0;transform:translateY(-10px)}.skip-link{position:fixed;left:16px;top:-80px;background:#fff;padding:12px 20px;z-index:99999;color:#245bc1;border:2px solid}.skip-link:focus{top:12px}.not-found{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:30px;text-align:center}.not-found>span{font-size:90px;color:#bed1ef;font-weight:700}.not-found h1{font-size:28px}.not-found p{color:var(--muted)}.not-found>div{display:flex;gap:12px}@media(max-width:760px){.page-heading{align-items:flex-start;flex-wrap:wrap;gap:14px}.page-heading h1{font-size:22px}.panel{padding:18px}.form-grid,.detail-grid{grid-template-columns:1fr}.filters{gap:9px}.filters .field,.filters input.field{min-width:0;flex:1 1 140px}.data-table td,.data-table th{padding:13px 12px}.btn{padding:9px 13px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important;animation-iteration-count:1!important}}
