:root{font-family:Inter,PingFang SC,Microsoft YaHei,system-ui,sans-serif;color:#172033;background:#f5f7fb}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}.shell{display:flex;min-height:100vh}.sidebar{width:230px;background:#111827;color:#fff;padding:24px 18px;display:flex;flex-direction:column;position:fixed;inset:0 auto 0 0}.brand{font-size:20px;font-weight:800;margin-bottom:30px}.brand span{font-size:11px;background:#334155;border-radius:6px;padding:3px 6px;margin-left:6px}.sidebar nav{display:grid;gap:8px}.sidebar a{color:#b8c1d1;text-decoration:none;padding:11px 12px;border-radius:9px}.sidebar a.router-link-active{background:#263248;color:#fff}.whoami{margin:auto 0 10px;color:#94a3b8;font-size:13px}.logout{background:transparent;color:#94a3b8;border:1px solid #334155;padding:10px;border-radius:9px}.content{margin-left:230px;padding:32px;width:calc(100% - 230px)}.page-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:22px}.page-head h1{margin:0 0 6px;font-size:28px}.page-head p,.muted{margin:0;color:#718096}.page-head button,.toolbar button,.form-grid button,.login-card button{border:0;background:#111827;color:#fff;padding:10px 16px;border-radius:9px;cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}.metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin-bottom:18px}.metric{background:#fff;border:1px solid #e7ebf2;border-radius:14px;padding:18px;display:grid;gap:8px}.metric span{color:#718096;font-size:13px}.metric strong{font-size:25px}.metric.primary{background:#111827;color:#fff}.metric small{color:#94a3b8;font-size:12px}.metric.primary small{color:#cbd5e1}.panel{background:#fff;border:1px solid #e7ebf2;border-radius:14px;padding:20px;margin-bottom:18px}.panel h2{margin-top:0}.toolbar{display:flex;gap:10px;margin:14px 0}.toolbar input{width:340px}.toolbar input,.form-grid input,.form-grid select,.login-card input{border:1px solid #d8dee9;border-radius:9px;padding:10px 12px;background:#fff}.form-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.table-wrap{overflow:auto;padding:0}table{border-collapse:collapse;width:100%}th,td{text-align:left;padding:14px 16px;border-bottom:1px solid #edf0f5}th{font-size:12px;color:#718096;background:#fafbfc}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.tag{background:#eef2f7;padding:5px 8px;border-radius:99px;font-size:12px}.empty{text-align:center;color:#94a3b8;padding:32px}.click-row{cursor:pointer}.click-row:hover{background:#f8fafc}.ghost{background:transparent;color:#334155;border:1px solid #d8dee9;padding:6px 10px;border-radius:8px;cursor:pointer;margin-bottom:10px}.timeline{margin:0;padding-left:18px;display:grid;gap:10px}.timeline li{padding-bottom:8px}.login-page{min-height:100vh;display:grid;place-items:center;background:#eef2f7}.login-card{width:380px;background:#fff;padding:30px;border-radius:16px;box-shadow:0 12px 40px #0001;display:grid;gap:12px}.login-card h1{margin:0}.login-card p{margin:0 0 10px;color:#718096}.oauth-link{display:block;text-align:center;background:#2f6fed;color:#fff;text-decoration:none;padding:12px;border-radius:10px;font-weight:600}.error{color:#c53030;font-size:13px}.connection{display:flex;justify-content:space-between;align-items:center;border-left:4px solid #f59e0b;padding:12px 14px;background:#fff8e8;margin-bottom:14px}.connection.ok{border-color:#16a34a;background:#effbf3}.connection span{color:#64748b}@media(max-width:960px){.form-grid{grid-template-columns:1fr 1fr}}.qr-img{width:180px;height:180px;background:#fff;padding:8px;border:1px solid #e7ebf2;border-radius:12px}.file-list{list-style:none;padding:0;margin:12px 0 0;display:grid;gap:8px}.file-list li{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.perm-item{display:flex;gap:8px;align-items:center;font-size:13px;color:#334155}.scan-form{text-align:left;display:grid;gap:10px;margin-top:20px}.scan-form h2{margin:0;font-size:16px}.scan-form label{display:grid;gap:6px;font-size:13px;color:#475569}.scan-form select,.scan-form button{width:100%}.scan-result{margin:0;font-weight:600}.btn-link,.scan-actions .btn{display:inline-block;background:#111827;color:#fff;text-decoration:none;padding:10px 16px;border-radius:9px}.scan-actions .ghost-link{display:inline-block;color:#334155;border:1px solid #d8dee9;padding:10px 16px;border-radius:9px;text-decoration:none}.scan-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px;justify-content:center}.scan-page,.print-page{min-height:100vh;display:grid;place-items:center;background:#eef2f7;padding:24px}.scan-card,.print-card{background:#fff;padding:28px;border-radius:16px;text-align:center;max-width:420px;box-shadow:0 12px 40px #0001}.print-card img{width:220px;height:220px}.print-toolbar{position:fixed;top:16px;right:16px;display:flex;gap:10px}.print-toolbar a,.print-toolbar button{background:#111827;color:#fff;border:0;padding:10px 16px;border-radius:9px;text-decoration:none;cursor:pointer}@media print{.print-toolbar{display:none!important}.print-page{background:#fff}.print-card{box-shadow:none}}.row-actions{white-space:nowrap;display:flex;gap:6px}.row-actions .ghost{margin-bottom:0}.ghost.danger{color:#c53030;border-color:#f3c2c2}.label-page{min-height:100vh;background:#eef2f7;padding:24px}.label-hint{max-width:210mm;margin:0 auto 14px;color:#475569}.label-sheet{width:210mm;margin:0 auto;background:#fff;padding:10mm;display:grid;grid-template-columns:repeat(3,60mm);grid-auto-rows:38mm;gap:4mm;box-shadow:0 12px 40px #0001}.label-card{border:1px dashed #94a3b8;border-radius:2mm;padding:2mm;display:flex;gap:2mm;align-items:center;overflow:hidden;break-inside:avoid}.label-qr{width:26mm;height:26mm;flex:none}.label-body{display:flex;flex-direction:column;gap:1mm;min-width:0}.label-code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:3.4mm}.label-name{font-size:3.2mm;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.label-meta{font-size:2.8mm;color:#475569;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media print{@page{size:A4;margin:8mm}.label-page{background:#fff;padding:0;min-height:0}.label-hint{display:none}.label-sheet{width:auto;margin:0;padding:0;box-shadow:none;gap:3mm}.label-card{border-color:#cbd5e1}}.tabs{display:flex;gap:8px;margin:0 0 16px}.tabs button.ghost{margin-bottom:0}.tabs button.ghost.active{background:#111827;color:#fff;border-color:#111827}.table-wrap select{border:1px solid #d8dee9;border-radius:9px;padding:8px 10px;background:#fff;min-width:160px}.tree-name input{width:100%;min-width:160px}.tree-name{display:flex;gap:8px;align-items:center}.cat-group{background:#f8fafc}.metric{cursor:pointer}.filters{display:flex;flex-wrap:wrap;gap:10px;margin:14px 0;align-items:center}.filters input,.filters select{border:1px solid #d8dee9;border-radius:9px;padding:10px 12px;background:#fff;min-width:160px;width:auto}.filters button{margin-bottom:0}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#11182773;display:grid;place-items:center;z-index:50;padding:16px}.modal-card{width:min(960px,96vw);max-height:92vh;overflow:auto;background:#fff;border-radius:16px;padding:24px;box-shadow:0 20px 60px #0003}.modal-card.wide{width:min(1180px,96vw)}.modal-card h2{margin:0 0 6px}.modal-card .form-grid{margin-top:12px}.form-grid .field,.form-grid label.field{display:grid;gap:6px;font-size:13px;color:#475569;font-weight:600}.form-grid .field input,.form-grid .field select,.form-grid .field textarea{font-weight:400;width:100%}.form-grid textarea,.modal-card textarea{font:inherit;border:1px solid #d8dee9;border-radius:9px;padding:10px 12px;min-height:72px;resize:vertical}.batch-block{margin-top:16px}.batch-toolbar{align-items:center;flex-wrap:wrap}.batch-toolbar .muted{margin-right:auto}.batch-table input{width:100%;min-width:0;border:1px solid #d8dee9;border-radius:8px;padding:8px 10px;background:#fff}.batch-table th,.batch-table td{padding:8px 10px;vertical-align:middle}.field-span-2{grid-column:span 2}.field-span-4{grid-column:1 / -1}.photo-previews{display:flex;flex-wrap:wrap;gap:10px;margin:12px 0}.photo-thumb{display:grid;gap:6px;justify-items:center}.photo-previews img,.photo-preview{width:72px;height:72px;object-fit:cover;border-radius:8px;border:1px solid #e7ebf2}.photo-preview{width:88px;height:88px}.person-picker{position:relative}.person-picker input{width:100%;border:1px solid #d8dee9;border-radius:9px;padding:10px 12px;background:#fff}.person-picker ul{position:absolute;z-index:3;left:0;right:0;background:#fff;border:1px solid #d8dee9;border-radius:9px;margin:4px 0 0;padding:6px;max-height:220px;overflow:auto;list-style:none;box-shadow:0 8px 24px #0001}.person-picker li{padding:8px 10px;border-radius:6px;cursor:pointer;font-weight:400}.person-picker li:hover{background:#f8fafc}.remark-cell{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-head button.ghost.danger,.toolbar button.ghost.danger{background:#fff;color:#c53030;border:1px solid #f3c2c2}.dash-hero{background:linear-gradient(90deg,#163f7a,#2d6db5 52%,#4c9ad6);color:#fff;border-radius:14px;padding:20px 24px;display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:16px}.dash-hero h1{margin:0 0 6px;font-size:24px}.dash-hero p{margin:0;color:#d7e7f8;font-size:13px}.dash-hero-total{text-align:right}.dash-hero-total span{display:block;font-size:13px;opacity:.85}.dash-hero-total strong{display:block;font-size:32px;line-height:1.15}.dash-hero-link{display:inline-block;margin-top:8px;color:#fff;background:#fff2;text-decoration:none;padding:6px 12px;border-radius:8px;font-size:13px}.dash-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-bottom:12px}.dash-kpi{background:#fff;color:#172033;border:1px solid #e8eef6;border-radius:12px;padding:16px;text-align:left;display:grid;gap:6px;box-shadow:0 8px 20px #1e3a5f0a;cursor:pointer;margin:0;width:100%}.dash-kpi span{color:#718096;font-size:13px;font-weight:600}.dash-kpi strong{font-size:22px;line-height:1.2}.dash-kpi small{color:#94a3b8;font-size:12px}.dash-kpi.primary{background:#1e4b8f;color:#fff;border-color:#1e4b8f}.dash-kpi.primary span,.dash-kpi.primary small{color:#cfe0f5}.dash-status{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}.dash-chip{background:#eef5fc;color:#2b5c8f;border:0;border-radius:999px;padding:6px 12px;font-size:12px;margin:0;cursor:pointer}.dash-card{background:#fff;border:1px solid #e8eef6;border-radius:12px;padding:16px 18px;margin-bottom:14px;box-shadow:0 8px 24px #1e3a5f0a}.dash-card h2{margin:0 0 12px;font-size:15px;color:#1e3a5f}.dash-card-head{display:flex;justify-content:space-between;gap:12px;align-items:baseline;margin-bottom:8px;flex-wrap:wrap}.dash-card-head h2{margin:0}.dash-grid-3,.dash-grid-2{display:grid;gap:14px}.dash-grid-3{grid-template-columns:1.15fr 1fr 1fr}.dash-grid-2{grid-template-columns:1fr 1fr}.dash-card.table-wrap{padding:16px 0 0}.dash-card.table-wrap h2{padding:0 18px}.dash .table-wrap th{background:#eef5fc;color:#2b5c8f}@media(max-width:1200px){.dash-kpis{grid-template-columns:repeat(3,1fr)}.dash-grid-3,.dash-grid-2{grid-template-columns:1fr}.dash-hero{flex-direction:column;align-items:flex-start}.dash-hero-total{text-align:left}}.sidebar{z-index:60;overflow:hidden}.side-nav{display:grid;gap:4px;flex:1;min-height:0;overflow:auto;align-content:start}.nav-label{margin:16px 12px 6px;font-size:11px;letter-spacing:.12em;color:#64748b}.nav-label:first-child{margin-top:4px}.side-foot{margin-top:auto;display:grid;gap:8px;padding-top:12px}.whoami{margin:0}.brand-row{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.brand-row .brand{margin-bottom:18px}.sidebar-close,.topbar,.tabbar,.nav-mask{display:none}.icon-btn{border:0;background:transparent;color:inherit;width:44px;height:44px;border-radius:10px;font-size:22px;line-height:1;cursor:pointer;padding:0}.icon-btn.light{color:#fff}.asset-cards{display:none}body.nav-locked{overflow:hidden}.shell.is-phone{display:block}.shell.is-phone .topbar{display:flex;position:sticky;top:0;z-index:40;align-items:center;gap:8px;background:#111827;color:#fff;padding:8px 10px;padding-top:max(8px,env(safe-area-inset-top,0px))}.shell.is-phone .topbar-title{flex:1;font-size:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shell.is-phone .topbar-user{font-size:12px;color:#cbd5e1;max-width:88px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shell.is-phone .topbar .icon-btn{color:#fff}.shell.is-phone .nav-mask{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#11182775;z-index:50}.shell.is-phone .sidebar{position:fixed;inset:0 auto 0 0;width:min(300px,88vw);height:100%;max-height:100dvh;transform:translate3d(-100%,0,0);visibility:hidden;pointer-events:none;box-shadow:none;transition:transform .2s ease,visibility .2s ease;padding-top:max(18px,env(safe-area-inset-top,0px));overflow:auto}.shell.is-phone.menu-open .sidebar{transform:translateZ(0);visibility:visible;pointer-events:auto;box-shadow:16px 0 40px #0005}.shell.is-phone .sidebar-close{display:inline-flex;align-items:center;justify-content:center;flex:none;margin-top:-4px}.shell.is-phone .side-nav a,.shell.is-phone .tabbar a,.shell.is-phone .tabbar button{min-height:44px;display:flex;align-items:center}.shell.is-phone .content{margin-left:0;width:100%;padding:12px 12px 88px;padding-bottom:calc(88px + env(safe-area-inset-bottom,0px))}.shell.is-phone .tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:40;background:#fff;border-top:1px solid #e7ebf2;padding-bottom:env(safe-area-inset-bottom,0px)}.shell.is-phone .tabbar a,.shell.is-phone .tabbar button{flex:1;justify-content:center;color:#64748b;text-decoration:none;border:0;background:transparent;font-size:13px;margin:0;padding:10px 4px}.shell.is-phone .tabbar a.router-link-active,.shell.is-phone .tabbar a.tab-active,.shell.is-phone .tabbar button.tab-active{color:#1e4b8f;font-weight:700}.shell.is-phone .desktop-table{display:none}.shell.is-phone .asset-cards{display:grid;gap:10px;margin:12px 0}.shell.is-phone .dash-kpis{grid-template-columns:repeat(2,1fr);gap:8px}.shell.is-phone .dash-grid-3,.shell.is-phone .dash-grid-2{grid-template-columns:1fr}.shell.is-phone .dash-hero{padding:16px;border-radius:12px}.shell.is-phone .dash-hero h1{font-size:18px}.shell.is-phone .dash-hero p{display:none}.shell.is-phone .page-head{flex-direction:column;align-items:stretch;gap:10px}.shell.is-phone .filters{flex-direction:column;align-items:stretch}.shell.is-phone .filters input,.shell.is-phone .filters select,.shell.is-phone .filters button{width:100%;min-width:0}.shell.is-phone .form-grid{grid-template-columns:1fr}.shell.is-phone .kv-table table,.shell.is-phone .kv-table tbody,.shell.is-phone .kv-table tr,.shell.is-phone .kv-table th,.shell.is-phone .kv-table td{display:block;width:100%}@media(hover:hover){.sidebar a:hover{background:#1f2937;color:#fff}}@media(max-width:960px){.page-head{flex-direction:column;align-items:stretch;gap:10px}.page-head h1{font-size:22px}.page-head .toolbar,.toolbar{flex-wrap:wrap}.toolbar input{width:100%}.filters{flex-direction:column;align-items:stretch}.filters input,.filters select,.filters button{width:100%;min-width:0}.form-grid{grid-template-columns:1fr}.field-span-2,.field-span-4{grid-column:auto}.modal-mask{padding:0;align-items:stretch}.modal-card,.modal-card.wide{width:100%;max-height:100vh;border-radius:0;padding:16px}.login-card{width:min(380px,calc(100vw - 32px))}.dash-hero{padding:16px;border-radius:12px}.dash-hero h1{font-size:18px}.dash-hero p{display:none}.dash-hero-total strong{font-size:26px}.dash-kpis{grid-template-columns:repeat(2,1fr);gap:8px}.dash-kpi{padding:12px}.dash-kpi strong{font-size:18px}.dash-card{padding:12px}.desktop-table{display:none}.asset-cards{display:grid;gap:10px;margin:12px 0}.asset-card{display:flex;gap:10px;background:#fff;border:1px solid #e8eef6;border-radius:12px;padding:12px;box-shadow:0 8px 20px #1e3a5f0a}.asset-card-check{flex:none;padding-top:2px}.asset-card-body{min-width:0;flex:1}.asset-card-top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}.asset-card-body p{margin:4px 0 0;font-size:13px}.asset-card-price{font-weight:700}.kv-table table,.kv-table tbody,.kv-table tr,.kv-table th,.kv-table td{display:block;width:100%}.kv-table tr{padding:8px 0;border-bottom:1px solid #edf0f5}.kv-table th{background:transparent;padding:0 0 2px;color:#718096}.kv-table td{padding:0}.remark-cell{max-width:none}.scan-page,.print-page{padding:16px}}@media(max-width:640px){.dash-kpis{grid-template-columns:1fr 1fr}}
