:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f4f9f8;--surface:#fff;--surface-2:#f8fbfb;--surface-3:#edf3f3;--g-50:#f4f9f9;--g-100:#e9f1f2;--g-200:#dbe6e8;--g-300:#c6d5d8;--g-400:#a2b4b9;--g-500:#7b9095;--g-600:#5b7176;--g-700:#43585e;--g-800:#2c3f46;--g-900:#1e2a32;--ink:var(--g-900);--ink-2:var(--g-700);--ink-3:var(--g-600);--ink-4:var(--g-400);--line-hair:var(--g-100);--line:var(--g-200);--line-strong:var(--g-300);--t-25:#f0fbf9;--t-50:#def7f2;--t-100:#bff0e7;--t-200:#8fe3d6;--t-300:#4fd1be;--t-400:#22c3ae;--t-500:#14b8a6;--t-600:#0b9c8c;--t-700:#0b8276;--t-800:#0a6a61;--mint:#10b981;--mint-ink:#067a54;--mint-soft:#e4f8ef;--mint-line:#a9e6cc;--sky:#0ea5e9;--sky-ink:#0369a1;--sky-soft:#e4f4fe;--sky-line:#a6dcf8;--sun:#f59e0b;--sun-ink:#b45309;--sun-soft:#fef4de;--sun-line:#f6d28c;--coral:#f2604c;--coral-ink:#c33d2c;--coral-soft:#ffede9;--coral-line:#fac5b9;--f-sans:"Noto Sans SC", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif;--f-num:ui-monospace, "SFMono-Regular", Consolas, monospace;--f-hand:var(--f-sans);--sidebar-w:244px;--topbar-h:60px;--content-max:1240px;--content-wide:1560px;--r-xs:6px;--r-sm:8px;--r-md:12px;--r-lg:16px;--r-full:999px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--space-16:64px;--sh-1:0 1px 2px #1020260a, 0 1px 1px #10202608;--sh-2:0 1px 2px #1020260a, 0 4px 8px -2px #1020260d, 0 12px 24px -6px #1020260f;--sh-3:0 2px 4px #1020260d, 0 8px 16px -4px #10202612, 0 22px 44px -12px #1020261a;--sh-4:0 4px 8px #1020260f, 0 16px 32px -8px #1020261a, 0 40px 72px -20px #10202629;--ring:0 0 0 3px #14b8a638;--ease:cubic-bezier(.2, .8, .3, 1)}*,:before,:after{box-sizing:border-box}[hidden]{display:none!important}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}html,body,#root{min-height:100%}body{color:var(--ink);background:var(--bg);font-family:var(--f-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:14px;line-height:1.65}body:before{z-index:0;content:"";pointer-events:none;background:radial-gradient(900px 520px at 82% -8%,#14b8a612,#0000 62%),radial-gradient(760px 460px at 6% 4%,#0ea5e90d,#0000 60%);position:fixed;inset:0}button,input,select,textarea{color:inherit;font:inherit}a{color:inherit;text-decoration:none}svg{flex:none;display:block}::selection{color:var(--t-800);background:var(--t-100)}:where(a,button,input,select,textarea,[tabindex]):focus-visible{box-shadow:var(--ring);outline:none}.shell{z-index:1;min-height:100vh;padding-left:var(--sidebar-w);position:relative}.skip-link{z-index:100;border-radius:var(--r-sm);color:#fff;background:var(--t-800);padding:8px 14px;font-weight:600;position:fixed;top:12px;left:12px;transform:translateY(calc(-100% - 16px))}.skip-link:focus{transform:translateY(0)}.topbar{z-index:60;height:var(--topbar-h);-webkit-backdrop-filter:saturate(180%)blur(12px);backdrop-filter:saturate(180%)blur(12px);background:#ffffffdb;align-items:center;gap:12px;padding:0 24px;display:flex;position:fixed;top:0;left:0;right:0;box-shadow:0 1px #1020260d,0 6px 16px -10px #1020261f}.topbar-brand{width:calc(var(--sidebar-w) - 24px);color:var(--ink);letter-spacing:.015em;flex:none;font-size:17px;font-weight:700}.topbar-content{flex:1;min-width:0}.topbar-actions{align-items:center;gap:8px;margin-left:auto;display:flex}.sidebar{z-index:50;top:var(--topbar-h);width:var(--sidebar-w);background:var(--surface);flex-direction:column;padding:12px;display:flex;position:fixed;bottom:0;left:0;overflow-y:auto;box-shadow:1px 0 #1020260a}.sidebar-nav{flex-direction:column;flex:1;gap:2px;display:flex}.sidebar-nav a{border-radius:var(--r-sm);color:var(--ink-2);align-items:center;gap:10px;padding:8px 10px;font-size:13.5px;transition:color .16s,background .16s;display:flex}.sidebar-nav a:hover{color:var(--ink);background:var(--g-50)}.sidebar-nav a[aria-current=page]{color:var(--t-800);background:var(--t-25);box-shadow:inset 0 0 0 1px var(--t-100);font-weight:600}.sidebar-foot{color:var(--ink-3);box-shadow:inset 0 1px 0 var(--line-hair);margin-top:auto;padding:14px 10px 6px;font-size:11.5px}.sidebar-mobile-toggle{display:none}.main{min-width:0;padding-top:var(--topbar-h)}.wrap{max-width:var(--content-max);margin:0 auto;padding:28px 32px 80px}.wrap.wide{max-width:var(--content-wide)}.card{border-radius:var(--r-md);background:var(--surface);box-shadow:var(--sh-2);transition:box-shadow .18s var(--ease), transform .18s var(--ease);overflow:hidden}.card.lift:hover{box-shadow:var(--sh-3);transform:translateY(-1px)}.card-head{box-shadow:inset 0 -1px 0 var(--line-hair);align-items:center;gap:12px;padding:15px 20px 13px;display:flex}.card-head h2{margin:0;font-size:14.5px;font-weight:600}.card-actions{gap:8px;margin-left:auto;display:flex}.card-body{padding:20px}.card-foot{box-shadow:inset 0 1px 0 var(--line-hair);align-items:center;gap:10px;padding:13px 20px;display:flex}.btn{border:1px solid var(--line);border-radius:var(--r-sm);color:var(--ink-2);background:var(--surface);box-shadow:var(--sh-1);cursor:pointer;white-space:nowrap;transition:color .16s, background .16s, border-color .16s, box-shadow .18s var(--ease), transform .1s;justify-content:center;align-items:center;gap:6px;padding:8px 15px;font-size:13px;font-weight:500;display:inline-flex}.btn:hover:not(:disabled){color:var(--ink);border-color:var(--line-strong);background:var(--g-50);box-shadow:var(--sh-2)}.btn:active:not(:disabled){box-shadow:var(--sh-1);transform:translateY(1px)}.btn-primary{color:#fff;background:linear-gradient(170deg, var(--t-600), var(--t-700));border-color:#0000;box-shadow:0 1px 2px #0a6a6138,0 4px 10px -3px #0a6a6147,inset 0 1px #ffffff38}.btn-primary:hover:not(:disabled){color:#fff;background:linear-gradient(170deg, var(--t-700), var(--t-800));border-color:#0000;box-shadow:0 2px 4px #0a6a613d,0 10px 20px -6px #0a6a6157,inset 0 1px #ffffff38}.btn-ghost{box-shadow:none;background:0 0;border-color:#0000}.btn-danger{color:var(--coral-ink);border-color:var(--coral-line);background:var(--coral-soft)}.btn-soft{color:var(--t-800);border-color:var(--t-100);background:var(--t-25)}.btn-ghost:hover:not(:disabled){color:var(--ink);background:var(--g-50);box-shadow:none;border-color:#0000}.btn-danger:hover:not(:disabled){color:#fff;background:var(--coral);box-shadow:var(--sh-2);border-color:#0000}.btn-soft:hover:not(:disabled){color:var(--t-800);border-color:var(--t-200);background:var(--t-50);box-shadow:var(--sh-2)}.btn-sm{border-radius:var(--r-xs);gap:4px;padding:4px 10px;font-size:12px}.btn-lg{padding:11px 22px;font-size:14px}.btn-block{width:100%}.btn:disabled,.btn[aria-disabled=true]{opacity:.48;box-shadow:none;cursor:not-allowed}.btn-icon{place-items:center;display:inline-grid}.field+.field{margin-top:15px}.field-k{color:var(--ink-2);align-items:center;gap:6px;margin-bottom:6px;font-size:12.5px;font-weight:500;display:flex}.field-required{color:var(--coral-ink);font-size:11px}.field-hint,.field-error{color:var(--ink-3);margin-top:5px;font-size:11.5px;line-height:1.65}.field-error{color:var(--coral-ink)}.input,.select,.textarea,.field :where(input,select,textarea){border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);width:100%;padding:8px 12px;font-size:13.5px;transition:border-color .16s,box-shadow .16s,background .16s}.input:hover,.select:hover,.textarea:hover,.field :where(input,select,textarea):hover{border-color:var(--line-strong)}.input:focus-visible,.select:focus-visible,.textarea:focus-visible,.field :where(input,select,textarea):focus-visible{border-color:var(--t-400);background:var(--surface)}.field :where(input,select,textarea)[aria-invalid=true]{border-color:var(--coral)}.cursor-table{border-radius:var(--r-md);background:var(--surface);box-shadow:var(--sh-2);overflow:hidden}.tbl-scroll{max-width:100%;overflow-x:auto}.tbl{border-collapse:collapse;width:100%;font-size:13px}.tbl caption{color:var(--ink);box-shadow:inset 0 -1px 0 var(--line-hair);text-align:left;padding:15px 20px 13px;font-size:14.5px;font-weight:600}.tbl th{color:var(--ink-3);background:var(--surface-2);box-shadow:inset 0 -1px 0 var(--line);letter-spacing:.07em;text-align:left;white-space:nowrap;padding:10px 14px;font-size:11px;font-weight:600}.tbl td{box-shadow:inset 0 -1px 0 var(--line-hair);vertical-align:middle;padding:12px 14px}.tbl tbody tr{transition:background .14s}.tbl tbody tr:hover{background:var(--t-25)}.tbl tbody tr:last-child td{box-shadow:none}.tbl .r{text-align:right;font-variant-numeric:tabular-nums}.tbl .c,.table-empty{text-align:center}.table-empty{color:var(--ink-3);padding:32px 14px!important}.cursor-pagination{box-shadow:inset 0 1px 0 var(--line-hair);justify-content:flex-end;gap:8px;padding:12px 14px;display:flex}.tag{border-radius:var(--r-full);white-space:nowrap;align-items:center;gap:5px;padding:2px 9px;font-size:11.5px;font-weight:500;line-height:1.7;display:inline-flex}.tag:before{content:"";background:currentColor;border-radius:50%;flex:none;width:5px;height:5px}.tag.no-dot:before{display:none}.tag.plain{color:var(--ink-2);background:var(--g-100)}.tag.teal{color:var(--t-800);background:var(--t-50)}.tag.mint{color:var(--mint-ink);background:var(--mint-soft)}.tag.sky{color:var(--sky-ink);background:var(--sky-soft)}.tag.sun{color:var(--sun-ink);background:var(--sun-soft)}.tag.coral{color:var(--coral-ink);background:var(--coral-soft)}.tag.ghost{color:var(--ink-3);box-shadow:inset 0 0 0 1px var(--line);background:0 0}.tag.solid{color:#fff;background:linear-gradient(160deg, var(--t-600), var(--t-700))}.layer-root{z-index:90;position:fixed;inset:0}.scrim{z-index:90;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#1e2a3252;animation:.2s both fade;position:fixed;inset:0}.dialog-layer{z-index:95;background:var(--surface);box-shadow:var(--sh-4)}.modal{border-radius:var(--r-lg);width:540px;max-width:93vw;max-height:88vh;animation:pop-in .24s var(--ease) both;flex-direction:column;display:flex;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.modal.lg{width:740px}.modal-head,.drawer-head{box-shadow:inset 0 -1px 0 var(--line-hair);align-items:center;gap:10px;padding:17px 22px;display:flex}.modal-head h2,.drawer-head h2{margin:0;font-size:16px;font-weight:600}.dialog-close{margin-left:auto}.icon-btn{border-radius:var(--r-sm);width:34px;height:34px;color:var(--ink-2);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:grid}.icon-btn:hover{color:var(--ink);background:var(--g-50)}.modal-body,.drawer-body{overscroll-behavior:contain;flex:1;padding:22px;overflow-y:auto}.modal-foot,.drawer-foot{box-shadow:inset 0 1px 0 var(--line-hair);align-items:center;gap:9px;padding:14px 22px;display:flex}.drawer{width:440px;max-width:94vw;animation:slide-in .28s var(--ease) both;flex-direction:column;display:flex;position:fixed;top:0;bottom:0;right:0}.drawer-head h2{font-size:15px}.toast{border-radius:var(--r-md);background:var(--surface);min-width:290px;max-width:390px;box-shadow:var(--sh-4);animation:toast-in .28s var(--ease) both;align-items:flex-start;gap:11px;padding:13px 16px;font-size:13px;line-height:1.6;display:flex;position:relative;overflow:hidden}.toast:after{background:var(--t-500);content:"";width:3px;position:absolute;top:0;bottom:0;left:0}.toast.good:after{background:var(--mint)}.toast.warn:after{background:var(--sun)}.toast-mark{background:var(--t-500);border-radius:50%;flex:none;width:8px;height:8px;margin-top:6px}.toast.good .toast-mark{background:var(--mint)}.toast.warn .toast-mark{background:var(--sun)}.toast-t{font-weight:600}.toast-d{color:var(--ink-3);margin-top:2px;font-size:12px}.state{color:var(--ink-3);text-align:center;padding:46px 24px}.state-mark{border-radius:var(--r-md);width:52px;height:52px;color:var(--t-500);background:var(--t-25);box-shadow:inset 0 0 0 1px var(--t-100);place-items:center;margin:0 auto 14px;display:grid}.state.deny .state-mark,.state.error .state-mark{color:var(--coral);background:var(--coral-soft);box-shadow:inset 0 0 0 1px var(--coral-line)}.state-t{color:var(--ink);margin:0;font-size:15px;font-weight:600}.state-d{max-width:400px;margin:6px auto 0;font-size:12.5px;line-height:1.8}.state-a{margin-top:16px}.skeleton>div{gap:10px;display:grid}.skel{border-radius:var(--r-xs);background:linear-gradient(90deg, var(--g-100) 25%, var(--g-50) 50%, var(--g-100) 75%);background-size:200% 100%;height:12px;animation:1.4s linear infinite shimmer;display:block}.skel:last-child{width:72%}@keyframes fade{0%{opacity:0}}@keyframes pop-in{0%{opacity:0;transform:translate(-50%,-47%)scale(.975)}}@keyframes slide-in{0%{opacity:0;transform:translate(30px)}}@keyframes toast-in{0%{opacity:0;transform:translateY(12px)}}@keyframes shimmer{to{background-position:-200% 0}}@media (width<=940px){:root{--sidebar-w:0px}.shell{padding-left:0}.topbar{padding-inline:16px}.topbar-brand{width:auto}.sidebar{visibility:hidden;width:244px;transition:transform .24s var(--ease), visibility 0s linear .24s;transform:translate(-100%)}.sidebar.open,.shell[data-sidebar-open=true] .sidebar{visibility:visible;box-shadow:var(--sh-4);transition-delay:0s;transform:none}.sidebar-mobile-toggle{z-index:65;top:calc(var(--topbar-h) + 12px);border:1px solid var(--t-100);border-radius:0 var(--r-md) var(--r-md) 0;width:42px;height:42px;color:var(--t-800);background:var(--surface);box-shadow:var(--sh-2);cursor:pointer;transition:left .24s var(--ease), border-radius .24s var(--ease), background .16s;border-left:0;place-items:center;padding:0;display:grid;position:fixed;left:0}.shell[data-sidebar-open=true] .sidebar-mobile-toggle{border-radius:var(--r-md) 0 0 var(--r-md);left:244px}.wrap{padding:20px 16px 60px}}@media (width<=640px){.modal,.drawer{max-width:calc(100vw - 24px)}.drawer{width:calc(100vw - 24px)}.cursor-pagination .btn{min-width:88px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}@media print{.topbar,.sidebar,.sidebar-mobile-toggle{display:none!important}.shell{padding-left:0}.main{padding-top:0}body:before{display:none}.card,.cursor-table{box-shadow:0 0 0 1px var(--line)!important}}:where(a,button,input,select,textarea,[tabindex]):focus-visible{box-shadow:var(--ring)!important}
