:root{--primary:#6e4bed;--primary-soft:#f0ecff;--ink:#252439;--muted:#8b899c;--line:#eeedf3;--bg:#f7f8fc;--green:#20a282;--red:#d85d70;--shadow:0 3px 16px #24213903}*{box-sizing:border-box}body{margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;font-size:13px;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit}a{color:inherit;text-decoration:none}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.45}button,input,select,textarea,a{outline-offset:3px}button:focus-visible,a:focus-visible{outline:3px solid #d4c7ff}button{border:0;background:none;color:inherit}input,select,textarea{border:1px solid #e4e2ec;border-radius:7px;background:white;padding:10px 12px;color:var(--ink);min-width:0;outline:none}input:focus,select:focus,textarea:focus{border-color:#b5a1f7;box-shadow:0 0 0 3px #6e4bed0b}input[type=checkbox]{accent-color:var(--primary);box-shadow:none;width:15px;height:15px}textarea{resize:vertical;min-height:80px}.icon{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;vertical-align:middle;flex-shrink:0}.btn{min-height:36px;display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:0 14px;border-radius:7px;border:1px solid #e5e2ed;background:white;font-size:12px;white-space:nowrap;transition:background .15s}.btn:hover{background:#f8f6fd}.btn.primary{background:var(--primary);color:white;border-color:var(--primary);box-shadow:0 3px 10px #6e4bed16}.btn.primary:hover{background:#5d3cd7}.btn.danger{color:var(--red)}.btn .icon{width:15px;height:15px}.icon-btn{display:inline-grid;place-items:center;padding:7px;border-radius:6px;color:#9390a6}.icon-btn:hover{background:#f2eefc;color:var(--primary)}.icon-btn .icon{width:16px;height:16px}.text-btn{font-size:12px;color:var(--primary);padding:5px 0}.muted{color:var(--muted)}.tiny{font-size:11px}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.shell{display:flex;min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;width:218px;background:#fff;border-right:1px solid var(--line);display:flex;flex-direction:column;z-index:25;padding:28px 17px}.sidebar-brand{display:flex;align-items:center;gap:10px;padding:0 8px;color:#2d2841}.sidebar-brand img{width:36px;height:36px}.sidebar-brand strong{display:block;font-size:15px;letter-spacing:-.5px}.sidebar-brand small{font-size:9px;letter-spacing:1.7px;color:#a7a2b7;display:block;margin-top:5px}.nav-label{color:#b1adbf;font-size:10px;letter-spacing:1px;margin:40px 14px 13px}.menu{display:flex;flex-direction:column;gap:6px}.nav-item{display:flex;align-items:center;gap:12px;padding:12px 15px;border-radius:8px;color:#858095;font-size:13px}.nav-item .icon{width:17px;height:17px}.nav-item:hover{background:#faf8ff;color:#6f5c96}.nav-item.active{background:var(--primary-soft);color:var(--primary);font-weight:600}.nav-item.active:after{content:'';margin-left:auto;width:5px;height:5px;background:var(--primary);border-radius:50%}.sidebar-bottom{margin-top:auto}.retention-note{padding:17px 13px;background:#faf9fd;border:1px solid #efecf7;border-radius:9px;margin:25px 4px 18px}.retention-note .icon{color:#a597c7;width:16px;height:16px;margin-right:6px}.retention-note strong{font-size:11px;font-weight:550;color:#8b80a1}.retention-note p{font-size:10px;color:#aaa2ba;line-height:1.9;margin:9px 0 0}.sidebar-home{display:flex;align-items:center;justify-content:space-between;color:#a39bb2;padding:8px 13px;font-size:11px}.sidebar-home .icon{width:13px;height:13px}.workspace{margin-left:218px;width:calc(100% - 218px);min-width:0}.topbar{height:78px;background:#fff;border-bottom:1px solid var(--line);padding:0 34px;display:flex;align-items:center;justify-content:space-between}.breadcrumb{font-size:11px;color:#b1aabf;display:flex;align-items:center;gap:13px}.breadcrumb strong{color:#736882;font-weight:500}.top-right{display:flex;align-items:center;gap:20px}.online{font-size:10px;color:#94909f;display:flex;align-items:center;gap:7px}.status-dot{width:6px;height:6px;display:inline-block;background:#2bb18d;border-radius:50%;box-shadow:0 0 0 3px #2bb18d0d}.user{display:flex;align-items:center;gap:10px;font-size:11px}.avatar{background:#eee8fd;color:var(--primary);width:29px;height:29px;display:grid;place-items:center;border-radius:50%;font-size:11px;font-weight:650}.logout{font-size:10px;color:#a8a0b5;padding-left:12px;border-left:1px solid var(--line)}.main{max-width:1600px;padding:31px 34px 35px;margin:auto}.page-heading{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:24px}.page-heading h1{font-size:25px;letter-spacing:-.8px;font-weight:680;margin:0 0 9px}.page-heading p{font-size:11px;color:#a09aaa;margin:0;line-height:1.8}.heading-actions{display:flex;gap:9px}.toolbar{background:#fff;border:1px solid var(--line);border-radius:9px;display:flex;align-items:center;gap:15px;padding:12px 17px;margin-bottom:21px;flex-wrap:wrap}.toolbar[hidden]{display:none}.toolbar .icon{color:#a59bb6;width:15px;height:15px}.date-control{display:flex;align-items:center;gap:8px;color:#b6afc4}.date-control input{border:0;background:transparent;padding:4px 0;font-size:11px;width:115px;box-shadow:none}.presets{display:flex;gap:4px;border-right:1px solid var(--line);padding-right:15px}.preset{font-size:10px;padding:6px 9px;border-radius:5px;color:#a19aaa}.preset.active{background:#f0ebfd;color:var(--primary)}.toolbar select{font-size:11px;min-width:150px;border-color:#eeebf5;padding:7px 9px;margin-left:auto;max-width:230px}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:17px;margin-bottom:21px}.metric{background:white;border:1px solid var(--line);border-radius:10px;padding:21px;box-shadow:var(--shadow)}.metric-top{display:flex;justify-content:space-between;align-items:center;color:#9b94aa;font-size:11px}.metric-icon{width:31px;height:31px;background:#f2edff;color:#9c83df;border-radius:8px;display:grid;place-items:center}.metric:nth-child(2) .metric-icon{background:#eaf7f2;color:#66b79c}.metric:nth-child(3) .metric-icon{background:#edf2fe;color:#91a7df}.metric:nth-child(4) .metric-icon{background:#fff3e8;color:#dbb18a}.metric-number{font-size:31px;letter-spacing:-1px;line-height:1.2;margin:13px 0 10px;font-weight:650;font-variant-numeric:tabular-nums}.metric-note{font-size:10px;color:#b4adbf}.metric-note .icon{width:11px;height:11px;margin-right:5px}.grid-main{display:grid;grid-template-columns:1.9fr 1fr;gap:20px;margin-bottom:21px}.panel{background:white;border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);overflow:hidden}.panel-head{display:flex;justify-content:space-between;align-items:center;gap:15px;padding:21px 23px 14px}.panel-head h2{font-size:13px;margin:0;font-weight:650;display:flex;align-items:center;gap:8px}.panel-head small{font-size:10px;color:#b6aebf}.panel-body{padding:0 23px 22px}.chart-container{height:250px;position:relative;margin-top:10px}.chart-container.donut{height:180px;max-width:210px;margin:7px auto 15px}.chart-empty{height:250px;display:flex;align-items:center;justify-content:center;color:#b0a8bd;font-size:12px;background:repeating-linear-gradient(to bottom,white 0,white 48px,#f6f5fa 49px,#f6f5fa 50px)}.legend{display:flex;justify-content:center;gap:17px;flex-wrap:wrap;font-size:10px;color:#9c94aa}.legend i{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:6px}.panel-foot{font-size:10px;color:#aba4b8;border-top:1px solid #f1eff6;padding:14px 23px;line-height:1.8}.table-wrap{overflow:auto;max-width:100%}table{width:100%;border-collapse:collapse;white-space:nowrap;text-align:left}th{color:#aaa2b7;background:#fcfbfe;font-size:10px;font-weight:500;padding:13px 22px;border-top:1px solid #f4f1f8;border-bottom:1px solid #f1eef5}td{font-size:11px;padding:16px 22px;border-bottom:1px solid #f3f1f7;color:#81788f}tr:last-child td{border-bottom:0}tbody tr:hover{background:#fdfcfe}.link-name{display:block;font-size:12px;font-weight:550;color:#544963;max-width:220px;overflow:hidden;text-overflow:ellipsis}.link-sub{font-size:10px;color:#b2a9c1;margin-top:5px;display:block;max-width:250px;overflow:hidden;text-overflow:ellipsis}.badge{display:inline-flex;align-items:center;gap:5px;padding:4px 8px;border-radius:4px;font-size:10px;line-height:1.5;background:#f2eff9;color:#a395bb}.badge.good{background:#eaf8f2;color:#47a98c}.badge.bad{background:#fff0f2;color:#d58a98}.badge.warn{background:#fff7e9;color:#caab6e}.badge.gray{background:#f1f2f6;color:#a3a3af}.badge .dot{width:4px;height:4px;background:currentColor;border-radius:50%}.table-actions{display:flex;gap:1px;align-items:center}.rank-num{display:inline-grid;place-items:center;width:21px;height:21px;border-radius:5px;color:#b2a7c6;background:#f4f1fb;font-size:10px;margin-right:10px}.row-number{color:#594c6e;font-variant-numeric:tabular-nums}.empty{text-align:center;padding:65px 20px;color:#b6aebf}.empty .icon{width:35px;height:35px;color:#d1c8df;margin-bottom:15px}.empty h3{font-size:14px;font-weight:550;color:#968aa7;margin:0 0 9px}.empty p{font-size:11px;line-height:1.9;margin:0 0 15px}.filters{display:flex;align-items:center;gap:12px;padding:17px 21px;flex-wrap:wrap}.search{position:relative;max-width:330px;flex:1;min-width:160px}.search .icon{position:absolute;left:12px;top:10px;width:15px;height:15px;color:#b1a9bf}.search input{padding-left:34px;width:100%;font-size:11px;background:#fcfbfe;min-height:36px}.filters select,.filters>input{font-size:11px;min-height:36px;padding:8px 10px;max-width:170px}.filters .filter-count{margin-left:auto;color:#b0a6bd;font-size:10px}.pagination{display:flex;align-items:center;justify-content:space-between;padding:15px 22px;border-top:1px solid var(--line);gap:15px;font-size:10px;color:#a398b2}.pagination>div{display:flex;align-items:center;gap:12px}.muted-note{font-size:10px;color:#a89eb6;margin-top:17px;line-height:1.9;display:flex;align-items:start;gap:7px}.muted-note .icon{width:13px;height:13px;margin-top:2px}.report-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:20px}.bar-row{display:flex;align-items:center;gap:12px;font-size:11px;padding:10px 0}.bar-label{width:95px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#8f819f}.bar-track{height:5px;background:#f4f0fc;border-radius:6px;flex:1;overflow:hidden}.bar-track span{height:100%;display:block;background:#b59bea;border-radius:6px}.bar-count{width:45px;text-align:right;color:#a79bb6;font-size:10px}.settings-grid{display:grid;grid-template-columns:1.35fr 1fr;gap:20px}.info-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px;padding-top:7px}.info-item label{display:block;color:#b0a6bc;font-size:10px;margin-bottom:8px}.info-item strong{font-weight:500;color:#746480;font-size:12px;overflow-wrap:anywhere}.health-banner{padding:13px 15px;background:#edf8f3;border:1px solid #dcf1e6;color:#66a78d;border-radius:7px;font-size:11px;margin:7px 0 23px;line-height:1.8}.health-banner.warn{background:#fff6e9;border-color:#f4e6c9;color:#bd9b63}.health-banner .status-dot{margin-right:8px}.field{display:flex;flex-direction:column;gap:8px;margin-bottom:18px}.field label{font-size:11px;color:#9e91ac}.field input,.field textarea,.field select{font-size:12px}.field small{font-size:10px;color:#b7aebf;line-height:1.8}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}.check-label{font-size:11px;color:#9a8aaa;display:flex;align-items:center;gap:8px;margin-bottom:13px;line-height:1.7}.check-label input{margin:0}.divider{height:1px;background:var(--line);margin:20px 0}.modal-overlay{position:fixed;inset:0;z-index:100;background:#27213766;display:flex;align-items:center;justify-content:center;padding:25px;backdrop-filter:blur(3px)}.modal{background:white;border-radius:13px;box-shadow:0 22px 90px #1b122933;width:570px;max-width:100%;max-height:90vh;overflow:auto;animation:show .15s ease}.modal.wide{width:760px}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:25px 28px 19px;position:sticky;top:0;background:white;z-index:2;border-bottom:1px solid #f4f1f8}.modal-header h2{font-size:17px;margin:0;font-weight:600;letter-spacing:-.5px}.modal-body{padding:23px 28px}.modal-footer{display:flex;justify-content:flex-end;gap:10px;padding:18px 28px;border-top:1px solid var(--line);background:#fdfcfe;position:sticky;bottom:0}.modal-error{color:var(--red);font-size:11px;line-height:1.8;margin-bottom:13px;min-height:2px}.qr-image{display:block;width:240px;height:240px;margin:5px auto 15px;max-width:100%}.qr-url{text-align:center;overflow-wrap:anywhere;color:#a396b4;font-size:11px}.details-grid{display:grid;grid-template-columns:130px 1fr;font-size:11px;line-height:1.9;gap:14px;margin:0}.details-grid dt{color:#b2a5bf}.details-grid dd{margin:0;color:#7c6c8c;overflow-wrap:anywhere;white-space:pre-wrap}.history-item{padding:15px 0;border-bottom:1px solid var(--line);font-size:11px;color:#9988a8}.history-item p{line-height:1.8;overflow-wrap:anywhere;margin:7px 0 0;color:#b3a5bf}.export-jobs{margin-top:20px}.export-item{display:flex;align-items:center;gap:15px;padding:14px 0;border-bottom:1px solid var(--line);font-size:11px;color:#a393b2}.export-item:last-child{border-bottom:0}.export-item .btn{margin-left:auto}.job-info{flex:1;min-width:0}.job-info small{display:block;font-size:10px;margin-top:5px;color:#b9afc4}.export-warning{font-size:10px;color:#c5a16b;margin-top:5px}.login-page{display:grid;grid-template-columns:1.1fr 1fr;min-height:100vh;background:white}.login-art{background:#f0ebfa;position:relative;overflow:hidden;padding:55px 65px;display:flex;flex-direction:column;justify-content:space-between}.login-art .sidebar-brand{padding:0}.login-art-copy{position:relative;z-index:2;margin:auto 0;padding:60px 0}.login-art h1{font-size:48px;letter-spacing:-2px;line-height:1.35;font-weight:650;margin:0 0 22px;color:#47315e}.login-art h1 span{color:var(--primary)}.login-art p{font-size:13px;line-height:1.9;color:#a491b4}.login-diagram{display:flex;align-items:center;gap:19px;margin-top:43px}.login-node{background:#faf8ff;border:1px solid #e0d6f0;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-direction:column;width:85px;height:85px;color:#a895c3;gap:8px;font-size:10px}.login-node.center{background:var(--primary);border-color:#c8b7f2;color:white;font-size:28px;box-shadow:0 10px 22px #6e4bed22}.login-node .icon{width:23px;height:23px}.login-node.center small{font-size:8px;letter-spacing:2px;opacity:.65}.login-diagram>span{color:#bca6d7;font-size:22px}.login-art-footer{font-size:10px;color:#b4a3c4;position:relative;z-index:2}.login-ring{position:absolute;width:550px;height:550px;border:1px solid #e3d7f2;border-radius:50%;right:-240px;bottom:-140px}.login-ring.second{width:700px;height:700px;right:-320px;bottom:-220px}.login-form-area{display:flex;align-items:center;justify-content:center;padding:45px}.login-form{width:330px;max-width:100%}.login-eyebrow{font-size:10px;letter-spacing:2px;color:#b3a6c3;margin-bottom:17px}.login-form h2{font-size:27px;letter-spacing:-1px;margin:0 0 11px;font-weight:650}.login-form>p{font-size:11px;color:#b3a6bd;line-height:1.8;margin:0 0 34px}.login-form .field{margin-bottom:22px}.login-form .field input{height:45px;background:#fefcff}.login-form .btn{width:100%;height:43px;margin-top:3px;font-size:12px}.login-back{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:25px;font-size:10px;color:#b8aec3}.login-back .icon{width:12px;height:12px}#toast{position:fixed;left:50%;bottom:30px;transform:translateX(-50%) translateY(15px);background:#352943;color:white;padding:12px 20px;border-radius:8px;font-size:12px;z-index:300;box-shadow:0 8px 30px #2a1b3a22;opacity:0;pointer-events:none;transition:all .2s;max-width:90vw;line-height:1.8}#toast.visible{opacity:1;transform:translateX(-50%) translateY(0)}.boot{text-align:center;padding:20vh 20px;color:#ad9cbd}.boot img{margin-bottom:12px}.boot p{font-size:12px}.load-line{height:2px;background:linear-gradient(90deg,#f7f8fc,#b7a0f0,#f7f8fc);animation:pulse 1s infinite;margin:50px 15px}.unavailable{min-height:100vh;display:grid;place-items:center;background:#f8f6fc}.unavailable-card{text-align:center;padding:40px 25px}.unavailable-card .eyebrow{display:block;margin:23px 0;color:#b0a0c4;font-size:10px}.unavailable-card h1{font-size:31px;letter-spacing:-1px}.unavailable-card>p:not(.eyebrow){font-size:13px;line-height:1.9;color:#9b8aa9;margin-bottom:25px}.unavailable-card .button{display:inline-block;background:var(--primary);color:white;padding:12px 24px;border-radius:7px}.mobile-menu{display:none}.subtle-tag{background:#f3eff9;color:#aa9abb;border-radius:5px;padding:4px 8px;font-size:9px}.last-update{font-size:10px;color:#b2a6be;margin:17px 0 0;text-align:right}@keyframes show{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{50%{opacity:.4}}@media(min-width:1600px){.main{padding-top:39px}.metrics{gap:23px}.chart-container{height:280px}}@media(max-width:1180px){.sidebar{width:190px;padding-left:13px;padding-right:13px}.sidebar-brand{gap:8px}.sidebar-brand strong{font-size:13px}.sidebar-brand img{width:32px;height:32px}.workspace{margin-left:190px;width:calc(100% - 190px)}.main{padding:26px 23px}.topbar{padding:0 23px}.metric{padding:17px}.metric-number{font-size:28px}.grid-main{grid-template-columns:1.65fr 1fr}.panel-head{padding:19px 18px 13px}.panel-body{padding:0 18px 20px}.report-grid{grid-template-columns:repeat(2,1fr)}.date-control input{width:107px}.toolbar{gap:8px}.presets{padding-right:8px}th,td{padding-left:17px;padding-right:17px}.login-art{padding:40px}.login-art h1{font-size:43px}}@media(max-width:900px){.metrics{grid-template-columns:repeat(2,1fr)}.grid-main{grid-template-columns:1fr}.grid-main .panel:last-child .chart-container.donut{height:170px}.settings-grid{grid-template-columns:1fr}.toolbar select{margin-left:0}.login-art{padding:35px}.login-art h1{font-size:37px}.login-diagram{gap:12px}.login-node{width:68px;height:72px}.login-form-area{padding:32px}.hero-foot{gap:10px}}@media(max-width:680px){.sidebar{transform:translateX(-100%);transition:transform .2s;width:218px;box-shadow:10px 0 40px #28203915}.sidebar.open{transform:translateX(0)}.workspace{margin-left:0;width:100%}.topbar{height:61px;padding:0 18px}.mobile-menu{display:inline-flex;padding:6px;color:#9d8daf}.breadcrumb{gap:9px;font-size:10px}.breadcrumb>span{display:none}.top-right{gap:12px}.online{display:none}.user{gap:7px}.avatar{width:26px;height:26px}.logout{padding-left:8px}.main{padding:24px 16px}.page-heading h1{font-size:22px}.page-heading{align-items:flex-start;margin-bottom:20px;gap:10px}.page-heading p{font-size:10px;max-width:230px}.heading-actions .btn{font-size:10px;padding:0 10px;min-height:32px}.heading-actions .btn .icon{width:13px;height:13px}.heading-actions .btn.secondary-label{display:none}.toolbar{padding:12px;gap:9px;margin-bottom:16px}.presets{border:0;padding:0;order:2;width:100%}.date-control{gap:6px}.date-control input{width:103px;font-size:10px}.toolbar select{width:100%;max-width:none;margin-top:3px;order:3}.metrics{gap:11px;margin-bottom:16px}.metric{padding:15px}.metric-top{font-size:10px}.metric-icon{width:26px;height:26px}.metric-icon .icon{width:15px;height:15px}.metric-number{font-size:27px;margin:12px 0 8px}.metric-note{font-size:9px}.metric-note .icon{display:none}.grid-main{gap:16px;margin-bottom:16px}.panel-head{padding:18px 16px 13px}.panel-head h2{font-size:12px}.panel-body{padding:0 16px 18px}.panel-head small{font-size:9px}.chart-container{height:220px}.chart-empty{height:220px}.report-grid{grid-template-columns:1fr;gap:16px;margin-top:16px}.filters{gap:8px;padding:14px}.filters select,.filters>input{font-size:10px;max-width:145px}.filters .filter-count{font-size:9px}.search input{font-size:10px}.search{max-width:none}.panel-foot{padding:12px 16px;font-size:9px}.pagination{padding:13px 16px;font-size:9px}.pagination .btn{min-height:31px;font-size:10px;padding:0 10px}.settings-grid{gap:16px}.form-row{grid-template-columns:1fr;gap:0}.modal-overlay{padding:12px}.modal{max-height:94vh}.modal-header{padding:20px}.modal-body{padding:20px}.modal-footer{padding:14px 20px}.modal-header h2{font-size:16px}.details-grid{grid-template-columns:88px 1fr;gap:12px;font-size:10px}.login-page{display:flex;flex-direction:column;min-height:100vh}.login-art{padding:28px 25px;min-height:195px}.login-art-copy{padding:27px 0 0}.login-art h1{font-size:28px;letter-spacing:-1px;margin:0}.login-art h1 br{display:none}.login-art-copy>p,.login-diagram,.login-art-footer{display:none}.login-form-area{padding:37px 26px;flex:1;align-items:flex-start}.login-form{width:100%}.login-form h2{font-size:24px}.login-form>p{margin-bottom:26px}.login-eyebrow{font-size:9px;margin-bottom:12px}.info-grid{gap:20px}.info-item strong{font-size:11px}.info-item label{font-size:9px}.export-item{gap:10px}.export-item .btn{font-size:10px;padding:0 9px}.last-update{font-size:9px}}


/* Readable workspace theme: clear hierarchy, stronger contrast and comfortable type. */
:root{--primary:#643bd1;--primary-soft:#eee8ff;--ink:#1d293d;--muted:#526077;--line:#dce3ed;--bg:#f0f3f8;--green:#117659;--red:#b93650;--shadow:0 3px 14px #23324808}
body{font-size:14px;line-height:1.5}
input,select,textarea{border-color:#bcc7d7;font-size:14px;color:#263449;background:#fff}
input::placeholder,textarea::placeholder{color:#68758a;opacity:1}
input:focus,select:focus,textarea:focus{border-color:#7652d9;box-shadow:0 0 0 3px #643bd11a}
button:disabled{opacity:.6}
.btn{min-height:39px;font-size:13px;font-weight:600;border-color:#c9d2e0;color:#344258;box-shadow:0 1px 2px #23324806}
.btn:hover{background:#f0edf9;border-color:#b9a6e9}
.btn.primary{color:#fff;background:#643bd1;border-color:#643bd1;box-shadow:0 4px 10px #643bd124}
.btn.primary:hover{background:#512bb6}
.btn.danger{color:#b52b45;border-color:#e6b8c2}
.btn .icon{width:17px;height:17px}
.icon-btn{color:#46566e;padding:8px;border:1px solid transparent}
.icon-btn:hover{background:#eee8ff;border-color:#d2c2f5;color:#512bb6}
.icon-btn .icon{width:18px;height:18px}
.text-btn{font-size:13px;font-weight:550;color:#5b32c4}
.tiny{font-size:12px}
.sidebar{width:232px;background:#192238;border-right-color:#192238;padding:27px 17px;box-shadow:3px 0 18px #1d293d08}
.sidebar-brand{color:#fff;gap:10px}
.sidebar-brand strong{font-size:15px;font-weight:650;letter-spacing:-.4px}
.sidebar-brand small{font-size:10px;letter-spacing:1.4px;color:#aebcd1;line-height:1.7}
.sidebar-brand img{width:37px;height:37px}
.nav-label{color:#aebbd0;font-size:12px;letter-spacing:.6px;margin-top:37px}
.nav-item{color:#d4deed;font-size:14px;padding:13px 15px;gap:12px;font-weight:500}
.nav-item .icon{width:19px;height:19px}
.nav-item:hover{color:#fff;background:#2a3650}
.nav-item.active{background:#6b46d8;color:#fff;box-shadow:0 5px 12px #070e202e;font-weight:650}
.nav-item.active:after{background:#fff}
.retention-note{background:#243149;border-color:#3a4862;padding:16px 13px}
.retention-note strong{font-size:12px;color:#e3e9f4}
.retention-note .icon{color:#c3b4f0}
.retention-note p{font-size:12px;color:#bcc9dc;line-height:1.85}
.sidebar-home{font-size:12px;color:#ccd7e7}
.sidebar-home:hover{color:#fff}
.workspace{margin-left:232px;width:calc(100% - 232px)}
.topbar{height:76px;border-bottom-color:#dce3ed}
.breadcrumb{font-size:13px;color:#647187;gap:11px}
.breadcrumb strong{color:#35445b;font-weight:600}
.online{font-size:12px;color:#526077}
.status-dot{background:#168562}
.user{font-size:13px;color:#344258}
.avatar{width:32px;height:32px;font-size:12px;background:#e9e0ff;color:#5630bf}
.logout{font-size:12px;color:#526077;border-left-color:#d2dae6}
.logout:hover{color:#512bb6}
.page-heading h1{font-size:27px;font-weight:700;color:#17243a;margin-bottom:8px}
.page-heading p{font-size:13px;color:#5d6a80;line-height:1.75}
.toolbar{border-color:#d5deeb;box-shadow:var(--shadow);padding:13px 17px;gap:13px}
.toolbar .icon{color:#58677e;width:17px;height:17px}
.date-control{color:#65738a;gap:9px}
.date-control input{font-size:13px;font-weight:500;color:#344258;width:125px}
.presets{border-right-color:#d5deeb}
.preset{font-size:12px;font-weight:500;color:#526077;padding:7px 10px}
.preset:hover{background:#f0edf8}
.preset.active{background:#e8dfff;color:#512bb6;font-weight:650}
.toolbar select{font-size:13px;color:#344258;border-color:#c8d2e1;padding:8px 11px;max-width:250px}
.metric{border-color:#d6dfeb;border-top:3px solid #7652d9;border-radius:11px;padding:20px 21px;box-shadow:0 4px 15px #23324807}
.metric:nth-child(2){border-top-color:#19836a}
.metric:nth-child(3){border-top-color:#3972cd}
.metric:nth-child(4){border-top-color:#b57c21}
.metric-top{color:#45546b;font-size:13px;font-weight:600}
.metric-icon{width:33px;height:33px;background:#ede5ff;color:#6540ca}
.metric:nth-child(2) .metric-icon{background:#e4f4ec;color:#137454}
.metric:nth-child(3) .metric-icon{background:#e8effc;color:#2d62b8}
.metric:nth-child(4) .metric-icon{background:#fff1d8;color:#946012}
.metric-number{font-size:34px;font-weight:700;letter-spacing:-1px;color:#17243a;margin:13px 0 10px}
.metric-note{font-size:12px;color:#5d6a80;line-height:1.6}
.metric-note .icon{width:12px;height:12px;color:#63728b}
.panel{border-color:#d6dfeb;border-radius:11px;box-shadow:0 4px 15px #23324806}
.panel-head{padding-top:22px;padding-bottom:17px}
.panel-head h2{font-size:15px;font-weight:650;color:#25364f}
.panel-head small{font-size:12px;color:#5d6a80}
.panel-foot{font-size:12px;color:#5b687d;border-top-color:#e1e7f0;background:#fbfcfe;padding-top:13px;padding-bottom:13px}
.chart-empty{color:#5d6a80}
.legend{font-size:12px;color:#46556d;gap:16px}
.legend i{width:8px;height:8px}
.chart-container{margin-top:2px}
th{background:#edf1f7;color:#48576e;font-size:12px;font-weight:650;border-color:#dce3ed;padding-top:14px;padding-bottom:14px}
td{font-size:13px;line-height:1.6;color:#344258;border-bottom-color:#e4e9f1}
tbody tr:nth-child(even){background:#fcfdff}
tbody tr:hover{background:#f1edfc}
.link-name{font-size:14px;color:#26364d;font-weight:600;max-width:240px}
.link-sub{font-size:12px;color:#5c6980;max-width:280px;margin-top:5px}
.badge{font-size:12px;font-weight:550;padding:4px 9px;background:#eee8fc;color:#5934b7;border:1px solid #dacef4}
.badge.good{background:#e1f4ec;color:#0c7153;border-color:#bce2d1}
.badge.bad{background:#fce9ee;color:#b52b45;border-color:#efc5cf}
.badge.warn{background:#fff1d7;color:#875209;border-color:#efd7ac}
.badge.gray{background:#edf1f6;color:#526077;border-color:#d5dde8}
.badge .dot{width:5px;height:5px}
.table-actions{gap:2px}
.table-actions .icon-btn{border-color:#d8e0eb;background:#fff;min-width:33px;min-height:33px;padding:7px}
.table-actions .icon-btn:hover{background:#eee8ff;border-color:#c5b0ee}
.rank-num{color:#613cc4;background:#ece5fc;font-weight:600;font-size:12px;width:25px;height:25px}
.row-number{color:#26364d;font-weight:600}
.empty{color:#5d6a80;padding:55px 20px}
.empty .icon{color:#8d7cb1}
.empty h3{color:#44536a;font-size:15px;font-weight:600}
.empty p{font-size:13px;line-height:1.8}
.filters{gap:12px;padding-top:18px;padding-bottom:18px}
.search .icon{color:#65748b;top:11px;width:17px;height:17px}
.search input{background:#fff;font-size:13px;min-height:39px;border-color:#bdc9da}
.filters select,.filters>input{font-size:13px;min-height:39px;padding:9px 10px;border-color:#bdc9da}
.filters .filter-count{font-size:12px;color:#526077}
.pagination{font-size:12px;color:#526077;border-top-color:#dce3ed}
.muted-note{font-size:12px;color:#5b687d;line-height:1.8}
.muted-note .icon{color:#5e6c82;width:14px;height:14px}
.bar-row{font-size:13px;padding:11px 0}
.bar-label{color:#42516a;width:100px}
.bar-track{height:7px;background:#e8edf5}
.bar-track span{background:#7955d6}
.bar-count{font-size:12px;color:#42516a;font-weight:550;width:52px}
.info-item label{font-size:12px;color:#5c6980;margin-bottom:7px}
.info-item strong{font-size:14px;color:#2f405a;font-weight:550}
.health-banner{font-size:13px;background:#e5f4ec;border-color:#bfe1cf;color:#126b4e}
.health-banner.warn{background:#fff1da;border-color:#ecd3a7;color:#80510b}
.field label{font-size:13px;font-weight:600;color:#3b4b63}
.field input,.field textarea,.field select{font-size:14px;color:#263449}
.field small{font-size:12px;color:#5e6b80}
.check-label{font-size:13px;color:#43536b}
.modal-header{border-bottom-color:#dce3ed}
.modal-header h2{font-size:19px;color:#25364f;font-weight:650}
.modal-footer{background:#f7f9fc;border-top-color:#dce3ed}
.modal-error{font-size:13px;font-weight:500;color:#b52b45}
.qr-url{font-size:13px;color:#526077}
.details-grid{font-size:13px;line-height:1.8}
.details-grid dt{color:#5b6980}
.details-grid dd{color:#2f405a}
.history-item{font-size:13px;color:#3f5069}
.history-item p{color:#5b6980;font-size:12px}
.export-item{font-size:13px;color:#42516a;border-bottom-color:#dce3ed}
.job-info small{font-size:12px;color:#5b6980}
.export-warning{font-size:12px;color:#875209}
.login-art{background:#e9e3f5}
.login-art .sidebar-brand{color:#2f254c}
.login-art .sidebar-brand small{color:#66577d}
.login-art h1{color:#28213b}
.login-art p{color:#625375;font-size:14px}
.login-node{color:#66517e;border-color:#c6b5dd;background:#fbf9ff;font-size:12px}
.login-node.center{color:#fff}
.login-node.center small{opacity:1;color:#eee7ff}
.login-diagram>span{color:#8d73ab}
.login-art-footer{color:#6a587e;font-size:12px}
.login-ring{border-color:#d4c7e5}
.login-eyebrow{color:#69587e;font-size:12px;letter-spacing:1.6px}
.login-form h2{font-weight:700;color:#25314a}
.login-form>p{font-size:13px;color:#5e6b80}
.login-form .field input{background:#fff}
.login-form .btn{font-size:14px;height:45px}
.login-back{font-size:12px;color:#5e6b80}
.boot{color:#5e6b80}.boot p{font-size:14px}
.subtle-tag{font-size:11px;color:#65448d;background:#eee7f7;padding:4px 8px}
.last-update{font-size:12px;color:#5b687d}
@media(max-width:1180px){.sidebar{width:204px;padding-left:13px;padding-right:13px}.sidebar-brand strong{font-size:13px}.sidebar-brand small{font-size:9px;letter-spacing:1px}.sidebar-brand img{width:34px;height:34px}.workspace{margin-left:204px;width:calc(100% - 204px)}.metric{padding:17px}.metric-number{font-size:31px}.toolbar{gap:10px}.date-control input{width:118px}}
@media(max-width:680px){.sidebar{width:232px;box-shadow:10px 0 40px #19223833}.workspace{margin-left:0;width:100%}.topbar{height:64px}.mobile-menu{color:#46566e}.breadcrumb{font-size:12px}.user{font-size:12px}.logout{font-size:12px}.avatar{width:29px;height:29px}.page-heading h1{font-size:24px}.page-heading p{font-size:12px;line-height:1.7;max-width:220px}.heading-actions .btn{font-size:12px;min-height:36px;padding:0 11px}.toolbar{gap:8px;padding:12px}.date-control{gap:7px}.date-control input{width:110px;font-size:12px}.toolbar select{font-size:13px}.preset{font-size:12px}.metric{padding:15px 14px;border-top-width:3px}.metric-top{font-size:12px;gap:5px}.metric-icon{width:27px;height:27px}.metric-number{font-size:30px}.metric-note{font-size:11px;line-height:1.7}.panel-head h2{font-size:14px}.panel-head small{font-size:11px}.panel-foot{font-size:12px}.filters select,.filters>input,.search input{font-size:12px;min-height:38px}.filters .filter-count{font-size:12px}.pagination{font-size:11px}.pagination .btn{font-size:12px;min-height:34px}.modal-header h2{font-size:18px}.details-grid{font-size:12px;grid-template-columns:88px 1fr}.info-item label{font-size:12px}.info-item strong{font-size:13px}.export-item .btn{font-size:12px}.login-art{padding:28px 25px}.login-eyebrow{font-size:11px}.login-form>p{font-size:13px}.last-update{font-size:11px}}

/* Keep the recycle action visible without horizontal scrolling. */
.recycle-table{table-layout:fixed;white-space:normal}
.recycle-table th:first-child{width:38%}.recycle-table th:nth-child(2){width:42%}.recycle-table th:last-child{width:20%;text-align:right}
.recycle-table td{vertical-align:middle;white-space:normal}.recycle-table .link-name,.recycle-table .link-sub{max-width:100%;white-space:nowrap}.recycle-table .link-sub{font-size:12px}
.recycle-table .recycle-action{text-align:right;white-space:nowrap}.recycle-action .badge{margin-bottom:10px;font-size:11px}.recycle-action .btn{display:flex;margin-left:auto;min-width:80px}
@media(max-width:680px){.recycle-table,.recycle-table tbody{display:block;width:100%}.recycle-table thead{display:none}.recycle-table tr{display:grid;grid-template-columns:minmax(0,1fr) 94px;gap:0 10px;padding:16px}.recycle-table tr+tr{border-top:1px solid var(--line)}.recycle-table td{display:block;padding:5px 0;border:0;min-width:0}.recycle-table td:first-child{grid-column:1;grid-row:1}.recycle-table td:nth-child(2){grid-column:1;grid-row:2}.recycle-table td:last-child{grid-column:2;grid-row:1 / span 2;align-self:center}.recycle-action .badge{margin-bottom:10px}.recycle-action .btn{font-size:12px}}

/* Source attribution: readable domains and direct drill-down to visit records. */
.overview-bottom{display:grid;grid-template-columns:minmax(250px,.85fr) minmax(0,1.65fr);gap:20px;align-items:start}.source-row{display:block;width:100%;padding:12px 0;text-align:left;border-bottom:1px solid var(--line)}.source-row:last-child{border-bottom:0}.source-row:hover .source-row-name{color:var(--primary)}.source-row-top{display:flex;gap:14px;justify-content:space-between;align-items:center;margin-bottom:9px;color:#42516a;font-size:13px}.source-row-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.source-row-top strong{font-size:12px;white-space:nowrap}.source-row .bar-track{display:block;width:100%}.source-filters{display:flex;align-items:center;gap:10px;flex-wrap:wrap;width:100%}.source-filters select{font-size:13px;min-height:39px;padding:9px 10px;border-color:#bdc9da;max-width:190px}.source-filters .source-input{font-size:13px;min-height:39px;flex:1;min-width:180px;max-width:320px}.source-input:disabled{background:#f0f3f8;color:#6c7789}.visit-source-cell{min-width:215px;max-width:245px}.visit-source-cell .source-link{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;font-weight:600}.visit-source-cell .link-sub{max-width:200px}.source-channel{display:block;margin-top:5px;color:#526077;font-size:11px}.visits-table th:last-child,.visits-table td:last-child{position:sticky;right:0;background:#fff;box-shadow:-5px 0 8px #25364f08}.visits-table th:last-child{background:#edf1f7}.visits-table td:last-child{min-width:85px}
@media(max-width:1100px){.overview-bottom{grid-template-columns:1fr}}@media(max-width:680px){.overview-bottom{gap:16px}.source-filters{gap:8px}.source-filters select{width:145px;font-size:12px;min-height:38px;padding:8px}.source-filters .source-input{font-size:12px;min-width:155px;min-height:38px}.visit-source-cell{min-width:190px}.visit-source-cell .source-link,.visit-source-cell .link-sub{max-width:175px}.source-row-top{font-size:12px}}

@media(max-width:680px){.visits-table,.visits-table tbody{display:block;width:100%;white-space:normal}.visits-table thead{display:none}.visits-table tr{display:grid;grid-template-columns:minmax(0,1fr) 98px;gap:8px 12px;padding:16px}.visits-table tr+tr{border-top:1px solid var(--line)}.visits-table td{display:block;border:0;padding:4px 0;white-space:normal;min-width:0;overflow-wrap:anywhere}.visits-table td:first-child{grid-column:1;grid-row:1}.visits-table td:nth-child(2){grid-column:1 / -1;grid-row:2;border-top:1px solid var(--line);padding-top:10px;max-width:none}.visits-table td:nth-child(3){grid-column:1;grid-row:3}.visits-table td:nth-child(4){grid-column:2;grid-row:3}.visits-table td:nth-child(5){grid-column:2;grid-row:1;text-align:right}.visits-table td:last-child{grid-column:1 / -1;grid-row:4;display:flex;justify-content:flex-end;position:static;box-shadow:none;background:transparent;min-width:0}.visits-table td:last-child .text-btn{min-height:36px}.visits-table .link-sub,.visits-table .source-link{max-width:100%;white-space:nowrap}.visits-table .source-link{min-height:32px}.visits-table .visit-source-cell:before{content:'访问来源';display:block;font-size:11px;color:#526077}.visits-table td:nth-child(3):before{content:'IP / 归属地';display:block;font-size:11px;color:#526077;margin-bottom:4px}.visits-table td:nth-child(4):before{content:'设备';display:block;font-size:11px;color:#526077;margin-bottom:4px}}
