:root,html[data-theme=light]{--primary:#e74c3c;--primary-hover:#c0392b;--primary-soft:#e74c3c1a;--primary-contrast:#fff;--bg:#f4f5f7;--sidebar-bg:#fff;--surface:#fff;--surface-2:#f8f9fb;--surface-hover:#f2f4f7;--text:#1a1a2e;--text-2:#4a4a68;--text-3:#8c8ca1;--border:#e4e7ec;--border-soft:#eef0f4;--success:#16a34a;--success-soft:#16a34a1a;--warning:#d97706;--warning-soft:#d977061a;--danger:#dc2626;--danger-soft:#dc26261a;--info:#2563eb;--info-soft:#2563eb1a;--shadow-sm:0 1px 2px #1018280d;--shadow:0 1px 3px #10182814, 0 1px 2px #1018280a;--shadow-lg:0 12px 32px #1018281f;--code-bg:#0000000d;--code-text:#c0392b;--scroll-thumb:#cdd2da;--overlay:#10182866;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html[data-theme=dark]{--primary:#e74c3c;--primary-hover:#ff6b5a;--primary-soft:#e74c3c24;--primary-contrast:#fff;--bg:#0d0f14;--sidebar-bg:#14161d;--surface:#191c24;--surface-2:#1e212a;--surface-hover:#232733;--text:#e6e8ee;--text-2:#a9aebd;--text-3:#6b7185;--border:#282c38;--border-soft:#202430;--success:#34d399;--success-soft:#34d39921;--warning:#fbbf24;--warning-soft:#fbbf2421;--danger:#f87171;--danger-soft:#f8717121;--info:#60a5fa;--info-soft:#60a5fa21;--shadow-sm:0 1px 2px #0000004d;--shadow:0 2px 8px #00000059;--shadow-lg:0 16px 40px #00000080;--code-bg:#ffffff12;--code-text:#ff8a7a;--scroll-thumb:#363b49;--overlay:#0009;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html,body,#app{height:100%}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Arial,sans-serif;font-size:14px;line-height:1.6}h1,h2,h3,h4,p{margin:0}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--scroll-thumb);background-clip:padding-box;border:2px solid #0000;border-radius:8px}::-webkit-scrollbar-thumb:hover{background:var(--text-3);background-clip:padding-box}.shell{min-height:100vh;display:flex}.sidebar{background:var(--sidebar-bg);border-right:1px solid var(--border);z-index:40;flex-direction:column;width:224px;display:flex;position:fixed;inset:0 auto 0 0}.brand{border-bottom:1px solid var(--border-soft);align-items:center;gap:10px;padding:18px 18px 16px;display:flex}.brand-mark{background:linear-gradient(135deg, var(--primary), #ff8a5c);color:#fff;width:34px;height:34px;box-shadow:0 4px 12px var(--primary-soft);border-radius:10px;flex:none;place-items:center;font-size:18px;display:grid}.brand-text{min-width:0}.brand-title{letter-spacing:.2px;white-space:nowrap;font-size:14px;font-weight:700}.brand-sub{color:var(--text-3);white-space:nowrap;font-size:11px}.nav{flex-direction:column;flex:1;gap:2px;padding:12px 10px;display:flex;overflow-y:auto}.nav-group-label{letter-spacing:.6px;color:var(--text-3);text-transform:uppercase;padding:12px 10px 6px;font-size:11px;font-weight:600}.nav-item{color:var(--text-2);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:8px;align-items:center;gap:10px;width:100%;padding:9px 11px;font-size:13.5px;font-weight:500;transition:background .15s,color .15s;display:flex}.nav-item:hover{background:var(--surface-hover);color:var(--text);text-decoration:none}.nav-item.active{background:var(--primary-soft);color:var(--primary);font-weight:600}.nav-item .icon{opacity:.9;flex:none}.nav-badge{background:var(--primary);color:#fff;border-radius:10px;place-items:center;min-width:20px;height:20px;margin-left:auto;padding:0 6px;font-size:11px;font-weight:700;display:grid}.sidebar-foot{border-top:1px solid var(--border-soft);flex-direction:column;gap:8px;padding:12px;display:flex}.main{flex-direction:column;flex:1;min-width:0;margin-left:224px;display:flex}.topbar{z-index:30;background:var(--bg);border-bottom:1px solid var(--border);align-items:center;gap:12px;height:58px;padding:0 22px;display:flex;position:sticky;top:0}.topbar h1{font-size:16px;font-weight:700}.topbar-sub{color:var(--text-3);font-size:12px}.topbar-actions{align-items:center;gap:8px;margin-left:auto;display:flex}.content{width:100%;max-width:1180px;padding:22px}.card{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-sm);border-radius:12px}.card+.card{margin-top:16px}.card-head{border-bottom:1px solid var(--border-soft);align-items:center;gap:10px;padding:14px 18px;display:flex}.card-head h2,.card-head h3{font-size:14px;font-weight:700}.card-head .spacer{margin-left:auto}.card-body{padding:18px}.card-body.tight{padding:12px 18px}.stat-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;display:grid}.stat{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-sm);border-radius:12px;padding:16px}.stat-label{color:var(--text-3);align-items:center;gap:6px;font-size:12px;display:flex}.stat-value{letter-spacing:-.3px;word-break:break-all;margin-top:8px;font-size:22px;font-weight:700}.stat-value.sm{font-size:15px;font-weight:600}.stat-hint{color:var(--text-3);margin-top:4px;font-size:12px}.btn{background:var(--surface-2);color:var(--text);cursor:pointer;white-space:nowrap;border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;gap:6px;padding:8px 14px;font-size:13px;font-weight:600;transition:background .15s,border-color .15s,opacity .15s,transform 60ms;display:inline-flex}.btn:hover:not(:disabled){background:var(--surface-hover)}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);color:var(--primary-contrast)}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-outline{border-color:var(--border);background:0 0}.btn-outline:hover:not(:disabled){background:var(--surface-hover)}.btn-danger{background:var(--danger-soft);color:var(--danger)}.btn-danger:hover:not(:disabled){background:var(--danger);color:#fff}.btn-ghost{color:var(--text-2);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--surface-hover);color:var(--text)}.btn-sm{border-radius:7px;padding:5px 10px;font-size:12px}.btn-icon{border:1px solid var(--border);color:var(--text-2);background:0 0;border-radius:8px;padding:8px}.btn-icon:hover:not(:disabled){background:var(--surface-hover);color:var(--text)}.field{flex-direction:column;gap:6px;display:flex}.field-label{color:var(--text-2);font-size:12px;font-weight:600}.field-hint{color:var(--text-3);font-size:11.5px;line-height:1.5}.input,.select,.textarea{border:1px solid var(--border);background:var(--surface-2);width:100%;color:var(--text);border-radius:8px;outline:none;padding:9px 12px;transition:border-color .15s,box-shadow .15s}.input:focus,.select:focus,.textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}.textarea{resize:vertical;min-height:120px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.6}.switch{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:10px;display:inline-flex}.switch input{opacity:0;pointer-events:none;position:absolute}.switch-track{background:var(--border);border-radius:999px;flex:none;width:40px;height:22px;transition:background .18s;position:relative}.switch-track:after{content:"";background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .18s;position:absolute;top:3px;left:3px;box-shadow:0 1px 3px #0000004d}.switch input:checked+.switch-track{background:var(--primary)}.switch input:checked+.switch-track:after{transform:translate(18px)}.form-grid{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:16px;display:grid}.badge{background:var(--surface-2);color:var(--text-2);white-space:nowrap;border-radius:999px;align-items:center;gap:5px;padding:3px 9px;font-size:11.5px;font-weight:700;display:inline-flex}.badge-success{background:var(--success-soft);color:var(--success)}.badge-warning{background:var(--warning-soft);color:var(--warning)}.badge-danger{background:var(--danger-soft);color:var(--danger)}.badge-info{background:var(--info-soft);color:var(--info)}.badge-primary{background:var(--primary-soft);color:var(--primary)}.dot{background:currentColor;border-radius:50%;flex:none;width:7px;height:7px}.dot-pulse{animation:1.6s ease-in-out infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.3}}.progress{background:var(--surface-2);border-radius:999px;height:7px;overflow:hidden}.progress-bar{background:linear-gradient(90deg, var(--primary), #ff8a5c);border-radius:999px;height:100%;transition:width .35s}.progress-bar.done{background:linear-gradient(90deg, var(--success), #6ee7b7)}.progress-bar.indeterminate{animation:1.4s ease-in-out infinite slide;width:35%!important}@keyframes slide{0%{transform:translate(-100%)}to{transform:translate(320%)}}.table-wrap{overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:13px}th{text-align:left;color:var(--text-3);text-transform:uppercase;letter-spacing:.4px;border-bottom:1px solid var(--border);white-space:nowrap;padding:9px 12px;font-size:11.5px;font-weight:700}td{border-bottom:1px solid var(--border-soft);vertical-align:middle;padding:10px 12px}tbody tr:hover{background:var(--surface-hover)}tbody tr:last-child td{border-bottom:none}.book-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;display:grid}.book-card{border:1px solid var(--border);background:var(--surface);border-radius:10px;gap:12px;padding:13px;transition:border-color .15s,box-shadow .15s,transform .12s;display:flex}.book-card:hover{border-color:var(--primary);box-shadow:var(--shadow);transform:translateY(-1px)}.book-cover{object-fit:cover;background:var(--surface-2);border:1px solid var(--border-soft);border-radius:7px;flex:none;width:62px;height:84px}.book-main{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.book-title{-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;font-size:14px;font-weight:700;line-height:1.35;display:-webkit-box;overflow:hidden}.book-meta{color:var(--text-3);flex-wrap:wrap;gap:4px 10px;font-size:12px;display:flex}.book-abstract{color:var(--text-2);-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.5;display:-webkit-box;overflow:hidden}.book-actions{align-items:center;gap:8px;margin-top:auto;padding-top:6px;display:flex}.job{border:1px solid var(--border);background:var(--surface);border-radius:10px;padding:14px 16px}.job+.job{margin-top:10px}.job-head{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.job-title{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:14px;font-weight:700;overflow:hidden}.job-meta{color:var(--text-3);font-size:12px}.job-stats{color:var(--text-2);flex-wrap:wrap;gap:6px 18px;margin-top:10px;font-size:12.5px;display:flex}.job-stats b{color:var(--text);font-weight:700}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}.empty{text-align:center;color:var(--text-3);padding:42px 20px}.empty-icon{opacity:.5;margin-bottom:8px;font-size:32px}.spinner{border:2px solid;border-right-color:#0000;border-radius:50%;width:15px;height:15px;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.skeleton{background:linear-gradient(90deg, var(--surface-2) 25%, var(--surface-hover) 50%, var(--surface-2) 75%);background-size:200% 100%;border-radius:6px;height:14px;animation:1.3s infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}.crumbs{color:var(--text-3);flex-wrap:wrap;align-items:center;gap:4px;font-size:13px;display:flex}.crumb{color:var(--text-2);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:3px 6px;font-size:13px;font-weight:600}.crumb:hover{background:var(--surface-hover);color:var(--text)}.crumb.current{color:var(--text);cursor:default}.modal-mask{background:var(--overlay);z-index:100;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal{background:var(--surface);border:1px solid var(--border);width:100%;max-width:520px;max-height:84vh;box-shadow:var(--shadow-lg);border-radius:14px;overflow:auto}.modal-head{border-bottom:1px solid var(--border-soft);align-items:center;padding:15px 18px;font-weight:700;display:flex}.modal-body{flex-direction:column;gap:16px;padding:18px;display:flex}.modal-foot{border-top:1px solid var(--border-soft);justify-content:flex-end;gap:8px;padding:14px 18px;display:flex}.toasts{z-index:200;flex-direction:column;gap:10px;max-width:380px;display:flex;position:fixed;bottom:18px;right:18px}.toast{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--info);box-shadow:var(--shadow-lg);border-radius:10px;align-items:flex-start;gap:10px;padding:12px 14px;font-size:13px;animation:.22s toast-in;display:flex}.toast.success{border-left-color:var(--success)}.toast.error{border-left-color:var(--danger)}.toast.warning{border-left-color:var(--warning)}.toast-close{color:var(--text-3);cursor:pointer;background:0 0;border:none;margin-left:auto;padding:0 2px;font-size:15px;line-height:1}@keyframes toast-in{0%{opacity:0;transform:translate(16px)}}.row{align-items:center;gap:10px;display:flex}.row-wrap{flex-wrap:wrap}.spacer{margin-left:auto}.stack{flex-direction:column;gap:14px;display:flex}.stack-sm{flex-direction:column;gap:8px;display:flex}.muted{color:var(--text-3)}.text-sm{font-size:12.5px}.text-xs{font-size:11.5px}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.center{text-align:center}.mt-8{margin-top:8px}.mt-16{margin-top:16px}code{background:var(--code-bg);color:var(--code-text);border-radius:5px;padding:1px 5px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}.sidebar-backdrop{background:var(--overlay);z-index:35;animation:.18s fade-in;display:none;position:fixed;inset:0}@keyframes fade-in{0%{opacity:0}}.mobile-only{display:none}.card-list{flex-direction:column;gap:10px;padding:12px;display:flex}.m-item{border:1px solid var(--border);background:var(--surface);border-radius:10px;padding:12px 13px}.m-item-head{align-items:flex-start;gap:10px;display:flex}.m-item-icon{flex:none;font-size:20px;line-height:1.2}.m-item-title{word-break:break-word;font-size:14px;font-weight:700;line-height:1.4}.m-item-meta{color:var(--text-3);flex-wrap:wrap;gap:3px 10px;margin-top:3px;font-size:12px;display:flex}.m-item-actions{flex-wrap:wrap;gap:8px;margin-top:11px;display:flex}.m-item-actions .btn{flex:auto;min-width:88px}@media (width<=1024px){.content{max-width:100%;padding:18px 16px}.book-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}}@media (width<=860px){.sidebar{box-shadow:var(--shadow-lg);z-index:45;width:258px;transition:transform .24s cubic-bezier(.4,0,.2,1);transform:translate(-100%)}.sidebar.open{transform:none}.sidebar-backdrop.show{display:block}.main{margin-left:0}.topbar{gap:9px;height:54px;padding:0 14px}.topbar h1{font-size:15px}.topbar-sub{display:none}.topbar-actions{gap:6px}.topbar-actions .badge-optional{display:none}.content{padding:14px}.mobile-only{display:flex}.desktop-only{display:none!important}table.kv,table.kv tbody,table.kv tr,table.kv td{width:100%;display:block}table.kv tr{border-bottom:1px solid var(--border-soft);padding:9px 0}table.kv tr:last-child{border-bottom:none}table.kv td{border:none;padding:0}table.kv td:first-child{color:var(--text-3);text-transform:uppercase;letter-spacing:.3px;font-size:11.5px;font-weight:700;width:auto!important}table.kv td:last-child{word-break:break-all;margin-top:3px}.table-wrap table.responsive thead{display:none}.table-wrap table.responsive,.table-wrap table.responsive tbody,.table-wrap table.responsive tr,.table-wrap table.responsive td{width:100%;display:block}.table-wrap table.responsive tr{border:1px solid var(--border);background:var(--surface);border-radius:10px;margin-bottom:10px;padding:12px 13px}.table-wrap table.responsive tr:hover{background:var(--surface)}.table-wrap table.responsive td{text-align:right;border:none;align-items:baseline;gap:10px;padding:3px 0;display:flex}.table-wrap table.responsive td[data-label]:before{content:attr(data-label);text-align:left;width:78px;color:var(--text-3);text-transform:uppercase;letter-spacing:.3px;flex:none;font-size:11.5px;font-weight:700}.table-wrap table.responsive td[data-label]>*{text-align:right;min-width:0;margin-left:auto}.table-wrap table.responsive td[data-label=""]{text-align:left;padding-bottom:6px;display:block}.table-wrap table.responsive td[data-label=""]>*{text-align:left;margin-left:0}.table-wrap table.responsive td[data-label=""].mono,.table-wrap table.responsive td[data-label=""] .mono{word-break:break-all}.book-grid{grid-template-columns:1fr;gap:10px}.book-card{padding:12px}.book-cover{width:54px;height:74px}.book-actions .btn{flex:auto}.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.stat{padding:13px}.stat-value{font-size:19px}.stat-value.sm{font-size:13.5px}.modal-mask{align-items:flex-end;padding:0}.modal{border-radius:16px 16px 0 0;max-width:100%;max-height:90vh;animation:.24s cubic-bezier(.4,0,.2,1) sheet-up}@keyframes sheet-up{0%{opacity:.6;transform:translateY(24px)}}.modal-head,.modal-foot{background:var(--surface);z-index:1;position:sticky}.modal-head{top:0}.modal-foot{bottom:0}.modal-foot .btn{flex:auto}.form-grid{grid-template-columns:1fr;gap:14px}.toasts{max-width:none;bottom:12px;left:12px;right:12px}.card-head{flex-wrap:wrap;padding:13px 15px}.card-body{padding:15px}.card-head>.row{flex-wrap:wrap;width:100%;margin-left:0}.row{flex-wrap:wrap;min-width:0}.row>*,.row .input,.row .select{min-width:0}.job{padding:13px}.btn{min-height:38px}.btn-sm{min-height:32px;padding:6px 11px}.btn-icon{min-width:38px;min-height:38px}.crumbs{scrollbar-width:none;flex-wrap:nowrap;padding-bottom:2px;overflow-x:auto}.crumbs::-webkit-scrollbar{display:none}input,select,textarea{font-size:16px}.input,.select{padding:10px 12px}.textarea{font-size:13px}}@media (width<=560px){.content{padding:12px}.topbar{padding:0 12px}.topbar h1{font-size:14.5px}.topbar>div:first-of-type{min-width:0}.topbar h1{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.stat-grid{grid-template-columns:1fr}.brand{padding:15px 16px 13px}.m-item-actions .btn{min-width:76px}.table-wrap table.responsive td[data-label]:before{width:66px}}.menu-btn[data-v-b2dbb7f8]{display:none}@media (width<=860px){.menu-btn[data-v-b2dbb7f8]{display:inline-flex}}
