:root{--blue:#1478b8;--blue-deep:#0c4f78;--blue-soft:#e7f3fa;--ink:#17324a;--muted:#5e7588;--line:#d5e4ef;--bg:#f3f7fb;--card:#fff;--danger:#c44747;--ok:#1d8a5b;color:var(--ink);background:var(--bg);font-family:Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}*{box-sizing:border-box}body{min-height:100vh;margin:0}button,input,textarea,select{font:inherit;color:inherit}a{color:inherit;text-decoration:none}.login-page{background:linear-gradient(160deg, #1478b829, transparent 42%), var(--bg);justify-content:center;align-items:center;min-height:100vh;display:flex}.login-card{background:var(--card);border:1px solid var(--line);border-radius:18px;width:400px;max-width:calc(100% - 32px);padding:32px 28px 24px;box-shadow:0 16px 40px #0c4f7814}.brand{align-items:center;gap:12px;margin-bottom:22px;display:flex}.brand-mark{background:var(--blue);color:#fff;border-radius:12px;place-items:center;width:42px;height:42px;font-weight:700;display:grid}.brand h1,.topbar h1,.panel h2{margin:0;font-weight:700}.brand p,.hint,.muted{color:var(--muted)}.brand p{margin:4px 0 0;font-size:13px}.shell{min-height:100vh;display:flex}.sider{background:var(--blue-deep);color:#fff;flex-shrink:0;width:220px;padding:22px 14px}.sider-title{padding:0 10px 18px;font-size:18px;font-weight:700}.sider-sub{opacity:.75;margin-top:4px;font-size:12px;font-weight:400;display:block}.menu{flex-direction:column;gap:4px;display:flex}.menu a{color:#ffffffdb;border-radius:10px;padding:10px 12px}.menu a.active,.menu a:hover{color:#fff;background:#ffffff24}.workspace{flex-direction:column;flex:1;min-width:0;display:flex}.topbar{background:var(--card);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;height:64px;padding:0 24px;display:flex}.topbar h1{font-size:18px}.who{align-items:center;gap:10px;display:flex}.avatar,.avatar-img,.thumb{background:var(--blue-soft);width:36px;height:36px;color:var(--blue-deep);object-fit:cover;border-radius:50%;place-items:center;display:grid;overflow:hidden}.content{padding:24px}.stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-bottom:16px;display:grid}.stat,.panel{background:var(--card);border:1px solid var(--line);border-radius:14px}.stat{padding:16px 18px}.stat b{color:var(--blue-deep);margin-top:8px;font-size:28px;display:block}.panel{margin-top:16px;padding:18px}.panel h2{margin-bottom:12px;font-size:16px}.toolbar,.pager,.actions{align-items:center;gap:8px;display:flex}.toolbar{margin-bottom:12px}.spacer{flex:1}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--line);vertical-align:middle;padding:10px 8px;font-size:14px}th{color:var(--muted);font-size:13px;font-weight:600}.clip{text-overflow:ellipsis;white-space:nowrap;max-width:220px;overflow:hidden}.btn{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:8px;padding:8px 12px}.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}.btn.danger{color:var(--danger);background:#fff7f7;border-color:#f0cfcf}.btn:disabled{opacity:.6;cursor:not-allowed}.field{flex-direction:column;gap:6px;margin-bottom:12px;display:flex}.field span{color:var(--muted);font-size:13px}input,textarea,select{border:1px solid var(--line);background:#fff;border-radius:8px;outline:none;width:100%;padding:9px 10px}textarea{resize:vertical;min-height:88px}input:focus,textarea:focus,select:focus{border-color:var(--blue)}.grid-2{grid-template-columns:1fr 1fr;gap:12px;display:grid}.preview{object-fit:cover;background:var(--blue-soft);border-radius:10px;width:100%;max-height:140px;margin-bottom:8px}.photo-row{object-fit:cover;background:var(--blue-soft);border-radius:4px;width:28px;height:36px;display:block}.photo-form{object-fit:cover;background:var(--blue-soft);border-radius:6px;width:84px;height:108px;display:block}.photo-row-empty,.photo-form-empty{color:var(--blue-deep);place-items:center;font-weight:700;display:grid;overflow:hidden}.photo-row-empty{font-size:12px}.photo-form-empty{font-size:18px}.track-dialog{width:640px}.timeline{max-height:360px;margin:0 0 16px;padding:4px 0 0;list-style:none;overflow:auto}.timeline li{border-left:2px solid #d5e7f3;margin-left:8px;padding:0 0 16px 18px;position:relative}.timeline li:last-child{border-left-color:#0000;padding-bottom:0}.timeline .dot{background:var(--blue);border-radius:50%;width:8px;height:8px;position:absolute;top:4px;left:-5px}.timeline-body{align-items:flex-start;gap:10px;display:flex}.timeline time{width:148px;color:var(--muted);flex:none;font-size:12px;line-height:28px}.timeline-body p{flex:1;margin:4px 0 0;line-height:1.5}.track-form{align-items:center;gap:8px;margin-bottom:12px;display:flex}.track-form input{flex:1;width:auto;min-width:0}.error{color:var(--danger);margin:8px 0;font-size:13px}.ok{color:var(--ok);font-size:13px}.hint{margin-top:12px;font-size:13px}.mask{background:#10273861;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.dialog{background:#fff;border-radius:16px;width:560px;max-width:100%;max-height:calc(100vh - 48px);padding:18px 18px 14px;overflow:auto}.dialog h3{margin:0 0 14px}.empty{color:var(--muted);padding:18px 0}@media (width<=960px){.shell{flex-direction:column}.sider{width:auto}.menu{flex-flow:wrap}.stats,.grid-2{grid-template-columns:1fr}}
