:root{--c-primary: #1f8a4c;--c-primary-dark: #145c33;--c-primary-deeper: #0d4a2b;--c-primary-light: #e6f4eb;--c-primary-lighter: #f4faf6;--c-primary-border: #c9e7d5;--c-accent: #ff7a1a;--c-accent-dark: #f25905;--c-accent-light: #fff0e0;--c-accent-border: #ffdcb8;--c-purple: #8b5ddb;--c-purple-dark: #6a3bb8;--c-purple-light: #f1ecfc;--c-bg: #f5f8f6;--c-surface: #ffffff;--c-text: #1c2b22;--c-text-secondary: #4a5b50;--c-text-muted: #8ea093;--c-text-placeholder: #c2ccc6;--c-border: #e6ede9;--c-border-strong: #d4dfd9;--c-border-light: #f0f5f2;--c-fill: #fbfdfc;--c-fill-hover: #f2f6f3;--c-success: #2fa56b;--c-success-bg: #eaf7f0;--c-warning: #e89b24;--c-warning-bg: #fbf1de;--c-danger: #e05555;--c-danger-bg: #fdeeee;--c-info: #3d9fe0;--c-info-bg: #e9f3fb;--r-sm: 6px;--r-md: 10px;--r-lg: 14px;--r-xl: 18px;--r-pill: 999px;--sh-card: 0 1px 2px rgba(13, 74, 43, .04), 0 6px 20px rgba(13, 74, 43, .06);--sh-raised: 0 8px 26px rgba(31, 138, 76, .16);--sh-modal: 0 20px 60px rgba(13, 74, 43, .22);--f-display: "Noto Serif SC", "Source Han Serif SC", "Songti SC", "STZhongsong", "SimSun", serif;--f-body: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;--f-num: "SF Mono", "Segoe UI Mono", "JetBrains Mono", Menlo, Consolas, ui-monospace, monospace;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 24px;--sp-8: 32px;--fs-xs: 11px;--fs-sm: 12px;--fs-base: 13px;--fs-md: 14px;--fs-lg: 15px;--fs-xl: 18px;--fs-2xl: 20px;--fs-3xl: 28px;--sidebar-w: 220px;--topbar-h: 56px;--t-fast: .15s ease;--t-base: .2s ease}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--f-body);font-size:var(--fs-md);line-height:1.5;color:var(--c-text);background:var(--c-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}h1,h2,h3,h4,h5,h6,p,figure{margin:0}ul,ol{margin:0;padding:0;list-style:none}a{color:inherit;text-decoration:none}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}button{cursor:pointer;border:none;background:none;padding:0}table{border-collapse:collapse;border-spacing:0}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#d0d4da;border-radius:var(--r-pill)}::-webkit-scrollbar-thumb:hover{background:#b8bec6}::-webkit-scrollbar-track{background:transparent}.num{font-family:var(--f-num);font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.layout{display:flex;min-height:100vh}.sidebar{width:var(--sidebar-w);flex-shrink:0;background:radial-gradient(600px 260px at 10% -10%,rgba(255,138,61,.25),transparent 55%),radial-gradient(500px 300px at 110% 110%,rgba(139,93,219,.16),transparent 55%),linear-gradient(180deg,var(--c-primary-deeper) 0%,var(--c-primary-dark) 55%,var(--c-primary) 135%);color:#fff;display:flex;flex-direction:column;position:fixed;top:0;bottom:0;left:0;z-index:40}.sidebar-logo{display:flex;align-items:center;height:var(--topbar-h);padding:0 var(--sp-5);font-size:var(--fs-lg);font-weight:700;white-space:nowrap;letter-spacing:.5px;border-bottom:1px solid rgba(255,255,255,.1);flex-shrink:0}.sidebar-logo .word{font-family:var(--f-display);line-height:1.3;font-size:15px;letter-spacing:1px}.sidebar-nav{flex:1;overflow-y:auto;padding:var(--sp-3) 0 var(--sp-5)}.sidebar-nav::-webkit-scrollbar{width:4px}.sidebar-nav::-webkit-scrollbar-thumb{background:#fff3}.nav-group-title{padding:var(--sp-4) 22px var(--sp-1) 22px;font-size:var(--fs-xs);letter-spacing:1px;color:#ffffff6b}.nav-link{display:flex;align-items:center;gap:10px;margin:2px 10px;padding:8px 12px;font-size:var(--fs-md);color:#fffc;border-radius:var(--r-md);border:1px solid transparent;transition:background var(--t-base),color var(--t-base),border-color var(--t-base)}.nav-link:hover{background:#ffffff14;color:#fff}.nav-link.active{background:#ffffff29;color:#fff;border-color:#ffffff2e;font-weight:500}.nav-link .nav-icon{width:26px;height:26px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:var(--fs-lg);line-height:1;border-radius:8px;background:#ffffff1a;transition:background var(--t-base)}.nav-link.active .nav-icon{background:var(--c-accent)}.sidebar-footer{flex-shrink:0;padding:var(--sp-3) var(--sp-6) var(--sp-4);border-top:1px solid rgba(255,255,255,.1);font-size:var(--fs-xs);color:#ffffff8c;line-height:1.7}.sidebar-footer .service-phone{color:#ffffffd9;font-size:var(--fs-sm)}.main{flex:1;min-width:0;margin-left:var(--sidebar-w);display:flex;flex-direction:column}.topbar{height:var(--topbar-h);flex-shrink:0;background:#ffffffdb;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--c-border);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);padding:0 var(--sp-6);position:sticky;top:0;z-index:30}.topbar-left{display:flex;align-items:center;gap:var(--sp-4);min-width:0}.topbar-left h1{font-family:var(--f-display);font-size:var(--fs-xl);font-weight:700;letter-spacing:.5px;white-space:nowrap;min-width:0;overflow:hidden;text-overflow:ellipsis}.topbar-left .breadcrumb{font-size:var(--fs-base);color:var(--c-text-muted);white-space:nowrap;flex:none}.topbar-right{display:flex;align-items:center;gap:var(--sp-4);flex-shrink:0}.hamburger{display:none;width:34px;height:34px;border-radius:var(--r-md);align-items:center;justify-content:center;font-size:var(--fs-xl);color:var(--c-text-secondary)}.hamburger:hover{background:var(--c-fill-hover)}.topbar-icon-btn{width:34px;height:34px;border-radius:50%;background:var(--c-bg);display:flex;align-items:center;justify-content:center;font-size:var(--fs-lg);position:relative;transition:background var(--t-fast)}.topbar-icon-btn:hover{background:#eceff3}.topbar-icon-btn .dot{position:absolute;top:6px;right:6px;width:7px;height:7px;border-radius:50%;background:var(--c-danger)}.user-chip{display:flex;align-items:center;gap:var(--sp-2);padding:4px 10px 4px 4px;border-radius:var(--r-pill);transition:background var(--t-fast)}.user-chip:hover{background:var(--c-fill-hover)}.user-chip .avatar{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,var(--c-primary),var(--c-primary-dark));color:#fff;display:flex;align-items:center;justify-content:center;font-size:var(--fs-base);font-weight:600;flex-shrink:0}.user-chip .meta{line-height:1.25;text-align:left}.user-chip .name{font-size:var(--fs-base);font-weight:500}.user-chip .role{font-size:var(--fs-xs);color:var(--c-text-muted)}.dropdown{position:relative}.dropdown-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:168px;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-lg);box-shadow:var(--sh-raised);padding:var(--sp-1) 0;z-index:50}.dropdown-item{display:block;width:100%;text-align:left;padding:9px var(--sp-4);font-size:var(--fs-base);color:var(--c-text-secondary)}.dropdown-item:hover{background:var(--c-fill-hover);color:var(--c-primary)}.dropdown-item.danger:hover{color:var(--c-danger)}.dropdown-divider{height:1px;background:var(--c-border);margin:var(--sp-1) 0}.content{flex:1;padding:var(--sp-5) var(--sp-6) var(--sp-8);min-width:0}.drawer-mask{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;z-index:35}.login-page{min-height:100vh;position:relative;display:flex;align-items:center;justify-content:center;padding:var(--sp-6);background:radial-gradient(circle at 12% 18%,rgba(46,125,50,.14),transparent 42%),radial-gradient(circle at 88% 82%,rgba(255,143,0,.12),transparent 46%),var(--c-bg)}.login-handoff{text-align:center;color:var(--c-text-secondary)}.login-handoff-text{font-size:var(--fs-md);letter-spacing:.5px}.login-brand-top{position:absolute;top:var(--sp-6);left:var(--sp-6);display:flex;align-items:center;font-size:var(--fs-xl);font-weight:700;letter-spacing:.5px;color:var(--c-primary-dark)}.login-brand-top-mark{width:30px;height:30px;border-radius:var(--r-md);background:linear-gradient(135deg,var(--c-primary),var(--c-primary-dark));display:flex;align-items:center;justify-content:center;font-size:16px;box-shadow:0 4px 12px #2e7d3240}.login-card{width:100%;max-width:400px;background:var(--c-surface);border-radius:var(--r-xl);box-shadow:0 16px 48px #0000001a;padding:var(--sp-8) var(--sp-6) var(--sp-6)}.login-brand{text-align:center;margin-bottom:var(--sp-6)}.login-brand .mark{width:56px;height:56px;margin:0 auto var(--sp-3);border-radius:var(--r-xl);background:linear-gradient(135deg,var(--c-primary),var(--c-primary-dark));display:flex;align-items:center;justify-content:center;font-size:30px;box-shadow:0 8px 20px #2e7d3247}.login-brand h1{font-size:22px;font-weight:700;letter-spacing:.5px}.login-brand p{margin-top:var(--sp-1);font-size:var(--fs-base);color:var(--c-text-muted)}.login-form .field{margin-bottom:var(--sp-4)}.login-form .field>label{display:block;margin-bottom:6px;font-size:var(--fs-base);font-weight:500;color:var(--c-text-secondary)}.login-submit{width:100%;height:42px;margin-top:var(--sp-2);border-radius:var(--r-md);background:linear-gradient(135deg,var(--c-primary),var(--c-primary-dark));color:#fff;font-size:var(--fs-lg);font-weight:600;transition:filter var(--t-base)}.login-submit:hover:not(:disabled){filter:brightness(1.06)}.login-submit:disabled{opacity:.65;cursor:not-allowed}.login-error{margin-bottom:var(--sp-4);padding:9px var(--sp-3);border-radius:var(--r-md);background:var(--c-danger-bg);color:var(--c-danger);font-size:var(--fs-base)}.login-hint{margin-top:var(--sp-5);padding-top:var(--sp-4);border-top:1px solid var(--c-border);text-align:center;font-size:var(--fs-sm);color:var(--c-text-muted);line-height:1.9}.icp-link{color:var(--c-text-muted);text-decoration:none}.icp-link:hover{color:var(--c-text-secondary);text-decoration:underline}.login-hint b{color:var(--c-text-secondary);font-weight:600}.login-icp-fixed{position:fixed;bottom:0;left:0;right:0;z-index:5;padding:var(--sp-3) var(--sp-6) var(--sp-4);text-align:center;font-size:var(--fs-sm);color:var(--c-text-muted)}.captcha-field .captcha-inline{display:flex;gap:10px;align-items:stretch}.captcha-figure{flex:0 0 160px;height:44px;display:flex;align-items:center;justify-content:center;border:1px solid var(--c-border);border-radius:var(--r-sm);background:var(--c-fill);overflow:hidden;cursor:pointer;user-select:none;-webkit-user-select:none;-webkit-user-drag:none}.captcha-figure:hover{border-color:var(--c-primary)}.captcha-img{width:160px;height:44px;display:block;pointer-events:none;-webkit-user-drag:none}.captcha-loading{font-size:var(--fs-sm);color:var(--c-text-muted);text-align:center}.login-links{position:absolute;top:var(--sp-6);right:var(--sp-6);display:flex;align-items:center;gap:var(--sp-1)}.login-link-item{display:inline-flex;align-items:center}.login-link{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:var(--r-md);background:transparent;color:var(--c-primary-dark);font-size:var(--fs-md);text-decoration:none;transition:color var(--t-fast),background var(--t-fast)}.login-link-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:inherit}.login-link:hover{background:var(--c-primary-light)}.login-link-divider{color:var(--c-border-strong);font-size:var(--fs-base)}.qr-sub{margin-bottom:var(--sp-5);text-align:center;font-size:var(--fs-base);color:var(--c-text-muted)}.qr-pair{display:flex;justify-content:center;gap:var(--sp-4)}.qr-card{position:relative;flex:1 1 0;max-width:250px;padding:calc(var(--sp-4) + 4px) var(--sp-4) var(--sp-5);border:1px solid var(--c-border);border-radius:var(--r-xl);background:linear-gradient(180deg,#fff,#fafcfa);box-shadow:0 2px 10px #0000000a;text-align:center;overflow:hidden;transition:transform var(--t-base),box-shadow var(--t-base),border-color var(--t-base),background var(--t-base)}.qr-card:hover{transform:translateY(-2px);box-shadow:0 12px 26px #00000017}.qr-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:transparent;transition:background var(--t-base)}.qr-card.active{border-color:var(--c-primary);background:linear-gradient(180deg,var(--c-primary-lighter) 0%,#ffffff 58%);box-shadow:0 12px 28px #2e7d322e}.qr-card.active:before{background:linear-gradient(90deg,var(--c-primary),var(--c-primary-dark))}.qr-frame{width:168px;height:168px;margin:0 auto var(--sp-3);padding:10px;background:#fff;border-radius:var(--r-lg);box-shadow:0 0 0 1px var(--c-border-light),0 4px 14px #0000000f;display:flex;align-items:center;justify-content:center}.qr-img{width:100%;height:100%;object-fit:contain}.qr-missing{width:100%;height:100%;border:1px dashed var(--c-border-strong);border-radius:var(--r-sm);background:var(--c-fill);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:var(--c-text-muted);font-size:var(--fs-sm)}.qr-missing-icon{font-size:30px;line-height:1;color:var(--c-border-strong)}.qr-name{display:flex;align-items:center;justify-content:center;gap:6px;font-size:var(--fs-md);font-weight:700;color:var(--c-text);letter-spacing:.3px}.qr-icon{font-size:var(--fs-lg);line-height:1}.qr-desc{margin-top:5px;font-size:var(--fs-sm);color:var(--c-text-muted);line-height:1.6}.qr-tip{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:var(--sp-5);padding:9px var(--sp-3);border-radius:var(--r-md);background:var(--c-primary-lighter);font-size:var(--fs-sm);color:var(--c-text-secondary)}.qr-tip-icon{font-size:var(--fs-base);line-height:1}.help-list{display:flex;flex-direction:column;gap:var(--sp-2)}.help-item{display:flex;gap:var(--sp-3);padding:10px var(--sp-3);border-radius:var(--r-md);background:var(--c-fill)}.help-q{flex:none;width:92px;font-size:var(--fs-base);font-weight:600;color:var(--c-text-secondary)}.help-a{flex:1;font-size:var(--fs-base);color:var(--c-text);line-height:1.7}@media (max-width: 640px){.login-page{flex-direction:column}.login-links{position:static;flex-wrap:wrap;justify-content:center;margin-bottom:var(--sp-4)}.login-brand-top{position:static;justify-content:center;margin-bottom:var(--sp-2)}.qr-pair{flex-direction:column;align-items:center}.qr-card{width:100%;max-width:280px}}@media (max-width: 1024px){.sidebar{transform:translate(-100%);transition:transform var(--t-base);box-shadow:var(--sh-modal)}.sidebar.open{transform:translate(0)}.main{margin-left:0}.hamburger{display:flex}.drawer-mask.show{display:block}.topbar-left .breadcrumb{display:none}}@media (max-width: 640px){.topbar{padding:0 var(--sp-4)}.content{padding:var(--sp-4) var(--sp-4) var(--sp-8)}.topbar-left h1{font-size:var(--fs-lg)}.user-chip .meta{display:none}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;height:32px;padding:0 var(--sp-4);border-radius:var(--r-md);border:1px solid var(--c-border-strong);background:var(--c-surface);color:var(--c-text-secondary);font-size:var(--fs-base);white-space:nowrap;transition:all var(--t-fast)}.btn:hover:not(:disabled){border-color:var(--c-primary);color:var(--c-primary)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.primary{background:linear-gradient(135deg,var(--c-primary),var(--c-primary-dark));border-color:transparent;color:#fff;box-shadow:0 4px 14px #1f8a4c4d}.btn.primary:hover:not(:disabled){background:linear-gradient(135deg,var(--c-primary-dark),var(--c-primary-deeper));border-color:transparent;color:#fff}.btn.accent{background:linear-gradient(135deg,var(--c-accent),var(--c-accent-dark));border-color:transparent;color:#fff;box-shadow:0 4px 14px #f259054d}.btn.accent:hover:not(:disabled){background:linear-gradient(135deg,var(--c-accent-dark),#d34a04);border-color:transparent;color:#fff}.btn.danger{border-color:#fbc4c4;color:var(--c-danger)}.btn.danger:hover:not(:disabled){background:var(--c-danger-bg);border-color:var(--c-danger);color:var(--c-danger)}.btn.text{border-color:transparent;background:transparent;padding:0 var(--sp-2);height:26px}.btn.text:hover:not(:disabled){background:var(--c-primary-light)}.btn.lg{height:38px;padding:0 var(--sp-6);font-size:var(--fs-lg)}.btn.sm{height:27px;padding:0 10px;font-size:var(--fs-sm)}.link-action{color:var(--c-primary);font-size:var(--fs-base);transition:opacity var(--t-fast)}.link-action:hover{opacity:.75}.link-action.danger{color:var(--c-danger)}.link-action+.link-action{margin-left:var(--sp-3)}.tag{display:inline-flex;align-items:center;gap:4px;padding:2px 10px;border-radius:var(--r-pill);font-size:var(--fs-sm);font-weight:600;line-height:1.6;white-space:nowrap}.tag.success{background:var(--c-success-bg);color:var(--c-success)}.tag.warning{background:var(--c-warning-bg);color:var(--c-warning)}.tag.danger{background:var(--c-danger-bg);color:var(--c-danger)}.tag.info{background:var(--c-info-bg);color:var(--c-info)}.tag.neutral{background:var(--c-fill-hover);color:var(--c-text-muted)}.tag.accent{background:var(--c-accent-light);color:var(--c-accent)}.tag.purple{background:var(--c-purple-light);color:var(--c-purple)}.status-dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:6px;vertical-align:middle}.status-dot.green{background:var(--c-success)}.status-dot.orange{background:var(--c-warning)}.status-dot.red{background:var(--c-danger)}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-4);margin-bottom:var(--sp-4);flex-wrap:wrap}.page-head .desc{font-size:var(--fs-base);color:var(--c-text-muted);margin-top:2px}.page-head-actions{display:flex;gap:var(--sp-2);flex-wrap:wrap}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-4);margin-bottom:var(--sp-5)}@media (max-width: 1280px){.stat-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width: 560px){.stat-grid{grid-template-columns:1fr}}.stat-card{position:relative;overflow:hidden;background:var(--c-surface);border-radius:var(--r-lg);padding:var(--sp-5);box-shadow:var(--sh-card);border:1px solid var(--c-border);transition:transform var(--t-base),box-shadow var(--t-base)}.stat-card:hover{transform:translateY(-2px);box-shadow:var(--sh-raised)}.stat-card:after{content:"";position:absolute;right:-26px;top:-26px;width:96px;height:96px;border-radius:50%;background:var(--c-primary);opacity:.07;pointer-events:none}.stat-card[data-tone=green]:after{background:var(--c-primary)}.stat-card[data-tone=orange]:after{background:var(--c-accent)}.stat-card[data-tone=purple]:after{background:var(--c-purple)}.stat-card[data-tone=blue]:after{background:var(--c-info)}.stat-card[data-tone=red]:after{background:var(--c-danger)}.stat-card .top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-3)}.stat-card .label{font-size:var(--fs-base);color:var(--c-text-muted)}.stat-card .icon{width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:var(--fs-2xl);flex-shrink:0}.stat-card .icon.green{background:var(--c-primary-light)}.stat-card .icon.orange{background:var(--c-accent-light)}.stat-card .icon.blue{background:var(--c-info-bg)}.stat-card .icon.red{background:var(--c-danger-bg)}.stat-card .icon.purple{background:var(--c-purple-light)}.stat-card .value{margin-top:10px;font-size:var(--fs-3xl);font-weight:700;line-height:1.15;letter-spacing:-.5px;text-align:center;animation:stat-value-in .42s ease-out both}.stat-card .value.danger{color:var(--c-danger)}.stat-card .value.success{color:var(--c-success)}.stat-card .value.info{color:var(--c-info)}.stat-card .value.primary{color:var(--c-primary)}@keyframes stat-value-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){.stat-card .value{animation:none}}.stat-card .foot{margin-top:6px;font-size:var(--fs-sm);color:var(--c-text-muted);text-align:center}.stat-card .foot .up{color:var(--c-success)}.stat-card .foot .down{color:var(--c-danger)}.card{background:var(--c-surface);border-radius:var(--r-lg);box-shadow:var(--sh-card);border:1px solid var(--c-border)}.card-head{padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--c-border);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap}.card-head h3{font-size:var(--fs-lg);font-weight:600}.card-head h3 .count{font-size:var(--fs-sm);color:var(--c-text-muted);font-weight:400;margin-left:6px}.card-head .extra{font-size:var(--fs-sm);color:var(--c-text-muted)}.card-body{padding:var(--sp-5)}.split-grid{display:grid;grid-template-columns:2fr 1fr;gap:var(--sp-4);margin-bottom:var(--sp-5)}.filter-bar{background:var(--c-surface);border-radius:var(--r-lg);box-shadow:var(--sh-card);padding:var(--sp-4) var(--sp-5);display:flex;align-items:flex-end;gap:var(--sp-4);flex-wrap:wrap;margin-bottom:var(--sp-4)}.filter-item{display:flex;flex-direction:column;gap:5px}.filter-item>label{font-size:var(--fs-sm);color:var(--c-text-muted)}.filter-actions{margin-left:auto;display:flex;gap:var(--sp-2)}.quick-range{display:inline-flex;align-items:center;gap:2px;height:32px;padding:2px;background:var(--c-fill);border:1px solid var(--c-border-strong);border-radius:var(--r-md)}.quick-range button{height:100%;padding:0 12px;border:0;border-radius:calc(var(--r-md) - 1px);background:transparent;font-size:var(--fs-sm);color:var(--c-text-secondary);cursor:pointer;transition:background var(--t-fast),color var(--t-fast),box-shadow var(--t-fast)}.quick-range button:hover{background:var(--c-fill-hover);color:var(--c-text)}.quick-range button.active{background:var(--c-surface);color:var(--c-primary);font-weight:600;box-shadow:0 1px 3px #00000014}.input,.select,.textarea{height:32px;min-width:140px;padding:0 10px;border:1px solid var(--c-border-strong);border-radius:var(--r-md);background:var(--c-surface);color:var(--c-text);font-size:var(--fs-base);outline:none;transition:border-color var(--t-fast)}.textarea{height:auto;min-height:72px;padding:8px 10px;resize:vertical;line-height:1.6}.input:focus,.select:focus,.textarea:focus{border-color:var(--c-primary)}.input::placeholder,.textarea::placeholder{color:var(--c-text-placeholder)}.input:disabled,.select:disabled{background:var(--c-fill-hover);color:var(--c-text-muted);cursor:not-allowed}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 5 5-5' fill='none' stroke='%23909399' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:28px;cursor:pointer}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-4)}.form-field{display:flex;flex-direction:column;gap:6px}.form-field.full{grid-column:1 / -1}.form-field>label{font-size:var(--fs-base);color:var(--c-text-secondary);font-weight:500}.form-field>label .required{color:var(--c-danger);margin-left:2px}.form-field .input,.form-field .select,.form-field .textarea{min-width:0;width:100%}.form-field .hint{font-size:var(--fs-sm);color:var(--c-text-muted)}.table-wrap{width:100%;overflow-x:auto}table.data-table{width:100%;min-width:720px}table.data-table th{text-align:center;padding:12px var(--sp-4);font-size:var(--fs-base);font-weight:600;color:var(--c-text-secondary);background:var(--c-fill);border-bottom:1px solid var(--c-border);white-space:nowrap}table.data-table td{padding:12px var(--sp-4);font-size:var(--fs-base);border-bottom:1px solid var(--c-border-light);vertical-align:middle}table.data-table tbody tr:hover td{background:var(--c-primary-lighter)}table.data-table tbody tr:last-child td{border-bottom:none}table.data-table .col-actions,table.data-table .cell-nowrap{white-space:nowrap}.cell-strong{font-weight:600}.cell-muted{color:var(--c-text-muted);font-size:var(--fs-sm)}.cell-money{color:var(--c-accent);font-weight:600}.cell-product{display:flex;align-items:center;gap:10px}.cell-product .thumb{width:34px;height:34px;border-radius:var(--r-md);background:var(--c-primary-light);display:flex;align-items:center;justify-content:center;font-size:var(--fs-xl);flex-shrink:0;overflow:hidden}.cell-product .thumb__img{width:100%;height:100%;object-fit:cover}.image-upload{display:flex}.image-upload__empty{width:96px;height:96px;border:1px dashed var(--c-border-strong);border-radius:var(--r-md);background:var(--c-bg);color:var(--c-text-muted);font-size:var(--fs-sm);cursor:pointer;transition:border-color .15s ease,color .15s ease}.image-upload__empty:hover{border-color:var(--c-primary);color:var(--c-primary)}.image-upload__empty:disabled{opacity:.6;cursor:not-allowed}.image-upload__preview{position:relative;width:96px;height:96px;border-radius:var(--r-md);overflow:hidden;border:1px solid var(--c-border)}.image-upload__preview img{width:100%;height:100%;object-fit:cover}.image-upload__remove{position:absolute;top:4px;right:4px;width:20px;height:20px;border-radius:50%;border:none;background:#0000008c;color:#fff;font-size:14px;line-height:20px;text-align:center;cursor:pointer;padding:0}.image-upload__remove:hover{background:#000000bf}.cell-product .name{font-weight:500}.cell-product .sub{font-size:var(--fs-xs);color:var(--c-text-muted);margin-top:1px}.table-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--c-border);flex-wrap:wrap}.table-toolbar h3{font-size:var(--fs-lg);font-weight:600}.table-toolbar .count{font-size:var(--fs-sm);color:var(--c-text-muted);font-weight:400;margin-left:6px}.table-toolbar .actions{display:flex;gap:var(--sp-2);flex-wrap:wrap}.tabs{display:flex;gap:0;background:var(--c-surface);border-bottom:1px solid var(--c-border);border-radius:var(--r-lg) var(--r-lg) 0 0;padding:0 var(--sp-5);overflow-x:auto}.tab{padding:14px var(--sp-5);font-size:var(--fs-md);color:var(--c-text-secondary);position:relative;white-space:nowrap;transition:color var(--t-fast)}.tab:hover{color:var(--c-primary)}.tab.active{color:var(--c-primary);font-weight:600}.tab.active:after{content:"";position:absolute;bottom:-1px;left:50%;transform:translate(-50%);width:32px;height:3px;border-radius:2px;background:var(--c-primary)}.pagination{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);padding:var(--sp-4) var(--sp-5);flex-wrap:wrap}.pagination .total{font-size:var(--fs-base);color:var(--c-text-secondary)}.page-btns{display:flex;gap:var(--sp-1);flex-wrap:wrap}.page-btn{min-width:32px;height:32px;padding:0 8px;border:1px solid var(--c-border-strong);border-radius:var(--r-sm);background:var(--c-surface);color:var(--c-text-secondary);font-size:var(--fs-base);display:inline-flex;align-items:center;justify-content:center;transition:all var(--t-fast)}.page-btn:hover:not(:disabled){border-color:var(--c-primary);color:var(--c-primary)}.page-btn.active{background:var(--c-primary);border-color:var(--c-primary);color:#fff}.page-btn:disabled{opacity:.45;cursor:not-allowed}.page-btn.ellipsis{border-color:transparent;cursor:default}.state-block{padding:56px var(--sp-6);text-align:center;color:var(--c-text-muted)}.state-block .icon{font-size:40px;margin-bottom:var(--sp-3);opacity:.7}.state-block .title{font-size:var(--fs-md);color:var(--c-text-secondary);margin-bottom:6px}.state-block .desc{font-size:var(--fs-base)}.spinner{width:22px;height:22px;border:2.5px solid var(--c-primary-light);border-top-color:var(--c-primary);border-radius:50%;animation:spin .7s linear infinite;margin:0 auto var(--sp-3)}@keyframes spin{to{transform:rotate(360deg)}}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:flex-start;justify-content:center;padding:6vh var(--sp-4) var(--sp-6);overflow-y:auto;z-index:100;animation:fade-in var(--t-base)}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.modal{width:100%;max-width:560px;background:var(--c-surface);border-radius:var(--r-xl);box-shadow:var(--sh-modal);animation:modal-up var(--t-base)}.modal.wide{max-width:760px}.modal.xwide{max-width:1040px}.modal.dense{max-height:calc(100vh - 96px);display:flex;flex-direction:column}.modal.dense .modal-body{min-height:0;overflow-y:auto;padding:var(--sp-3) var(--sp-5)}.modal.dense .modal-head,.modal.dense .modal-foot{padding:var(--sp-3) var(--sp-5)}.modal-mask:has(.modal.dense){padding-top:var(--sp-5);padding-bottom:var(--sp-5)}@keyframes modal-up{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.modal-head{padding:var(--sp-5) var(--sp-6);border-bottom:1px solid var(--c-border);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4)}.modal-head h3{font-size:var(--fs-lg);font-weight:600}.modal-close{width:30px;height:30px;border-radius:var(--r-md);color:var(--c-text-muted);font-size:var(--fs-xl);display:flex;align-items:center;justify-content:center}.modal-close:hover{background:var(--c-fill-hover);color:var(--c-text)}.modal-body{padding:var(--sp-6)}.modal-foot{padding:var(--sp-4) var(--sp-6) var(--sp-5);border-top:1px solid var(--c-border);display:flex;justify-content:flex-end;gap:var(--sp-2)}.modal-foot-check{display:flex;align-items:center;gap:6px;margin-right:auto;font-size:var(--fs-sm);color:var(--c-text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none}.modal-foot-check input{width:15px;height:15px;margin:0;accent-color:var(--c-primary);cursor:pointer}.modal-foot-check:hover{color:var(--c-text)}.detail-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-3) var(--sp-5)}.detail-list .row{display:flex;gap:6px;font-size:var(--fs-base);align-items:baseline}.detail-list .row .k{color:var(--c-text-muted);flex-shrink:0}.detail-list .row .v{color:var(--c-text);font-weight:500;word-break:break-all}.detail-list .row.full{grid-column:1 / -1}.toast-container{position:fixed;top:24px;left:50%;transform:translate(-50%);z-index:200;display:flex;flex-direction:column;gap:var(--sp-3);pointer-events:none}.toast{min-width:260px;max-width:520px;padding:13px var(--sp-5);border-radius:var(--r-lg);background:var(--c-surface);box-shadow:0 8px 24px #0000001f;border-left:4px solid var(--c-info);font-size:var(--fs-lg);font-weight:600;color:var(--c-text);display:flex;align-items:center;gap:var(--sp-3);animation:toast-in var(--t-base)}@keyframes toast-in{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.toast.success{border-left-color:var(--c-success);background:var(--c-success-bg)}.toast.error{border-left-color:var(--c-danger);background:var(--c-danger-bg)}.toast.warning{border-left-color:var(--c-warning);background:var(--c-warning-bg)}.text-muted{color:var(--c-text-muted)}.text-danger{color:var(--c-danger)}.text-success{color:var(--c-success)}.text-accent{color:var(--c-accent)}.mb-4{margin-bottom:var(--sp-4)}.mb-5{margin-bottom:var(--sp-5)}.mt-3{margin-top:var(--sp-3)}.flex-row{display:flex;align-items:center;gap:var(--sp-2)}@media (max-width: 1200px){.stat-grid{grid-template-columns:repeat(2,1fr)}.split-grid{grid-template-columns:1fr}}@media (max-width: 720px){.stat-grid,.form-grid,.detail-list{grid-template-columns:1fr}.filter-bar{padding:var(--sp-4)}.filter-item,.filter-item .input,.filter-item .select{width:100%;min-width:0}.filter-actions{margin-left:0;width:100%}.filter-actions .btn{flex:1}.page-head-actions{width:100%}.page-head-actions .btn{flex:1}.modal-body{padding:var(--sp-4)}.modal-head,.modal-foot{padding-left:var(--sp-4);padding-right:var(--sp-4)}}@media (min-width: 1366px){.stat-grid--5{grid-template-columns:repeat(5,minmax(0,1fr))}.stat-grid--5 .stat-card{padding:var(--sp-4) var(--sp-3)}.stat-grid--5 .stat-card .icon{width:32px;height:32px;border-radius:10px;font-size:var(--fs-xl)}.stat-grid--5 .stat-card .value{margin-top:8px}.stat-grid--5 .stat-card .foot{font-size:var(--fs-xs)}}@media (max-width: 1365px){.stat-grid--5{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width: 900px){.stat-grid--5{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 560px){.stat-grid--5{grid-template-columns:minmax(0,1fr)}}.confirm-message{font-size:var(--fs-md);line-height:1.8;color:var(--c-text-secondary)}.success-dialog{display:flex;flex-direction:column;align-items:center;text-align:center;padding:var(--sp-2) 0 var(--sp-3)}.success-badge{width:66px;height:66px;margin-bottom:var(--sp-4);border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;background:linear-gradient(135deg,var(--c-success),var(--c-primary));box-shadow:0 8px 22px #67c23a52}.success-message{font-size:var(--fs-xl);font-weight:700;color:var(--c-text);line-height:1.6}.success-details{width:100%;margin-top:var(--sp-4);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-lg);background:var(--c-primary-lighter);border:1px solid var(--c-primary-border)}.success-row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3);padding:7px 0;border-bottom:1px dashed var(--c-primary-border)}.success-row:last-child{border-bottom:none}.success-row-k{font-size:var(--fs-md);color:var(--c-text-secondary)}.success-row-v{font-size:var(--fs-md);font-weight:700;color:var(--c-text);font-variant-numeric:tabular-nums}.success-row-v.highlight{font-size:var(--fs-2xl);color:var(--c-primary-dark)}.success-foot{display:flex;align-items:center;justify-content:flex-end;gap:var(--sp-3);width:100%}.auto-print-notice{position:fixed;right:20px;top:76px;z-index:1200;max-width:420px;display:flex;align-items:center;gap:12px;padding:12px 16px;background:#fff7e6;border:1px solid #ffd591;border-radius:8px;color:#ad6800;font-size:13px;line-height:1.6;box-shadow:0 4px 16px #0000001f}.auto-print-notice button{border:1px solid #ad6800;background:transparent;color:#ad6800;border-radius:4px;padding:3px 12px;font-size:12px;cursor:pointer;flex:none}.auto-print-notice button:hover{background:#fff1cc}.auto-print-notice--error{background:#fff1f0;border-color:#ffa39e;color:#a8071a}.auto-print-notice--error button{border-color:#a8071a;color:#a8071a}.auto-print-notice--error button:hover{background:#ffccc7}.agent-check{margin-bottom:var(--sp-4)}.agent-check-empty{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-5);color:var(--c-text-muted);font-size:var(--fs-base)}.agent-check-body{padding:0 var(--sp-5) var(--sp-5)}.agent-check-summary{padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);border-left:3px solid var(--c-success);background:var(--c-success-bg);margin-bottom:var(--sp-4)}.agent-check-summary .line{font-size:var(--fs-md);font-weight:600;color:var(--c-text);line-height:1.6}.agent-check-summary .meta{margin-top:var(--sp-1);font-size:var(--fs-sm);color:var(--c-text-muted)}.agent-check-summary.degraded,.agent-check-summary.offline{border-left-color:var(--c-danger);background:var(--c-danger-bg)}.agent-check-summary.legacy{border-left-color:var(--c-warning);background:var(--c-warning-bg)}.agent-check-list{list-style:none;margin:0 0 var(--sp-4);padding:0;border:1px solid var(--c-border);border-radius:var(--r-md);overflow:hidden}.agent-check-list li{display:flex;align-items:baseline;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);font-size:var(--fs-base);border-bottom:1px solid var(--c-border-light)}.agent-check-list li:last-child{border-bottom:none}.agent-check-list .mark{flex:none;width:14px;font-weight:700}.agent-check-list .label{flex:none;width:190px;color:var(--c-text-secondary)}.agent-check-list .detail{flex:1;min-width:0;color:var(--c-text-muted);word-break:break-all}.agent-check-list li.ok .mark{color:var(--c-success)}.agent-check-list li.bad{background:var(--c-danger-bg)}.agent-check-list li.bad .mark{color:var(--c-danger)}.agent-check-list li.bad .label{color:var(--c-danger);font-weight:600}.agent-check-list li.bad .detail{color:var(--c-text-secondary)}.agent-check-lastjob{display:flex;align-items:baseline;gap:var(--sp-3);padding:var(--sp-2) 0;font-size:var(--fs-base)}.agent-check-lastjob .label{flex:none;width:190px;color:var(--c-text-secondary)}.agent-check-lastjob .detail{flex:1;min-width:0}.agent-check-lastjob.ok .detail{color:var(--c-text-muted)}.agent-check-lastjob.bad .detail{color:var(--c-danger)}.agent-check-advice{margin-top:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);background:var(--c-fill);border:1px solid var(--c-border);color:var(--c-text-secondary);font-size:var(--fs-base);line-height:1.7}.agent-check-token{margin-top:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);border:1px dashed var(--c-border-strong);background:var(--c-fill)}.agent-check-token .head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-4);margin-bottom:var(--sp-2)}.agent-check-token .head .text{display:flex;flex-direction:column;gap:2px;min-width:0;font-size:var(--fs-base)}.agent-check-token pre{margin:0;padding:var(--sp-3);border-radius:var(--r-sm);background:var(--c-fill);border:1px solid var(--c-border);font-family:Consolas,Menlo,monospace;font-size:var(--fs-sm);line-height:1.7;white-space:pre-wrap;word-break:break-all}.agent-check-download{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);margin-top:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-md);border:1px dashed var(--c-border-strong);background:var(--c-fill)}.agent-check-download .text{display:flex;flex-direction:column;gap:2px;min-width:0;font-size:var(--fs-base)}.agent-check-download .text strong{color:var(--c-text)}.agent-check-download .text .cell-muted{word-break:break-all}.agent-check-download.prominent{border-style:solid;border-color:var(--c-primary-border);background:var(--c-primary-lighter)}.agent-check-download .btn{flex:none;text-decoration:none}.agent-collapse-toggle{display:inline-flex;align-items:center;gap:8px;padding:0;border:0;background:none;font:inherit;color:inherit;cursor:pointer;vertical-align:middle}.agent-collapse-toggle:hover .title{color:var(--c-primary)}.agent-collapse-toggle .title{font-size:var(--fs-lg);font-weight:600}.chevron{flex:none;width:0;height:0;border-left:5px solid var(--c-text-muted);border-top:4px solid transparent;border-bottom:4px solid transparent;transition:transform .18s ease}.chevron.open{transform:rotate(90deg)}.agent-section{border:1px solid var(--c-border);border-radius:var(--r-md);margin-bottom:var(--sp-3);overflow:hidden}.agent-section:last-child{margin-bottom:0}.agent-section-head{display:flex;align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-3) var(--sp-4);border:0;background:var(--c-fill);font:inherit;text-align:left;cursor:pointer}.agent-section-head:hover{background:var(--c-surface)}.agent-section-head .title{font-size:var(--fs-base);font-weight:600;color:var(--c-text)}.agent-section-head .summary{margin-left:auto;font-size:var(--fs-sm);color:var(--c-text-muted)}.agent-section-head .summary.ok{color:var(--c-success)}.agent-section-head .summary.bad{color:var(--c-danger)}.agent-section-body{padding:var(--sp-4);border-top:1px solid var(--c-border)}.agent-section-body>:last-child{margin-bottom:0}.chart{padding-top:var(--sp-2)}.chart-bars{display:flex;align-items:flex-end;gap:var(--sp-3);height:240px;padding-top:22px;border-bottom:1px solid var(--c-border-light)}.chart-col{flex:1;min-width:0;height:100%;display:flex;flex-direction:column;align-items:center;gap:6px}.chart-value{position:absolute;left:50%;transform:translate(-50%);white-space:nowrap;font-size:var(--fs-xs);font-weight:600;color:var(--c-text);font-variant-numeric:tabular-nums;animation:chart-value-in .28s ease both}@keyframes chart-value-in{0%{opacity:0;transform:translate(-50%,5px)}to{opacity:1;transform:translate(-50%)}}.chart-col:hover .chart-value{color:var(--c-primary)}.chart-value.zero{color:var(--c-text-placeholder);font-weight:400}.chart-bar-track{position:relative;flex:1;width:100%;max-width:38px;display:flex;align-items:flex-end;justify-content:center}.chart-bar{width:100%;border-radius:6px 6px 0 0;background:var(--c-primary);transition:height var(--t-base),background var(--t-fast);min-height:4px;transform-origin:center bottom;animation:chart-bar-grow .62s cubic-bezier(.22,1,.36,1) both}@keyframes chart-bar-grow{0%{transform:scaleY(0);opacity:.35}to{transform:scaleY(1);opacity:1}}@media (prefers-reduced-motion: reduce){.chart-bar,.chart-value{animation:none}}.chart-col:hover .chart-bar{background:var(--c-primary-dark)}.chart-label{font-size:var(--fs-xs);color:var(--c-text-muted);white-space:nowrap}.chart-axis-note{margin-top:var(--sp-3);padding-top:var(--sp-3);border-top:1px solid var(--c-border-light);font-size:var(--fs-sm);color:var(--c-text-muted)}.finance-note{margin:0;padding:var(--sp-3) var(--sp-5);font-size:var(--fs-sm);color:var(--c-text-muted);line-height:1.6}.chart-switch{display:inline-flex;align-items:center;gap:2px;padding:2px;background:var(--c-fill);border:1px solid var(--c-border);border-radius:var(--r-pill)}.chart-switch-item{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 11px;border-radius:var(--r-pill);font-size:var(--fs-sm);color:var(--c-text-secondary);transition:background var(--t-fast),color var(--t-fast),box-shadow var(--t-fast)}.chart-switch-item:hover{background:var(--c-fill-hover);color:var(--c-text)}.chart-switch-item.active{background:var(--c-surface);color:var(--c-primary);font-weight:600;box-shadow:0 1px 3px #00000014}.trend-svg{display:block;width:100%;height:auto}.trend-svg-grid{stroke:var(--c-border);stroke-width:1;stroke-dasharray:3 5}.trend-svg-baseline{stroke:var(--c-border-strong);stroke-width:1}.trend-svg-axis{font-size:10px;fill:var(--c-text-placeholder)}.trend-svg-area{stroke:none}.trend-svg-line{fill:none;stroke:var(--c-primary);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}.trend-svg-dot{fill:var(--c-surface);stroke:var(--c-primary);stroke-width:2.5}.trend-svg-value{font-size:11px;font-weight:600;fill:var(--c-text);font-variant-numeric:tabular-nums}.trend-svg-value.zero{fill:var(--c-text-placeholder);font-weight:400}.trend-svg-label{font-size:11px;fill:var(--c-text-muted)}.trend-svg-total{font-size:17px;font-weight:700;fill:var(--c-primary);font-variant-numeric:tabular-nums}.trend-svg-slice{stroke:var(--c-surface);stroke-width:3;transition:fill var(--t-fast)}.trend-svg-slice.solid{stroke:none}.trend-svg-leader{fill:none;stroke:var(--c-border-strong);stroke-width:1}.trend-svg-empty{fill:none;stroke:var(--c-border)}.rank-list{display:flex;flex-direction:column}.rank-row{display:flex;align-items:center;gap:var(--sp-3);padding:10px 0;border-bottom:1px solid var(--c-border-light)}.rank-row:last-child{border-bottom:none}.rank-row .rank{width:24px;height:24px;border-radius:var(--r-md);background:var(--c-fill-hover);color:var(--c-text-muted);display:flex;align-items:center;justify-content:center;font-size:var(--fs-sm);font-weight:600;flex-shrink:0}.rank-row:nth-child(1) .rank{background:var(--c-accent-light);color:var(--c-warning)}.rank-row:nth-child(2) .rank{background:#eef2f7;color:var(--c-text-secondary)}.rank-row:nth-child(3) .rank{background:var(--c-danger-bg);color:var(--c-danger)}.rank-row .emoji{font-size:var(--fs-2xl);flex-shrink:0}.rank-row .info{flex:1;min-width:0}.rank-row .name{font-size:var(--fs-base);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rank-row .sub{font-size:var(--fs-xs);color:var(--c-text-muted);margin-top:2px}.rank-row .amount{font-size:var(--fs-base);font-weight:600;color:var(--c-accent);flex-shrink:0}.settings-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-4);align-items:start}.item-lines{border:1px solid var(--c-border);border-radius:var(--r-lg);overflow:hidden}.item-lines__head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-2)}.item-lines__head>label{font-size:var(--fs-sm);color:var(--c-text-muted)}.item-lines--prep .item-line{grid-template-columns:30px minmax(0,1fr) 64px 88px 76px 120px 30px}.item-lines--prep .col-no{color:var(--c-text-muted);font-size:var(--fs-sm);text-align:center}.item-lines--prep .col-unit{font-size:var(--fs-sm);color:var(--c-text-secondary);text-align:center}.item-lines--prep .item-line .col-unit .input{text-align:center;padding-left:4px;padding-right:4px}.item-lines--prep .item-line,.item-lines--prep .item-line .select,.item-lines--prep .item-line .col-price .input,.item-lines--prep .item-line .col-qty .input,.item-lines--prep .item-line .col-amount,.item-lines--prep .item-line .col-amount.amount{text-align:center}.item-lines--prep .item-line .remove{margin:0 auto}.item-lines--purchase .item-line{grid-template-columns:minmax(0,1fr) 88px 78px 96px 100px 34px}.item-lines--purchase .col-stock{text-align:center;font-size:var(--fs-sm)}.item-lines--purchase .col-stock .num{font-size:var(--fs-base);color:var(--c-text)}.modal.dense .item-lines{max-height:none;overflow:visible}.modal.dense .item-line{padding-top:7px;padding-bottom:7px}.modal.dense .item-lines .item-line.head{position:sticky;top:0;z-index:1}.item-line{display:grid;grid-template-columns:1fr 90px 80px 100px 34px;align-items:center;gap:var(--sp-3);padding:10px var(--sp-3);border-bottom:1px solid var(--c-border-light)}.item-line:last-child{border-bottom:none}.item-line.head{background:var(--c-fill);font-size:var(--fs-sm);color:var(--c-text-muted)}.item-line .remove{width:26px;height:26px;border-radius:var(--r-md);color:var(--c-text-muted);display:flex;align-items:center;justify-content:center}.item-line .remove:hover{background:var(--c-danger-bg);color:var(--c-danger)}.item-line .amount{text-align:right;font-weight:600;color:var(--c-accent)}.item-picker{display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:center}.item-picker .select{flex:1;min-width:0}.item-picker .no-product-hint{flex-basis:100%;width:100%;font-size:var(--fs-xs);line-height:1.4;color:var(--c-danger);text-align:center}.item-line .col-price .input,.item-line .col-qty .input,.item-line .col-unit .input,.item-line .col-amount .input{min-width:0;width:100%}.ocr-drop{display:flex;flex-direction:column;gap:4px;margin-bottom:var(--sp-3);padding:var(--sp-3) var(--sp-4);border:1px dashed var(--c-success);border-radius:var(--r-md);background:var(--c-success-bg);font-size:var(--fs-sm);color:var(--c-text-secondary);transition:border-color .15s,background .15s,color .15s}.ocr-drop__row{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap}.ocr-drop__row .btn{flex-shrink:0}.ocr-drop.active{border-color:var(--c-success);background:#e2f4d3;color:var(--c-text)}.ocr-drop.loading{color:var(--c-primary)}.ocr-block__head{display:flex;align-items:baseline;gap:var(--sp-3);flex-wrap:wrap;margin-bottom:var(--sp-2)}.ocr-block__head>label{flex-shrink:0;font-size:var(--fs-sm);color:var(--c-text-muted)}.ocr-block__hint{font-size:var(--fs-xs);color:var(--c-text-muted);line-height:1.5}.ocr-drop__note{color:var(--c-text)}.ocr-text{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3)}@media (min-width: 721px){.modal.xwide .ocr-block{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:var(--sp-2) var(--sp-3);align-items:stretch}.modal.xwide .ocr-block__head{grid-column:1 / -1;margin-bottom:0}.modal.xwide .ocr-block .ocr-drop,.modal.xwide .ocr-block .ocr-text{margin-bottom:0}.modal.xwide .ocr-block .ocr-text{padding:var(--sp-3) var(--sp-4);border:1px dashed var(--c-border-strong);border-radius:var(--r-md);background:var(--c-fill)}}.ocr-text .input{flex:1 1 auto;min-width:0;font-size:var(--fs-sm)}.ocr-text .btn{flex-shrink:0}.row-flag{flex-shrink:0;width:16px;height:16px;border-radius:50%;background:var(--c-warning);color:#fff;font-size:var(--fs-xs);font-weight:700;line-height:16px;text-align:center;cursor:help}.row-flag.error{background:var(--c-danger)}.summary-row{display:flex;justify-content:flex-end;gap:var(--sp-6);padding:var(--sp-4) 0 0;margin-top:var(--sp-4);border-top:1px solid var(--c-border)}.modal.dense .form-grid{gap:var(--sp-3) var(--sp-4)}@media (min-width: 721px){.modal.xwide .form-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}.modal.dense .summary-row{padding-top:var(--sp-3);margin-top:var(--sp-3);position:sticky;bottom:0;background:var(--c-surface)}.modal.dense .summary-row .v{font-size:var(--fs-lg)}.summary-row .item{text-align:right}.summary-row .k{font-size:var(--fs-sm);color:var(--c-text-muted)}.summary-row .v{font-size:var(--fs-xl);font-weight:700;color:var(--c-text);margin-top:2px}.summary-row .v.highlight{color:var(--c-accent)}.integration-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-3)}.integration-item{border:1px solid var(--c-border);border-radius:var(--r-lg);padding:var(--sp-4)}.integration-item .head{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.integration-item .head .name{font-size:var(--fs-md);font-weight:600;color:var(--c-text)}.integration-item .purpose{margin-top:6px;font-size:var(--fs-sm);color:var(--c-text-muted);line-height:1.6}.integration-item .fields{margin-top:10px;padding-top:10px;border-top:1px dashed var(--c-border);display:flex;flex-direction:column;gap:4px}.integration-item .field{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);font-size:var(--fs-sm)}.integration-item .field .k{color:var(--c-text-muted);font-family:SFMono-Regular,Consolas,monospace;font-size:var(--fs-xs)}.integration-item .field .v{color:var(--c-text-secondary);font-family:SFMono-Regular,Consolas,monospace;font-size:var(--fs-xs);word-break:break-all;text-align:right}.integration-item .field .v.empty{color:var(--c-text-placeholder)}.integration-item .result{margin-top:10px;padding:6px 10px;border-radius:var(--r-md);font-size:var(--fs-sm);line-height:1.6}.integration-item .result.ok{background:var(--c-success-bg);color:var(--c-success)}.integration-item .result.fail{background:var(--c-danger-bg);color:var(--c-danger)}.integration-tip{margin-top:var(--sp-4);padding-top:var(--sp-4);border-top:1px solid var(--c-border);font-size:var(--fs-sm);color:var(--c-text-muted);line-height:1.8}.integration-tip code{padding:1px 6px;margin:0 2px;border-radius:var(--r-sm);background:var(--c-fill-hover);color:var(--c-text-secondary);font-family:SFMono-Regular,Consolas,monospace;font-size:var(--fs-xs)}.complaint-bars{display:flex;flex-direction:column;gap:var(--sp-4)}.complaint-bar-row .bar-label{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3);margin-bottom:6px;font-size:var(--fs-sm);color:var(--c-text-secondary)}.complaint-bar-row .bar-label .num{color:var(--c-text-muted);white-space:nowrap}.complaint-bar-track{height:10px;border-radius:var(--r-pill);background:var(--c-fill-hover);overflow:hidden}.complaint-bar-fill{height:100%;min-width:2px;border-radius:var(--r-pill);background:linear-gradient(90deg,#66bb6a,var(--c-primary));transition:width var(--t-base)}.clamp-text{display:block;max-width:100%;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.complaint-images{display:grid;grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:var(--sp-2)}.complaint-image{width:100%;aspect-ratio:1 / 1;object-fit:cover;border-radius:var(--r-md);border:1px solid var(--c-border);background:var(--c-fill);cursor:zoom-in}.chat-thread{display:flex;flex-direction:column;gap:var(--sp-3)}.chat-item{display:flex;flex-direction:column;align-items:flex-start;gap:4px}.chat-item.staff{align-items:flex-end}.chat-item .chat-meta{font-size:var(--fs-xs);color:var(--c-text-muted);padding:0 4px}.chat-item .chat-bubble{max-width:78%;padding:10px var(--sp-4);border-radius:var(--r-lg);background:var(--c-fill-hover);color:var(--c-text);font-size:var(--fs-base);line-height:1.7;white-space:pre-wrap;word-break:break-word}.chat-item.staff .chat-bubble{background:var(--c-primary);color:#fff}@media (max-width: 1200px){.settings-grid,.integration-list{grid-template-columns:1fr}}@media (max-width: 720px){.chart-bars{height:180px;gap:3px;padding-top:18px}.chart-value{font-size:10px;font-weight:500}.item-line{grid-template-columns:1fr 70px 34px}.item-line .col-price,.item-line .col-amount{display:none}.summary-row{gap:var(--sp-4)}.import-head{flex-direction:column;gap:var(--sp-2)}.import-head .actions{width:100%}.import-summary{gap:var(--sp-2) var(--sp-4)}}.reject-reasons{display:flex;flex-direction:column;gap:var(--sp-2)}.reject-reason{display:flex;align-items:center;gap:var(--sp-3);width:100%;padding:10px var(--sp-4);border:1px solid var(--c-border-strong);border-radius:var(--r-md);background:var(--c-surface);color:var(--c-text);font-size:var(--fs-md);text-align:left;cursor:pointer;transition:border-color var(--t-fast),background var(--t-fast)}.reject-reason:hover{border-color:var(--c-primary-border);background:var(--c-primary-lighter)}.reject-reason.active{border-color:var(--c-primary);background:var(--c-primary-light);color:var(--c-primary-dark);font-weight:600}.reject-reason-dot{flex:none;width:14px;height:14px;border-radius:50%;border:1px solid var(--c-border-strong);background:var(--c-surface);box-shadow:inset 0 0 0 3px var(--c-surface);transition:background var(--t-fast),border-color var(--t-fast)}.reject-reason.active .reject-reason-dot{border-color:var(--c-primary);background:var(--c-primary)}.tmpl-tabs-card{padding:0;overflow:hidden;margin-bottom:var(--sp-4)}.tmpl-tabs-card .tabs{border-radius:var(--r-lg)}.tab .tmpl-dot{display:inline-block;width:6px;height:6px;margin-left:6px;border-radius:50%;background:var(--c-primary);vertical-align:middle}.tab .tmpl-dot.unsaved{background:var(--c-accent)}.tmpl-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:var(--sp-4);align-items:start}.tmpl-panel{display:flex;flex-direction:column;gap:var(--sp-4);min-width:0}.tmpl-panel .card-body{display:flex;flex-direction:column;gap:var(--sp-3)}.tmpl-hint{margin:0;font-size:var(--fs-sm);color:var(--c-text-muted);line-height:1.6}.tmpl-sub{margin-top:var(--sp-1);font-size:var(--fs-sm);font-weight:600;color:var(--c-text-secondary)}.tmpl-empty{padding:var(--sp-4);border:1px dashed var(--c-border-strong);border-radius:var(--r-md);text-align:center;font-size:var(--fs-sm);color:var(--c-text-muted)}.tmpl-fields{display:flex;flex-direction:column;gap:var(--sp-2)}.tmpl-field{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2);border:1px solid var(--c-border);border-radius:var(--r-md);background:var(--c-fill);transition:border-color var(--t-fast),box-shadow var(--t-fast)}.tmpl-field:hover{border-color:var(--c-primary-border);box-shadow:var(--sh-card)}.tmpl-idx{flex:none;width:22px;height:22px;border-radius:var(--r-sm);background:var(--c-primary-light);color:var(--c-primary-dark);font-size:var(--fs-xs);font-weight:600;line-height:22px;text-align:center}.tmpl-field .tmpl-label{flex:1;min-width:0;padding:5px 8px;font-size:var(--fs-base)}.tmpl-origin{flex:none;max-width:30%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:var(--fs-xs);color:var(--c-text-placeholder)}.tmpl-name{flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding-left:2px;font-size:var(--fs-base);color:var(--c-text)}.tmpl-axis{flex:none;width:12px;text-align:center;font-size:var(--fs-sm);color:var(--c-text-placeholder)}.tmpl-align{flex:none;display:inline-flex;border:1px solid var(--c-border-strong);border-radius:var(--r-sm);overflow:hidden}.tmpl-align button{width:24px;height:24px;border:0;background:var(--c-surface);color:var(--c-text-secondary);font-size:var(--fs-xs);line-height:1;cursor:pointer;transition:all var(--t-fast)}.tmpl-align button+button{border-left:1px solid var(--c-border)}.tmpl-align button:hover:not(.on){background:var(--c-primary-lighter);color:var(--c-primary-dark)}.tmpl-align button.on{background:var(--c-primary);color:#fff;font-weight:600}.tmpl-width{flex:none;display:inline-flex;align-items:center;gap:2px}.tmpl-width-value{min-width:46px;padding:0 var(--sp-1);text-align:center;font-size:var(--fs-xs);line-height:24px;color:var(--c-text-secondary);font-variant-numeric:tabular-nums}.tmpl-width-value i{margin-left:2px;font-style:normal;font-size:var(--fs-xs);color:var(--c-text-placeholder)}.tmpl-move{flex:none;display:flex;gap:2px}.tmpl-icon{width:24px;height:24px;border:1px solid var(--c-border-strong);border-radius:var(--r-sm);background:var(--c-surface);color:var(--c-text-secondary);font-size:var(--fs-sm);line-height:1;cursor:pointer;transition:all var(--t-fast)}.tmpl-icon:hover:not(:disabled){border-color:var(--c-primary);color:var(--c-primary)}.tmpl-icon:disabled{opacity:.4;cursor:not-allowed}.tmpl-icon.danger:hover:not(:disabled){border-color:var(--c-danger);color:var(--c-danger)}.tmpl-chips{display:flex;flex-wrap:wrap;gap:var(--sp-2)}.tmpl-chip{padding:5px 10px;border:1px dashed var(--c-border-strong);border-radius:var(--r-pill);background:var(--c-surface);color:var(--c-text-secondary);font-size:var(--fs-sm);cursor:pointer;transition:all var(--t-fast)}.tmpl-chip:hover{border-color:var(--c-primary);border-style:solid;background:var(--c-primary-lighter);color:var(--c-primary-dark)}.tmpl-align button:disabled{opacity:.45;cursor:not-allowed}.tmpl-checks{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--sp-2)}.tmpl-check{display:flex;align-items:flex-start;gap:var(--sp-2);padding:var(--sp-3);border:1px solid var(--c-border);border-radius:var(--r-md);background:var(--c-surface);cursor:pointer;transition:all var(--t-fast)}.tmpl-check:hover{border-color:var(--c-primary-border)}.tmpl-check.on{border-color:var(--c-primary);background:var(--c-primary-lighter)}.tmpl-check input{flex:none;width:15px;height:15px;margin-top:2px;accent-color:var(--c-primary);cursor:pointer}.tmpl-check-text{display:flex;flex-direction:column;gap:2px;min-width:0}.tmpl-check-label{font-size:var(--fs-base);color:var(--c-text)}.tmpl-check.on .tmpl-check-label{font-weight:600}.tmpl-check-hint{font-size:var(--fs-xs);color:var(--c-text-muted);line-height:1.5;overflow:hidden;text-overflow:ellipsis}.tmpl-signs{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-2)}.tmpl-sign{display:flex;align-items:center;gap:var(--sp-1)}.tmpl-sign .input{width:132px;padding:5px 8px;font-size:var(--fs-base)}.tmpl-preview{position:sticky;top:var(--sp-4);min-width:0}.tmpl-preview .card-head{gap:var(--sp-3);flex-wrap:wrap}.tmpl-preview .actions{display:flex;align-items:center;gap:var(--sp-2)}.tmpl-preview-body{position:relative;padding:var(--sp-4);background:var(--c-bg);border-radius:0 0 var(--r-lg) var(--r-lg)}.tmpl-paper{display:block;width:100%;height:640px;border:0;border-radius:var(--r-sm);background:#fff;box-shadow:0 2px 14px #0000001a}.tmpl-preview-loading{position:absolute;top:var(--sp-5);right:var(--sp-5);padding:3px 10px;border-radius:var(--r-pill);background:var(--c-primary);color:#fff;font-size:var(--fs-xs)}.tmpl-preview-error{padding:var(--sp-6);border:1px solid var(--c-danger);border-radius:var(--r-md);background:var(--c-danger-bg);color:var(--c-danger);font-size:var(--fs-base);text-align:center}@media (max-width: 1180px){.tmpl-split{grid-template-columns:minmax(0,1fr)}.tmpl-preview{position:static}.tmpl-paper{height:520px}}.item-line.return-in-line{grid-template-columns:1fr 84px 76px 76px 100px 34px}.item-line.return-in-line .col-refundable{text-align:right;font-size:var(--fs-sm);color:var(--c-text-muted)}.item-line.return-in-line .col-qty.over .input{border-color:var(--c-danger);color:var(--c-danger)}.amount-income{color:var(--c-primary);font-weight:600}.amount-expense{color:var(--c-danger);font-weight:600}.summary-row .v.income{color:var(--c-primary)}.summary-row .v.expense{color:var(--c-danger)}.detail-list .row .v.highlight{color:var(--c-accent);font-weight:700}@media (max-width: 720px){.item-line.return-in-line{grid-template-columns:1fr 70px 70px 34px}}.source-search{border:1px dashed var(--c-border-strong);border-radius:var(--r-lg);background:var(--c-fill);padding:var(--sp-3) var(--sp-4)}.source-search-head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-3)}.source-search-head strong{font-size:var(--fs-sm);color:var(--c-text-secondary)}.source-candidates{margin-top:var(--sp-3);max-height:300px;overflow-y:auto;border:1px solid var(--c-border);border-radius:var(--r-md);background:var(--c-surface)}.source-candidate{display:grid;grid-template-columns:1.1fr 96px 1fr 100px 1.6fr 72px;align-items:center;gap:var(--sp-3);padding:8px var(--sp-3);border-bottom:1px solid var(--c-border-light);font-size:var(--fs-sm)}.source-candidate:last-child{border-bottom:none}.source-candidate .c-no{font-weight:600;color:var(--c-text)}.source-candidate .c-muted{color:var(--c-text-muted)}.source-candidate .c-summary{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.source-empty{margin-top:var(--sp-3);padding:var(--sp-3);border:1px dashed var(--c-border-strong);border-radius:var(--r-md);text-align:center;font-size:var(--fs-sm);color:var(--c-text-muted)}@media (max-width: 720px){.source-candidate{grid-template-columns:1fr 80px 84px 64px}.source-candidate .c-party,.source-candidate .c-summary{display:none}}.param-layout{display:grid;grid-template-columns:220px 1fr;gap:var(--sp-4);align-items:start}.param-groups{padding:var(--sp-2);display:flex;flex-direction:column;gap:2px}.param-group-item{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;padding:10px 12px;border:0;border-radius:8px;background:transparent;font-size:var(--fs-sm);color:var(--c-text);cursor:pointer;text-align:left;transition:background var(--t-fast)}.param-group-item:hover{background:var(--c-fill-hover)}.param-group-item.active{background:var(--c-primary);color:#fff;font-weight:600}.param-group-item .count{font-size:var(--fs-xs);opacity:.75}.param-panel .card-head{display:flex;align-items:center;justify-content:space-between}.param-tip{padding:var(--sp-3);margin-bottom:var(--sp-3);border-radius:var(--r-md);background:var(--c-fill);font-size:var(--fs-sm);color:var(--c-text-secondary);line-height:1.6}.param-empty{padding:var(--sp-5);text-align:center;color:var(--c-text-placeholder);border:1px dashed var(--c-border);border-radius:var(--r-md)}.param-list{display:flex;flex-direction:column;gap:var(--sp-2)}.param-row{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:var(--sp-3);padding:var(--sp-3);border:1px solid var(--c-border-light);border-radius:var(--r-md)}.param-row .info .label{font-weight:600;color:var(--c-text)}.param-row .info .label .extra{margin-left:6px;font-size:var(--fs-xs);font-weight:400;color:var(--c-text-muted)}.param-row .info .sub{margin-top:2px;font-size:var(--fs-xs);color:var(--c-text-muted)}.param-row .ops{display:flex;gap:6px}.param-editor .login-error{margin-bottom:var(--sp-3)}.token-card{margin-bottom:var(--sp-4)}.token-card .card-head{display:flex;align-items:center;justify-content:space-between}.token-desc{margin:0 0 var(--sp-3);font-size:var(--fs-sm);color:var(--c-text-secondary);line-height:1.6}.token-value{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-3)}.token-code{font-family:Consolas,Courier New,monospace;font-size:var(--fs-md);letter-spacing:1px;padding:var(--sp-2) var(--sp-3);border:1px solid var(--c-border);border-radius:var(--r-md);background:var(--c-fill);color:var(--c-primary);word-break:break-all}.token-edit .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3)}.token-edit .form-grid .full{grid-column:1 / -1}.token-edit .login-error{margin:var(--sp-2) 0 0}.token-ini-tip{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);margin-top:var(--sp-3);padding-top:var(--sp-3);border-top:1px dashed var(--c-border)}.flex-row.gap{gap:var(--sp-2)}@media (max-width: 720px){.token-edit .form-grid{grid-template-columns:1fr}}@media (max-width: 720px){.param-layout{grid-template-columns:1fr}.param-groups{flex-direction:row;overflow-x:auto}.param-group-item{width:auto;white-space:nowrap}.param-row{grid-template-columns:1fr auto}.param-row .ops{grid-column:1 / -1}}.page-head .title{font-family:var(--f-display);font-size:22px;font-weight:800;letter-spacing:.5px;color:var(--c-primary-dark);line-height:1.25;min-height:1.3em}.page-head .desc{margin-top:3px}.stat-card .d-foot{font-weight:600;display:inline-flex;align-items:center;gap:4px}.stat-card .d-foot.d-ok{color:var(--c-success)}.stat-card .d-foot.d-now{color:var(--c-warning);font-feature-settings:"tnum"}.stat-card .d-foot.d-bad{color:var(--c-danger)}.rank-row .rank{width:22px;height:22px;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;font-size:var(--fs-sm);color:#fff;font-weight:700}.rank-row .rank b{font-family:var(--f-num);font-weight:700}.rank-row:nth-child(1) .rank{background:var(--c-primary)}.rank-row:nth-child(2) .rank{background:var(--c-accent)}.rank-row:nth-child(3) .rank{background:var(--c-purple)}.rank-row:nth-child(4) .rank{background:var(--c-warning)}.rank-row:nth-child(5) .rank{background:var(--c-success)}.print-health{display:flex;align-items:center;gap:18px;min-height:168px}.health-ring{position:relative;width:108px;height:108px;flex-shrink:0}.health-ring svg{width:100%;height:100%}.health-ring b{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:var(--fs-xl);font-weight:800;color:var(--c-primary-dark)}.health-meta{flex:1;min-width:0}.health-title{font-size:var(--fs-base);font-weight:700;color:var(--c-text);margin-bottom:3px}.health-desc{font-size:var(--fs-sm);color:var(--c-text-muted);margin-bottom:10px}.health-stats{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:var(--fs-sm);color:var(--c-text-secondary)}.health-stats b{font-family:var(--f-num);font-weight:700;color:var(--c-text)}@media (max-width: 900px){.page-head .title{font-size:19px}.print-health{flex-direction:column;align-items:flex-start;gap:14px}}.iot-detail{display:flex;flex-direction:column;gap:var(--sp-4)}.iot-status-body{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--sp-4)}.iot-stat{display:flex;flex-direction:column;gap:6px;min-width:0}.iot-stat .k{font-size:var(--fs-sm);color:var(--c-text-muted)}.iot-stat .v{display:flex;align-items:center;gap:6px;font-size:var(--fs-md);font-weight:600;color:var(--c-text);min-width:0}.iot-stat .v .num{font-family:var(--f-num)}@media (max-width: 900px){.iot-status-body{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 520px){.iot-status-body{grid-template-columns:1fr}}.iot-live{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--c-text-secondary)}.iot-live-dot{width:7px;height:7px;border-radius:50%;background:var(--c-text-muted);flex-shrink:0}.iot-live.is-on .iot-live-dot{background:var(--c-success);animation:iot-pulse 2s ease-in-out infinite}.iot-live.is-warn .iot-live-dot{background:var(--c-warning)}.iot-live.is-off .iot-live-dot{background:var(--c-danger)}@keyframes iot-pulse{0%,to{box-shadow:0 0 #2fa56b73}50%{box-shadow:0 0 0 4px #2fa56b00}}@media (prefers-reduced-motion: reduce){.iot-live.is-on .iot-live-dot{animation:none}}.kv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:var(--sp-4) var(--sp-5)}.kv-item{min-width:0}.kv-item .k{font-size:var(--fs-sm);color:var(--c-text-muted);margin-bottom:4px}.kv-item .v{font-size:var(--fs-md);font-weight:500;color:var(--c-text);word-break:break-all}.attr-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(186px,1fr));gap:var(--sp-3)}.attr-item{position:relative;min-width:0;padding:var(--sp-3) var(--sp-4) var(--sp-4);background:var(--c-fill);border:1px solid var(--c-border-light);border-radius:var(--r-md);transition:background var(--t-fast),border-color var(--t-fast)}.attr-item:hover{background:var(--c-fill-hover);border-color:var(--c-border-strong)}.attr-item.is-live{background:var(--c-primary-lighter);border-color:var(--c-primary-border);box-shadow:inset 3px 0 0 var(--c-primary)}.attr-key{display:flex;align-items:baseline;gap:6px;font-size:var(--fs-sm);color:var(--c-text-secondary)}.attr-key .name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attr-key .id{margin-left:auto;flex-shrink:0;font-family:var(--f-num);font-size:var(--fs-xs);color:var(--c-text-muted)}.attr-value{margin-top:6px;font-family:var(--f-num);font-size:var(--fs-xl);font-weight:700;line-height:1.2;color:var(--c-text);word-break:break-all}.attr-time{margin-top:4px;font-size:var(--fs-xs);color:var(--c-text-muted)}.iot-filter-row{display:flex;align-items:flex-end;gap:var(--sp-4);flex-wrap:wrap;margin-bottom:var(--sp-4)}.iot-filter-row .grow{flex:1 1 200px;min-width:160px}.iot-filter-row .grow .input{width:100%}.iot-attr-toolbar{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;margin-bottom:var(--sp-4)}.iot-attr-toolbar .search{flex:1 1 220px;min-width:160px}.iot-attr-toolbar .search .input{width:100%}.iot-attr-toolbar .stat{margin-left:auto;font-size:var(--fs-sm);color:var(--c-text-muted)}.iot-seg{display:inline-flex;padding:2px;background:var(--c-fill);border:1px solid var(--c-border-light);border-radius:var(--r-md)}.iot-seg button{padding:5px 12px;border:none;background:none;border-radius:var(--r-sm);font-size:var(--fs-sm);color:var(--c-text-secondary);white-space:nowrap;transition:background var(--t-fast),color var(--t-fast)}.iot-seg button:hover{color:var(--c-text)}.iot-seg button.is-on{background:var(--c-surface);color:var(--c-primary-dark);font-weight:600;box-shadow:var(--sh-raised)}.iot-seg button:focus-visible{outline:2px solid var(--c-primary);outline-offset:1px}.history-list{max-height:320px;overflow-y:auto;border:1px solid var(--c-border-light);border-radius:var(--r-md)}.history-row{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);padding:9px var(--sp-4);font-size:var(--fs-sm);border-bottom:1px solid var(--c-border-light)}.history-row:last-child{border-bottom:none}.history-row:nth-child(odd){background:var(--c-fill)}.history-row .ts{font-family:var(--f-num);color:var(--c-text-muted)}.history-row .val{font-family:var(--f-num);font-weight:700;color:var(--c-primary-dark)}.control-box{display:flex;flex-direction:column;gap:var(--sp-3);padding:var(--sp-4);background:var(--c-fill);border:1px solid var(--c-border-light);border-radius:var(--r-md)}.control-box h4{font-size:var(--fs-md);font-weight:600;color:var(--c-text)}.control-box .hint{margin-top:-6px;font-size:var(--fs-sm);color:var(--c-text-muted)}.control-box .actions{display:flex;justify-content:flex-end}.result-box{max-height:200px;margin:0;padding:var(--sp-3);overflow:auto;background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--r-sm);font-family:var(--f-num);font-size:var(--fs-sm);line-height:1.6;color:var(--c-text-secondary);white-space:pre-wrap;word-break:break-all}.muted{font-size:var(--fs-sm);color:var(--c-text-muted)}.attr-control{display:flex;align-items:center;gap:var(--sp-2);margin-top:var(--sp-3);padding-top:var(--sp-3);border-top:1px dashed var(--c-border-light)}.attr-control.is-changed{margin-top:var(--sp-3);padding:var(--sp-2);background:var(--c-accent-light);border-top:none;border-radius:var(--r-sm)}.attr-control-input{flex:1 1 auto;min-width:0}.attr-control-input .input,.attr-control-input .select{width:100%}.iot-num{display:flex;align-items:center;gap:6px}.iot-num .unit{flex-shrink:0;font-size:var(--fs-sm);color:var(--c-text-muted)}.iot-switch{display:inline-flex;align-items:center;gap:8px;padding:2px 0;font:inherit;color:var(--c-text-secondary);background:none;border:none;cursor:pointer}.iot-switch .track{position:relative;flex-shrink:0;width:40px;height:22px;background:var(--c-border-strong);border-radius:var(--r-pill);transition:background var(--t-base)}.iot-switch .knob{position:absolute;top:2px;left:2px;width:18px;height:18px;background:#fff;border-radius:50%;box-shadow:0 1px 3px #0d4a2b40;transition:transform var(--t-base)}.iot-switch.on .track{background:var(--c-primary)}.iot-switch.on .knob{transform:translate(18px)}.iot-switch .label{font-size:var(--fs-sm);font-weight:600}.iot-switch:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px;border-radius:var(--r-sm)}@media (prefers-reduced-motion: reduce){.iot-switch .track,.iot-switch .knob{transition:none}}.skeleton-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(186px,1fr));gap:var(--sp-3)}.skeleton-item{height:84px;border-radius:var(--r-md);background:linear-gradient(90deg,var(--c-fill) 25%,var(--c-fill-hover) 37%,var(--c-fill) 63%);background-size:400% 100%;animation:iot-skeleton 1.4s ease infinite}.skeleton-list{display:flex;flex-direction:column;gap:8px}.skeleton-line{height:40px;border-radius:var(--r-sm);background:linear-gradient(90deg,var(--c-fill) 25%,var(--c-fill-hover) 37%,var(--c-fill) 63%);background-size:400% 100%;animation:iot-skeleton 1.4s ease infinite}@keyframes iot-skeleton{0%{background-position:100% 50%}to{background-position:0 50%}}@media (prefers-reduced-motion: reduce){.skeleton-item,.skeleton-line{animation:none}}.iot-note{margin-bottom:var(--sp-3);padding:var(--sp-2) var(--sp-3);background:var(--c-warning-bg);border:1px solid var(--c-accent-border);border-radius:var(--r-sm);font-size:var(--fs-sm);color:#96661a}.iot-log-list{display:flex;flex-direction:column;gap:8px;max-height:380px;overflow-y:auto}.iot-log-row{padding:var(--sp-3) var(--sp-4);background:var(--c-fill);border:1px solid var(--c-border-light);border-left:3px solid var(--c-success);border-radius:var(--r-md)}.iot-log-row.is-fail{background:var(--c-danger-bg);border-color:#f6d5d5;border-left-color:var(--c-danger)}.iot-log-row .line1{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:var(--fs-sm)}.iot-log-row .line1 .kind{color:var(--c-text-secondary)}.iot-log-row .line1 .target{font-family:var(--f-num);font-weight:600;color:var(--c-text);word-break:break-all}.iot-log-row .line1 .time{margin-left:auto;font-family:var(--f-num);font-size:var(--fs-xs);color:var(--c-text-muted)}.iot-log-row .line2{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px;margin-top:6px;font-size:var(--fs-xs)}.iot-log-row .line2 code{max-width:100%;padding:2px 6px;background:var(--c-surface);border:1px solid var(--c-border-light);border-radius:var(--r-sm);font-family:var(--f-num);color:var(--c-text-secondary);word-break:break-all}.iot-log-row .line2 .ok{color:var(--c-success)}.iot-log-row .line2 .err{color:var(--c-danger);word-break:break-all}.iot-log-row .line2 .op{margin-left:auto;color:var(--c-text-muted)}.iot-log-foot{display:flex;align-items:center;justify-content:center;gap:var(--sp-3);flex-wrap:wrap;margin-top:var(--sp-3)}.iot-log-foot .stat{font-size:var(--fs-sm);color:var(--c-text-muted)}.iot-log-foot .err{font-size:var(--fs-sm);color:var(--c-danger)}.iot-with-aside{display:grid;grid-template-columns:236px minmax(0,1fr);gap:var(--sp-4);align-items:start}.iot-group-panel{padding:var(--sp-3);background:var(--c-surface);border:1px solid var(--c-border-light);border-radius:var(--r-md)}.iot-group-panel .head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);margin-bottom:var(--sp-2);padding:0 var(--sp-2)}.iot-group-panel .head .title{font-size:var(--fs-sm);font-weight:600;color:var(--c-text-secondary)}.iot-group-list{display:flex;flex-direction:column;gap:2px}.iot-group-row-wrap{display:flex;align-items:center;gap:2px}.iot-group-row{display:flex;align-items:center;gap:6px;flex:1 1 auto;min-width:0;padding:6px var(--sp-2);font:inherit;font-size:var(--fs-sm);color:var(--c-text-secondary);text-align:left;background:none;border:none;border-radius:var(--r-sm);cursor:pointer;transition:background var(--t-fast),color var(--t-fast)}.iot-group-row:hover{background:var(--c-fill-hover);color:var(--c-text)}.iot-group-row.is-on{background:var(--c-primary-lighter);color:var(--c-primary-dark);font-weight:600}.iot-group-row .name{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.iot-group-row .count{flex-shrink:0;font-family:var(--f-num);font-size:var(--fs-xs);color:var(--c-text-muted)}.iot-group-row.is-on .count{color:var(--c-primary-dark)}.iot-group-caret{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;font-size:9px;line-height:1;color:var(--c-text-muted);background:none;border:none;border-radius:var(--r-sm);cursor:pointer}.iot-group-caret:hover{background:var(--c-border-light)}.iot-group-caret.is-empty{visibility:hidden}.iot-group-children{display:flex;flex-direction:column;gap:2px;margin-left:16px;padding-left:4px;border-left:1px solid var(--c-border-light)}.iot-group-panel .foot{margin-top:var(--sp-2);padding:var(--sp-2) var(--sp-2) 0;border-top:1px solid var(--c-border-light)}.iot-group-sub{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--c-text-secondary);cursor:pointer}.iot-group-sub input{width:14px;height:14px;accent-color:var(--c-primary)}.iot-group-hint{padding:6px var(--sp-2);font-size:var(--fs-sm);line-height:1.5;color:var(--c-text-muted);word-break:break-all}@media (max-width: 900px){.iot-with-aside{grid-template-columns:1fr}}.kv-links{display:inline-flex;flex-wrap:wrap;gap:var(--sp-2)}
