:root{--canvas:#f2f5f9;--surface:#ffffff;--surface-soft:#f7f9fc;--navy:#1d3557;--navy-strong:#142943;--blue:#2f6fd0;--blue-dark:#2358ad;--blue-soft:#e9f1fc;--cyan:#5fbce0;--ink:#22303f;--muted:#6b7a8c;--line:#e3e8ee;--line-strong:#c9d4e0;--success:#27875f;--success-soft:#e6f4ec;--warning:#b97520;--warning-soft:#fdf3e0;--danger:#c9435a;--danger-soft:#fdebec;--radius:8px;--shadow:0 1px 2px rgba(20,41,67,.05),0 6px 20px rgba(20,41,67,.06);font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans SC,Segoe UI,sans-serif;font-size:14px;line-height:1.5;color:var(--ink)}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--canvas);min-height:100%}#root{min-height:100vh}button{font:inherit;cursor:pointer}input,select,textarea{font:inherit}a{color:var(--blue);text-decoration:none}h1,h2,h3,h4{margin:0;letter-spacing:0}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-thumb{background:#b9c6d4;border-radius:6px}::-webkit-scrollbar-track{background:transparent}.topbar{position:sticky;top:0;z-index:60;background:var(--navy-strong);color:#fff;box-shadow:0 3px 14px #10203459}.topbar-in{max-width:1400px;margin:0 auto;display:flex;align-items:center;gap:18px;height:60px;padding:0 20px}.brand{display:flex;align-items:center;gap:10px;min-width:170px}.brand-mark{display:grid;place-items:center;width:36px;height:36px;border-radius:6px;background:#eaf4ff;color:var(--navy);font-weight:800;font-size:15px;border:1px solid #9ed6ee}.brand-text strong{display:block;font-size:15px;color:#fff;line-height:1.2}.brand-text span{font-size:10.5px;color:#9db8d4}.main-nav{display:flex;gap:2px;flex-wrap:wrap}.main-nav a{display:flex;align-items:center;gap:6px;padding:8px 12px;border-radius:6px;color:#c3d5e8;font-size:13.5px}.main-nav a:hover{background:#254567;color:#fff}.main-nav a.active{background:#f2f8ff;color:var(--blue-dark);font-weight:600}.top-actions{margin-left:auto;display:flex;align-items:center;gap:8px}.icon-btn{display:grid;place-items:center;width:34px;height:34px;border:0;border-radius:6px;background:transparent;color:#9fb6cd}.topbar .icon-btn{color:#c3d5e8}.icon-btn:hover{background:#ffffff1f}.bell-wrap{position:relative}.bell-dot{position:absolute;top:3px;right:3px;min-width:16px;height:16px;padding:0 4px;border-radius:9px;background:var(--danger);color:#fff;font-size:10px;font-weight:700;display:grid;place-items:center}.avatar{display:grid;place-items:center;width:32px;height:32px;border-radius:50%;background:#3b5a80;color:#fff;font-size:13px;font-weight:700;cursor:pointer;border:1px solid #5a7ca3}.avatar:hover{background:#4d6f98}.user-menu{position:absolute;top:48px;right:0;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);min-width:190px;padding:6px;z-index:80}.user-menu .um-head{padding:10px 12px;border-bottom:1px solid var(--line);margin-bottom:4px}.user-menu .um-head strong{display:block;font-size:14px;color:var(--ink)}.user-menu .um-head span{font-size:11.5px;color:var(--muted)}.user-menu button,.user-menu a{display:flex;align-items:center;gap:8px;width:100%;padding:9px 12px;border:0;background:transparent;border-radius:7px;color:#3a4a5c;font-size:13px;text-align:left}.user-menu button:hover,.user-menu a:hover{background:var(--surface-soft)}.page{min-height:100vh;display:flex;flex-direction:column}.page-main{flex:1;width:100%;max-width:1400px;margin:0 auto;padding:26px 20px 80px}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;margin-bottom:20px;flex-wrap:wrap}.page-head h1{font-size:24px;font-weight:700;color:#1b2a3a}.page-head .sub{margin-top:4px;color:var(--muted);font-size:13px}.page-actions{display:flex;gap:8px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;gap:7px;border-radius:7px;border:1px solid transparent;padding:8px 14px;font-size:13.5px;font-weight:600;transition:all .15s;white-space:nowrap}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--blue);color:#fff;box-shadow:0 1px 2px #2358ad59}.btn-primary:hover{background:var(--blue-dark)}.btn-ghost{background:#fff;border-color:var(--line-strong);color:#45566a}.btn-ghost:hover{border-color:var(--blue);color:var(--blue)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover{filter:brightness(.94)}.btn-soft{background:var(--blue-soft);color:var(--blue-dark)}.btn-soft:hover{background:#dce9fa}.btn-sm{padding:5px 10px;font-size:12.5px}.btn-block{width:100%;justify-content:center}.panel{background:var(--surface);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);overflow:hidden}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 18px;border-bottom:1px solid var(--line)}.panel-head h2{font-size:15.5px;font-weight:650;color:#22303f}.panel-sub{font-size:12px;color:var(--muted)}.panel-tools{display:flex;gap:7px;align-items:center;flex-wrap:wrap}.panel-body{padding:18px}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;min-width:640px}th{background:var(--surface-soft);font-size:11.5px;text-transform:none;color:#7a8798;font-weight:600;text-align:left;padding:10px 14px;border-bottom:1px solid var(--line);white-space:nowrap}td{padding:11px 14px;border-bottom:1px solid #eef1f5;font-size:13px;vertical-align:middle}tr:last-child td{border-bottom:0}tr:hover td{background:#fafcff}.item-name-cell strong{display:block;font-size:13.5px;color:#22303f}.item-name-cell span{display:block;font-size:11.5px;color:var(--muted);margin-top:2px}.text-btn{border:0;background:none;color:var(--blue);padding:4px 6px;font-size:12.5px;border-radius:5px}.text-btn:hover{background:var(--blue-soft)}.text-btn.danger{color:var(--danger)}.text-btn.danger:hover{background:var(--danger-soft)}.row-actions{display:flex;gap:2px;white-space:nowrap}.badge{display:inline-flex;align-items:center;min-height:22px;padding:2px 9px;border-radius:5px;font-size:11.5px;font-weight:650;white-space:nowrap}.st-in_stock{background:var(--success-soft);color:var(--success)}.st-borrowed{background:var(--warning-soft);color:var(--warning)}.st-reviewing{background:#eef2fb;color:#4a5f8f}.st-out_stock{background:#eef1f4;color:#5d6b7a}.st-archived{background:#f0f0f4;color:#71717a}.st-draft{background:#eef1f4;color:#6d7885}.st-void{background:#f0f0f4;color:#8b8b93;text-decoration:line-through}.st-lost{background:var(--danger-soft);color:var(--danger)}.st-destroyed{background:#2b2b31;color:#e8e8ec}.ex-expiring{background:var(--warning-soft);color:var(--warning)}.ex-expired{background:var(--danger-soft);color:var(--danger)}.ex-overdue{background:var(--danger);color:#fff}.op-borrow{background:var(--warning-soft);color:var(--warning)}.op-return,.op-inbound,.op-create,.op-import{background:var(--success-soft);color:var(--success)}.op-outbound{background:#eef1f4;color:#5d6b7a}.op-review,.op-review_end{background:#eef2fb;color:#4a5f8f}.op-move{background:#e6f4fe;color:#2470a8}.op-archive{background:#f0f0f4;color:#71717a}.op-void,.op-destroy{background:#f0f0f4;color:#8b8b93}.op-lost{background:var(--danger-soft);color:var(--danger)}.op-adjust,.op-update{background:#eef2fb;color:#4a5f8f}.tag-badge{display:inline-block;padding:1px 8px;background:var(--surface-soft);border:1px solid var(--line);border-radius:20px;font-size:11.5px;color:#55677c;margin-right:4px}.field{display:block;margin-bottom:13px;min-width:0}.field-label{display:block;font-size:12.5px;color:#4c5e73;margin-bottom:5px;font-weight:600}.field .req{color:var(--danger);font-style:normal;margin-left:2px}.field-hint{display:block;font-size:11.5px;color:#96a2b2;margin-top:4px}input[type=text],input[type=password],input[type=number],input[type=date],input[type=email],input[type=tel],select,textarea{width:100%;border:1px solid var(--line-strong);border-radius:7px;background:#fff;color:var(--ink);padding:8px 11px;font-size:13.5px;outline:0;transition:border .15s,box-shadow .15s}input:focus,select:focus,textarea:focus{border-color:#7ba6dd;box-shadow:0 0 0 3px #2f6fd01f}textarea{resize:vertical;min-height:72px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 16px}.form-grid .full-col{grid-column:1/-1}.checkbox{display:flex;align-items:center;gap:8px;font-size:13.5px;color:#33455c;cursor:pointer;-webkit-user-select:none;user-select:none}.checkbox input{width:16px;height:16px;accent-color:var(--blue)}.seg{display:inline-flex;border:1px solid var(--line-strong);border-radius:8px;overflow:hidden}.seg button{padding:6px 13px;border:0;background:#fff;font-size:12.5px;color:#5a6b7f}.seg button.active{background:var(--blue);color:#fff}.filter-bar{display:flex;align-items:flex-end;gap:10px;padding:14px 16px;flex-wrap:wrap}.filter-bar .field{margin:0}.filter-bar input,.filter-bar select{min-width:130px}.search-box{position:relative;flex:1;min-width:200px}.search-box input{padding-left:34px}.search-box .search-ic{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:#93a1b2}.summary-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;margin-bottom:18px}.summary-card{background:#fff;border:1px solid var(--line);border-radius:11px;padding:15px 17px;display:flex;align-items:center;gap:13px;box-shadow:var(--shadow)}.summary-icon{width:40px;height:40px;border-radius:9px;display:grid;place-items:center;flex:0 0 40px}.summary-card .sc-body{min-width:0}.summary-card .sc-label{font-size:12px;color:var(--muted)}.summary-card .sc-value{font-size:23px;font-weight:750;line-height:1.15;color:#1b2a3a}.summary-card .sc-foot{font-size:11px;color:#9aa6b5}.ic-blue{background:var(--blue-soft);color:var(--blue)}.ic-amber{background:var(--warning-soft);color:var(--warning)}.ic-red{background:var(--danger-soft);color:var(--danger)}.ic-green{background:var(--success-soft);color:var(--success)}.ic-gray{background:#eef1f4;color:#5d6b7a}.ic-navy{background:#e4ebf5;color:var(--navy)}.dash-grid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:16px;align-items:start}.dash-main,.dash-side{display:grid;gap:16px;min-width:0}.chart-row{display:flex;align-items:center;gap:10px;margin:7px 0}.chart-row .chart-name{width:96px;font-size:12.5px;color:#4c5e73;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chart-row .chart-bar{flex:1;height:14px;background:#eef2f7;border-radius:7px;overflow:hidden}.chart-row .chart-fill{height:100%;background:linear-gradient(90deg,#5f9be0,#2f6fd0);border-radius:7px}.chart-row .chart-val{width:40px;font-size:12px;color:#55677c;font-weight:700}.list-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 0;border-bottom:1px solid #eef1f5}.list-row:last-child{border-bottom:0}.list-row .lr-main{min-width:0}.list-row .lr-main strong,.list-row .lr-main span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-row .lr-main strong{font-size:13px;color:#2b3a4c}.list-row .lr-main span{font-size:11.5px;color:var(--muted)}.list-row .lr-side{flex:0 0 auto}.tree-node{border-top:1px solid #eef1f5}.tree-node:first-child{border-top:0}.tree-node-head{display:flex;align-items:center;gap:7px;padding:10px 14px 10px 0;background:#fff}.tree-node-head:hover{background:#fafcff}.tree-expander{width:26px;height:26px;border:0;background:none;color:#6b7a8c;border-radius:5px}.tree-expander:hover{background:var(--blue-soft);color:var(--blue)}.tree-label{flex:1;min-width:0;border:0;background:none;text-align:left;font-size:13.5px;font-weight:600;color:#2b3a4c;padding:4px 0}.tree-count{font-size:11.5px;color:var(--muted)}.tree-actions{display:flex;gap:2px}.tree-children{padding-left:22px}.empty{display:flex;flex-direction:column;align-items:center;gap:10px;padding:46px 20px;color:#96a2b2;font-size:13px}.empty svg{color:#c3cedb}.loading{display:flex;align-items:center;gap:10px;justify-content:center;padding:60px;color:#8594a5}.spinner{width:22px;height:22px;border:2.5px solid #dbe4ee;border-top-color:var(--blue);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#1220328c;display:grid;place-items:center;padding:20px;z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal{background:#fff;border-radius:13px;width:min(480px,100%);max-height:88vh;display:flex;flex-direction:column;box-shadow:0 18px 50px #0d1c304d}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--line)}.modal-head h2{font-size:16px;font-weight:700}.modal-body{padding:18px;overflow-y:auto}.modal-foot{padding:13px 18px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.confirm-msg{color:#3c4d61;margin:0;font-size:13.5px;line-height:1.7}.drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#12203266;z-index:90}.drawer{position:fixed;top:0;right:0;bottom:0;background:#fff;box-shadow:-10px 0 40px #0d1c302e;display:flex;flex-direction:column;z-index:91}.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;border-bottom:1px solid var(--line)}.drawer-head h3{font-size:15px;font-weight:700}.drawer-body{padding:16px 18px;overflow-y:auto;flex:1}.toasts{position:fixed;top:70px;right:18px;z-index:200;display:grid;gap:9px;max-width:min(380px,90vw)}.toast{display:flex;align-items:center;gap:9px;background:#fff;border:1px solid var(--line);border-left:4px solid var(--blue);border-radius:9px;padding:10px 13px;box-shadow:var(--shadow);font-size:13px;color:#3a4a5c;animation:slidein .22s ease}.toast.error{border-left-color:var(--danger)}.toast.success{border-left-color:var(--success)}.toast svg{flex:0 0 auto}.toast button{border:0;background:none;color:#9aa6b5;margin-left:auto;padding:2px}@keyframes slidein{0%{transform:translate(20px);opacity:0}}.pagination{display:flex;align-items:center;justify-content:center;gap:12px;padding:13px;border-top:1px solid var(--line);color:#66788c;font-size:12.5px}.pagination button{width:30px;height:30px;display:grid;place-items:center;border:1px solid var(--line-strong);background:#fff;border-radius:6px;color:#55677c}.pagination button:disabled{opacity:.4}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);padding:0 14px;overflow-x:auto}.tabs button{border:0;background:none;padding:12px 14px;font-size:13.5px;color:#64748b;border-bottom:2.5px solid transparent;white-space:nowrap}.tabs button.active{color:var(--blue-dark);font-weight:650;border-bottom-color:var(--blue)}.detail-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}.detail-head .dh-title{min-width:0}.detail-head h1{font-size:21px;font-weight:750;color:#1b2a3a;word-break:break-all}.detail-grid{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:16px;align-items:start}.detail-stack{display:grid;gap:16px;min-width:0}.info-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 20px;padding:16px 18px}.info-item{min-width:0}.info-item dt{font-size:11.5px;color:#8b99a9;margin-bottom:2px}.info-item dd{margin:0;font-size:13.5px;color:#233345;font-weight:550;word-break:break-all}.ops-bar{display:flex;flex-wrap:wrap;gap:8px;padding:14px 18px}.timeline-list{padding:0 18px 6px}.tl-row{display:flex;gap:12px;padding:12px 0;border-bottom:1px solid #eef1f5}.tl-row:last-child{border-bottom:0}.tl-ic{width:32px;height:32px;border-radius:8px;display:grid;place-items:center;flex:0 0 32px}.tl-main{flex:1;min-width:0;font-size:13px;color:#33455c}.tl-main b{font-weight:650}.tl-main .muted{color:#93a0b0;font-size:12px;display:block;margin-top:2px}.tl-time{font-size:11.5px;color:#9aa6b5;white-space:nowrap;padding-top:2px}.diff-box{background:var(--surface-soft);border:1px solid var(--line);border-radius:8px;padding:10px 13px;margin:8px 0}.diff-box .diff-field{font-size:12px;color:#7a8a9d;font-weight:650}.diff-box .diff-v{font-size:13px;margin-top:3px;word-break:break-all}.diff-box .diff-old{color:#b06a2a;text-decoration:line-through}.diff-box .diff-new{color:var(--success)}.login-wrap{min-height:100vh;display:grid;place-items:center;background:radial-gradient(1100px 500px at 80% -10%,#24466e,transparent),linear-gradient(160deg,#142943,#1d3557);padding:20px}.login-card{width:min(410px,100%);background:#fff;border-radius:16px;padding:36px 34px;box-shadow:0 24px 70px #05102080}.login-brand{display:flex;align-items:center;gap:11px;margin-bottom:26px}.login-brand .brand-mark{width:42px;height:42px;font-size:17px}.login-brand strong{font-size:18px;color:#1b2a3a}.login-brand span{font-size:11.5px;color:var(--muted)}.login-card .btn{width:100%;justify-content:center;padding:11px;font-size:14.5px;margin-top:8px}.login-tip{font-size:12px;color:var(--muted);text-align:center;margin-top:16px}.scan-page{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;align-items:start}.viewfinder{position:relative;width:100%;aspect-ratio:1/1;max-width:380px;margin:0 auto;background:#0e1a2b;border-radius:14px;overflow:hidden}.viewfinder video{width:100%;height:100%;object-fit:cover}.viewfinder .vf-frame{position:absolute;top:18%;right:18%;bottom:18%;left:18%;border:2.5px solid rgba(95,188,224,.9);border-radius:16px;pointer-events:none}.viewfinder .vf-corner{position:absolute;width:22px;height:22px;border:3px solid #5fbce0}.viewfinder .vf-tip{position:absolute;left:0;right:0;bottom:-34px;color:#9fb6cd;font-size:12px;text-align:center}.scan-form{margin-top:16px}.scan-result{animation:slidein .2s ease}.print-area{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.label-card{border:2px dashed #c0cbda;border-radius:10px;padding:16px;background:#fff;page-break-inside:avoid}.label-card .lc-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.label-card h3{margin:0 0 3px;font-size:16px;color:#1b2a3a}.label-card .lc-code{font-size:15px;font-weight:750;color:var(--blue-dark);letter-spacing:.5px}.label-card .lc-meta{font-size:12px;color:#55677c;margin-top:6px}.label-card .lc-meta b{color:#33455c;font-weight:600}@media print{body *{visibility:hidden}.print-area,.print-area *{visibility:visible}.print-area{position:absolute;top:0;right:0;bottom:0;left:0;grid-template-columns:repeat(3,1fr);gap:10px}.label-card{border:1.5px solid #9aa6b5}.no-print,.topbar{display:none!important}}.noti-row{display:flex;gap:12px;padding:13px 18px;border-bottom:1px solid #eef1f5;cursor:pointer}.noti-row:hover{background:#fafcff}.noti-row.unread{background:#f3f8ff}.noti-ic{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;flex:0 0 34px}.noti-main{flex:1;min-width:0}.noti-main strong{display:block;font-size:13.5px;color:#2b3a4c}.noti-main .noti-body{font-size:12.5px;color:#5b6c80;margin-top:2px;line-height:1.55}.noti-main time{font-size:11px;color:#9aa6b5;display:block;margin-top:4px}.inline-form{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.inline-form input,.inline-form select{width:auto;flex:1;min-width:130px}.mobile-nav-button{display:none}@media (max-width:980px){.dash-grid{grid-template-columns:1fr}.summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.detail-grid,.scan-page{grid-template-columns:1fr}}@media (max-width:860px){.main-nav{display:none}.mobile-nav-button{display:grid}.mobile-nav-panel{position:fixed;top:0;right:0;bottom:0;left:0;background:#12203280;z-index:95}.mobile-nav-panel .mnp-in{position:absolute;left:0;top:0;bottom:0;width:min(300px,82vw);background:#142943;color:#fff;padding:20px 14px;overflow-y:auto}.mobile-nav-panel a{display:flex;align-items:center;gap:10px;color:#c3d5e8;padding:11px 12px;border-radius:8px;font-size:14px}.mobile-nav-panel a.active{background:#f2f8ff;color:var(--blue-dark);font-weight:650}.mobile-nav-panel .mnp-close{position:absolute;right:12px;top:12px;color:#9db8d4}.topbar-in{padding:0 12px;gap:10px}.brand{min-width:0}}@media (max-width:600px){.page-main{padding:16px 12px 70px}.summary-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.summary-card{padding:11px;gap:10px}.summary-icon{width:32px;height:32px;flex-basis:32px}.summary-card .sc-value{font-size:19px}.form-grid{grid-template-columns:1fr}.table-wrap{min-width:0}.info-grid{grid-template-columns:1fr;gap:10px}.print-area{grid-template-columns:1fr}.filter-bar .search-box{min-width:100%}.page-head h1{font-size:20px}.modal{padding:0}.brand-text span{display:none}}@media print{.no-print{display:none!important}}
