:root{--color-primary: #0e8f86;--color-primary-hover: #0d7c74;--color-primary-active: #0b6b64;--color-primary-light: #e7f7f4;--color-primary-lighter: #f0faf8;--color-primary-border: #bfe3dc;--color-primary-soft: #7fc9bf;--color-accent: #14b8a6;--color-accent-soft: #5eead4;--color-success: #12966a;--color-success-light: #e8f8f1;--color-success-border: #bfe6d4;--color-warning: #d98a22;--color-warning-light: #fdf6ea;--color-warning-border: #f0d9a8;--color-danger: #dc5a4e;--color-danger-light: #fdf0ee;--color-danger-border: #f4c9c4;--color-info: #2a8fb8;--color-info-light: #ecf6fb;--color-info-border: #bfe0f0;--color-purple: #7a5fd0;--color-purple-light: #f3f0fc;--color-purple-border: #d9d0f5;--color-text-primary: #0f2d28;--color-text-secondary: #3c5651;--color-text-tertiary: #5f7d77;--color-text-quaternary: #8ba39d;--color-text-inverse: #ffffff;--color-bg-page: #eef4f3;--color-bg-page-deep: #e4edeb;--color-bg-surface: #ffffff;--color-bg-surface-alt: #fbfdfc;--color-bg-hover: #f3f8f6;--color-bg-disabled: #f5f7f7;--color-border-primary: #dbe6e3;--color-border-secondary: #eef4f2;--color-border-tertiary: #f2f6f5;--font-size-xs: 10.5px;--font-size-sm: 12px;--font-size-base: 14px;--font-size-md: 15.5px;--font-size-lg: 17px;--font-size-xl: 20px;--font-size-2xl: 24px;--font-size-3xl: 28px;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.75;--font-weight-regular: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--font-weight-extrabold: 800;--letter-spacing-tight: -.3px;--letter-spacing-normal: 0;--letter-spacing-wide: .3px;--letter-spacing-wider: .8px;--font-family-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--font-family-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--space-1: 4px;--space-2: 6px;--space-3: 8px;--space-4: 10px;--space-5: 12px;--space-6: 14px;--space-7: 16px;--space-8: 20px;--space-9: 24px;--space-10: 32px;--space-card-padding: var(--space-5);--space-card-padding-lg: var(--space-6);--space-section-gap: var(--space-4);--space-component-gap: var(--space-3);--radius-xs: 6px;--radius-sm: 9px;--radius-md: 12px;--radius-lg: 16px;--radius-xl: 20px;--radius-full: 999px;--shadow-xs: 0 1px 2px rgba(20, 60, 50, .04);--shadow-sm: 0 1px 2px rgba(20, 60, 50, .05), 0 2px 6px -2px rgba(20, 60, 50, .07);--shadow-md: 0 1px 2px rgba(20, 60, 50, .05), 0 3px 6px -2px rgba(20, 60, 50, .06), 0 16px 40px -18px rgba(20, 60, 50, .22);--shadow-lg: 0 2px 6px rgba(20, 60, 50, .06), 0 24px 60px -24px rgba(20, 60, 50, .3);--shadow-glow: 0 0 0 4px rgba(14, 143, 134, .12);--shadow-inset-top: inset 0 1px 0 rgba(255, 255, 255, .85);--shadow-inset-bottom: inset 0 -2px 4px rgba(0, 0, 0, .1);--glass-bg: rgba(255, 255, 255, .72);--glass-bg-strong: rgba(255, 255, 255, .88);--glass-border: rgba(255, 255, 255, .65);--blur-normal: 18px;--blur-strong: 24px;--ease-standard: cubic-bezier(.22, .61, .36, 1);--ease-decelerate: cubic-bezier(.16, 1, .3, 1);--ease-accelerate: cubic-bezier(.4, 0, 1, 1);--ease-elastic: cubic-bezier(.22, 1.2, .36, 1);--duration-fast: .12s;--duration-normal: .18s;--duration-slow: .24s;--duration-slower: .32s;--sidebar-width: 224px;--topbar-height: 52px;--content-max-width: 1520px;--z-base: 1;--z-dropdown: 50;--z-sidebar: 40;--z-topbar: 30;--z-backdrop: 39;--z-overlay: 70;--z-modal: 70;--z-drawer: 70;--z-toast: 900;--z-boot: 9000}*,*:before,*:after{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{margin:0;padding:0}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{font-family:var(--font-family-sans);font-size:var(--font-size-base);line-height:var(--line-height-normal);color:var(--color-text-primary);background-color:var(--color-bg-page);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;pointer-events:none;background:radial-gradient(52% 40% at 12% -6%,rgba(20,184,166,.1),transparent 60%),radial-gradient(48% 42% at 96% 8%,rgba(46,158,148,.08),transparent 58%),radial-gradient(60% 50% at 50% 110%,rgba(122,95,208,.05),transparent 62%)}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}:focus{outline:none}:focus-visible{outline:2px solid var(--color-primary-soft);outline-offset:2px;border-radius:var(--radius-xs)}::selection{background-color:#0e8f862e}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background-color:#bfd3cf;border-radius:10px;border:2.5px solid transparent;background-clip:content-box;transition:background-color var(--duration-fast) var(--ease-standard)}::-webkit-scrollbar-thumb:hover{background-color:#9fbdb7;background-clip:content-box}::-webkit-scrollbar-track{background-color:transparent}.hidden,.only-sm{display:none!important}#loginScreen{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;padding:var(--space-5);z-index:var(--z-boot);background:radial-gradient(60% 52% at 18% 12%,rgba(20,184,166,.14),transparent 62%),radial-gradient(52% 46% at 88% 20%,rgba(46,158,148,.12),transparent 60%),linear-gradient(150deg,#e6f1ee,#eff6f4 44%,#e9f2f0)}#loginScreen:before{content:"";position:absolute;width:560px;height:560px;border-radius:50%;top:-200px;right:-150px;background:radial-gradient(circle at 32% 30%,#0e8f8633,#0e8f8600 68%);pointer-events:none}#loginScreen:after{content:"";position:absolute;width:500px;height:500px;border-radius:50%;bottom:-190px;left:-140px;background:radial-gradient(circle at 62% 40%,#2a8fb824,#2a8fb800 70%);pointer-events:none}.login-box{position:relative;z-index:2;width:100%;max-width:384px;border-radius:var(--radius-xl);padding:var(--space-6) var(--space-6) var(--space-5);overflow:hidden;background:linear-gradient(165deg,#ffffffeb,#ffffffc7);backdrop-filter:blur(var(--blur-normal)) saturate(1.4);-webkit-backdrop-filter:blur(var(--blur-normal)) saturate(1.4);box-shadow:var(--shadow-lg),var(--shadow-inset-top);border:1px solid var(--glass-border)}.login-box:before{content:"";position:absolute;inset:0 0 auto 0;height:110px;pointer-events:none;background:linear-gradient(180deg,rgba(255,255,255,.5),transparent)}.login-logo{width:44px;height:44px;border-radius:var(--radius-sm);position:relative;background:linear-gradient(145deg,#1bb3a6,var(--color-primary));display:flex;align-items:center;justify-content:center;box-shadow:0 10px 22px -8px #0e8f86a6,inset 0 1px #ffffff73,inset 0 -3px 6px #0000001f}.login-box h1{font-size:var(--font-size-lg);margin:var(--space-4) 0 var(--space-1);letter-spacing:.2px;font-weight:var(--font-weight-extrabold);line-height:var(--line-height-tight)}.login-box .sub{color:var(--color-text-tertiary);font-size:var(--font-size-sm);margin-bottom:var(--space-5);line-height:var(--line-height-normal)}.app{display:flex;min-height:100vh}.aside{width:var(--sidebar-width);flex:0 0 var(--sidebar-width);background:linear-gradient(180deg,#fffffff0,#f9fcfbe6);backdrop-filter:blur(var(--blur-normal)) saturate(1.3);-webkit-backdrop-filter:blur(var(--blur-normal)) saturate(1.3);border-right:1px solid var(--glass-border);box-shadow:1px 0 #fff9 inset,-1px 0 24px -18px #143c321f;position:fixed;inset:0 auto 0 0;z-index:var(--z-sidebar);display:flex;flex-direction:column;transition:transform var(--duration-slow) var(--ease-standard)}.brand{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-4) var(--space-4) var(--space-3);border-bottom:1px solid var(--color-border-secondary)}.brand .mark{width:32px;height:32px;border-radius:var(--radius-xs);background:linear-gradient(145deg,#1bb3a6,var(--color-primary));display:flex;align-items:center;justify-content:center;flex:0 0 32px;box-shadow:0 8px 18px -8px #0e8f86b3,inset 0 1px #fff6,inset 0 -2px 5px #00000024}.brand .tt{font-size:var(--font-size-base);font-weight:var(--font-weight-extrabold);letter-spacing:.2px;line-height:1.2}.brand .st{font-size:var(--font-size-xs);color:var(--color-text-quaternary);letter-spacing:.7px;text-transform:uppercase}.nav{flex:1;overflow-y:auto;padding:var(--space-3) var(--space-3) var(--space-4);-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--color-border-tertiary) transparent}.nav::-webkit-scrollbar{width:4px}.nav::-webkit-scrollbar-thumb{background:var(--color-border-tertiary);border-radius:2px}.nav-group{margin-bottom:var(--space-2)}.nav-gtitle{display:flex;align-items:center;justify-content:space-between;padding:10px 12px 8px;margin:0;cursor:pointer;font-size:var(--font-size-sm);font-weight:var(--font-weight-bold);color:var(--color-text-primary);letter-spacing:.3px;border-radius:var(--radius-xs);transition:background-color var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard);-webkit-user-select:none;user-select:none}.nav-gtitle:hover{background-color:var(--color-bg-hover);color:var(--color-primary)}.nav-gtitle:active{background-color:var(--color-bg-active)}.nav-gtitle .nav-arrow{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;font-size:12px;color:var(--color-text-tertiary);transition:transform var(--duration-fast) var(--ease-standard);flex-shrink:0}.nav-group.collapsed .nav-arrow{transform:rotate(-90deg)}.nav-submenu{overflow:hidden;max-height:1000px;opacity:1;transition:max-height var(--duration-normal) var(--ease-standard),opacity var(--duration-fast) var(--ease-standard),margin var(--duration-fast) var(--ease-standard)}.nav-group.collapsed .nav-submenu{max-height:0;opacity:0;margin:0;pointer-events:none}.nav-item{display:flex;align-items:center;gap:var(--space-3);padding:9px 12px;border-radius:var(--radius-sm);cursor:pointer;color:var(--color-text-secondary);font-size:var(--font-size-base);font-weight:var(--font-weight-medium);margin-bottom:2px;transition:background-color var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard),transform var(--duration-fast) var(--ease-standard);position:relative;border:1px solid transparent;line-height:1.4}.nav-item:hover{background-color:var(--color-primary-light);color:var(--color-primary-hover);transform:translate(2px)}.nav-item.active{background:linear-gradient(180deg,#19ab9e,var(--color-primary));color:var(--color-text-inverse);font-weight:var(--font-weight-semibold);box-shadow:0 8px 20px -8px #0e8f86b3,inset 0 1px #ffffff4d,inset 0 -2px 4px #0000001f;border-color:#0e8f8659}.nav-item svg{flex:0 0 18px}.nav-item .nbadge{margin-left:auto;background-color:#fde4e0;color:#b0473d;font-size:11px;font-weight:var(--font-weight-bold);border-radius:var(--radius-full);padding:2px 7px;box-shadow:inset 0 1px #fff9;line-height:1.4}.nav-item.active .nbadge{background-color:#ffffff40;color:var(--color-text-inverse)}.aside-foot{padding:var(--space-3) var(--space-4) var(--space-4);border-top:1px solid var(--color-border-secondary);font-size:var(--font-size-xs);color:var(--color-text-quaternary);line-height:1.7;background:linear-gradient(180deg,transparent,rgba(255,255,255,.7))}.main{flex:1;min-width:0;margin-left:var(--sidebar-width);display:flex;flex-direction:column;min-height:100vh}.topbar{position:sticky;top:0;z-index:var(--z-topbar);background-color:var(--glass-bg);backdrop-filter:blur(var(--blur-normal)) saturate(1.5);-webkit-backdrop-filter:blur(var(--blur-normal)) saturate(1.5);border-bottom:1px solid var(--glass-border);box-shadow:0 1px #ffffff80 inset,0 6px 24px -18px #143c322e;padding:0 var(--space-5);height:var(--topbar-height);display:flex;align-items:center;gap:var(--space-3)}.topbar h2{font-size:var(--font-size-md);margin:0;font-weight:var(--font-weight-extrabold);letter-spacing:.2px;line-height:var(--line-height-tight)}.topbar .crumb{font-size:var(--font-size-xs);color:var(--color-text-quaternary);margin-top:-2px;line-height:1.3}.hamb{display:none;width:34px;height:34px;border-radius:var(--radius-xs);border:1px solid var(--color-border-primary);background:linear-gradient(180deg,#fff,#f5f9f7);align-items:center;justify-content:center;cursor:pointer;flex:0 0 34px;box-shadow:var(--shadow-sm),var(--shadow-inset-top);transition:border-color var(--duration-normal) var(--ease-standard),color var(--duration-normal) var(--ease-standard)}.hamb:hover{border-color:var(--color-primary-soft);color:var(--color-primary-hover)}.top-right{margin-left:auto;display:flex;align-items:center;gap:var(--space-2)}.chip{display:inline-flex;align-items:center;gap:5px;height:26px;padding:0 var(--space-3);border-radius:var(--radius-full);background:linear-gradient(180deg,var(--color-success-light),#f2faf6);color:#117a55;font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);border:1px solid var(--color-success-border);box-shadow:inset 0 1px #ffffffb3;white-space:nowrap}.chip.off{background:linear-gradient(180deg,var(--color-warning-light),#fbf4e6);color:#a66a1a;border-color:var(--color-warning-border)}.userchip{display:flex;align-items:center;gap:var(--space-2);padding:3px var(--space-2) 3px 3px;border-radius:var(--radius-full);border:1px solid var(--color-border-primary);background:linear-gradient(180deg,#fff,#f5f9f7);cursor:pointer;transition:border-color var(--duration-normal) var(--ease-standard),background var(--duration-normal) var(--ease-standard);box-shadow:var(--shadow-sm),var(--shadow-inset-top);position:relative;-webkit-user-select:none;user-select:none}.userchip:hover{border-color:var(--color-primary-soft);background:linear-gradient(180deg,#fff,var(--color-primary-light))}.avatar{width:26px;height:26px;border-radius:50%;background:linear-gradient(145deg,#1bb3a6,var(--color-primary));color:var(--color-text-inverse);display:flex;align-items:center;justify-content:center;font-size:var(--font-size-xs);font-weight:var(--font-weight-extrabold);flex:0 0 26px;box-shadow:inset 0 1px #fff6,0 2px 5px -1px #0e8f8680}.userchip .un{font-size:var(--font-size-sm);font-weight:var(--font-weight-bold);line-height:1.1}.userchip .ur{font-size:10px;color:var(--color-text-quaternary);line-height:1.2}.view{padding:var(--space-4);flex:1;max-width:var(--content-max-width);width:100%;margin:0 auto}.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#0f282366;z-index:var(--z-backdrop);opacity:0;pointer-events:none;transition:opacity var(--duration-slow) var(--ease-standard);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.backdrop.on{opacity:1;pointer-events:auto}.field{margin-bottom:var(--space-4)}.field>label{display:block;font-size:var(--font-size-sm);color:var(--color-text-secondary);font-weight:var(--font-weight-bold);margin-bottom:5px;letter-spacing:.2px}.inp,select.inp,textarea.inp{width:100%;height:38px;padding:0 var(--space-4);border:1px solid var(--color-border-primary);border-radius:var(--radius-sm);background:linear-gradient(180deg,#f7faf9,#fcfefd);font-size:var(--font-size-base);color:var(--color-text-primary);outline:none;box-shadow:inset 0 1px 2px #143c320d,0 1px #fff;transition:border-color var(--duration-normal) var(--ease-standard),box-shadow var(--duration-normal) var(--ease-standard),background-color var(--duration-normal) var(--ease-standard)}textarea.inp{height:auto;padding:var(--space-3) var(--space-4);line-height:var(--line-height-normal);resize:vertical;font-size:13.5px}.inp:hover{border-color:#c6d8d3}.inp:focus{border-color:var(--color-primary-soft);background-color:#fff;box-shadow:0 0 0 4px #0e8f861f,inset 0 1px 2px #143c320a}.inp::placeholder{color:var(--color-text-quaternary)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;height:36px;padding:0 var(--space-4);border-radius:var(--radius-sm);border:1px solid var(--color-border-primary);background:linear-gradient(180deg,#fff,#f4f8f6);color:var(--color-text-secondary);box-shadow:var(--shadow-sm),var(--shadow-inset-top);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);cursor:pointer;transition:border-color var(--duration-normal) var(--ease-standard),color var(--duration-normal) var(--ease-standard),background var(--duration-normal) var(--ease-standard),transform var(--duration-normal) var(--ease-standard),box-shadow var(--duration-normal) var(--ease-standard);white-space:nowrap;min-height:36px;-webkit-user-select:none;user-select:none}.btn:hover{border-color:var(--color-primary-soft);color:var(--color-primary-hover);background:linear-gradient(180deg,#ffffff,var(--color-primary-light));transform:translateY(-1px);box-shadow:0 4px 12px -4px #0e8f8647}.btn:active{transform:translateY(0) scale(.985);box-shadow:var(--shadow-sm)}.btn-primary{background:linear-gradient(180deg,#1bb3a6,var(--color-primary));border-color:var(--color-primary);color:var(--color-text-inverse);box-shadow:0 6px 16px -6px #0e8f868c,inset 0 1px #ffffff59,inset 0 -2px 4px #00000024}.btn-primary:hover{background:linear-gradient(180deg,#1fc0b2,var(--color-primary-hover));border-color:var(--color-primary-hover);color:var(--color-text-inverse);box-shadow:0 8px 20px -6px #0e8f869e,inset 0 1px #ffffff59}.btn-danger{background:linear-gradient(180deg,#fff,#fdf1ef);border-color:#f4c9c4;color:var(--color-danger)}.btn-danger:hover{background:linear-gradient(180deg,#fff,var(--color-danger-light));border-color:var(--color-danger);color:var(--color-danger)}.btn-sm{height:30px;min-height:30px;padding:0 var(--space-3);font-size:var(--font-size-sm);border-radius:var(--radius-xs)}.btn-block{width:100%;height:42px;font-size:var(--font-size-md);font-weight:var(--font-weight-bold)}.punch-link-card{background:linear-gradient(145deg,var(--color-primary-light),#fff);border:1px solid var(--color-primary-lighter);border-radius:var(--radius-md);padding:var(--space-5);text-align:center;display:flex;flex-direction:column;align-items:center;gap:var(--space-3)}.plc-icon{width:56px;height:56px;border-radius:var(--radius-md);background:linear-gradient(135deg,var(--color-primary),var(--color-primary-hover));color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 16px -4px #0e8f8680}.plc-title{font-size:var(--font-size-md);font-weight:var(--font-weight-bold);color:var(--color-text-primary)}.plc-desc{font-size:var(--font-size-sm);color:var(--color-text-secondary);line-height:1.5;margin-bottom:var(--space-1)}.btn[disabled]{opacity:.5;cursor:not-allowed;transform:none!important;box-shadow:var(--shadow-sm)!important}.btn-ghost{background:transparent;border-color:transparent;color:var(--color-text-tertiary);box-shadow:none}.btn-ghost:hover{background-color:var(--color-primary-light);color:var(--color-primary-hover);box-shadow:none}.card{background:linear-gradient(180deg,#fff,#fdfefe);border:1px solid var(--color-border-primary);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm),var(--shadow-inset-top);overflow:hidden}.card-h{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-3);padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-border-secondary);background:linear-gradient(180deg,#fbfdfc,transparent)}.card-h .h-t{flex:1 1 180px;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:2px}.card-h h3{margin:0;font-size:var(--font-size-base);font-weight:var(--font-weight-extrabold);letter-spacing:.2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:var(--line-height-tight)}.card-h .sub{flex:1 1 auto;min-width:0;font-size:var(--font-size-xs);color:var(--color-text-quaternary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}.card-h .r{margin-left:auto;display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;justify-content:flex-end;row-gap:var(--space-2);flex-shrink:1;min-width:0}.card-h .r .btn{flex:0 0 auto;padding:0 var(--space-3);font-size:var(--font-size-sm);height:32px;min-height:32px}.card-b{padding:var(--space-4)}.kpi{background:linear-gradient(165deg,#fff,#f8fbfa);border:1px solid var(--color-border-primary);border-radius:var(--radius-lg);padding:var(--space-4) var(--space-5);box-shadow:var(--shadow-md),var(--shadow-inset-top);position:relative;overflow:hidden;transition:transform var(--duration-normal) var(--ease-standard),box-shadow var(--duration-normal) var(--ease-standard)}.kpi:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg),var(--shadow-inset-top)}.kpi:before{content:"";position:absolute;right:-30px;top:-30px;width:100px;height:100px;border-radius:50%;background:radial-gradient(circle,rgba(14,143,134,.06),transparent 70%);pointer-events:none}.kpi .lab{font-size:var(--font-size-xs);color:var(--color-text-tertiary);font-weight:var(--font-weight-bold);display:flex;align-items:center;gap:5px}.kpi .num{font-size:var(--font-size-2xl);font-weight:var(--font-weight-extrabold);letter-spacing:-.5px;margin-top:var(--space-2);line-height:1.1;font-variant-numeric:tabular-nums}.kpi .foot{font-size:var(--font-size-xs);color:var(--color-text-quaternary);margin-top:var(--space-1);line-height:1.4}.kpi .ico{position:absolute;right:var(--space-4);top:var(--space-4);width:30px;height:30px;border-radius:var(--radius-xs);display:flex;align-items:center;justify-content:center;box-shadow:inset 0 1px #ffffffb3,0 3px 8px -3px #143c322e}.kpi.k-blue .ico,.kpi.k-teal .ico{background:linear-gradient(145deg,var(--color-primary-light),#f0f8f6);color:var(--color-primary)}.kpi.k-ok .ico{background:linear-gradient(145deg,var(--color-success-light),#f2faf6);color:var(--color-success)}.kpi.k-warn .ico{background:linear-gradient(145deg,var(--color-warning-light),#fbf5e9);color:var(--color-warning)}.kpi.k-danger .ico{background:linear-gradient(145deg,var(--color-danger-light),#fbf0ee);color:var(--color-danger)}.kpi.k-purple .ico{background:linear-gradient(145deg,var(--color-purple-light),#f6f3fc);color:var(--color-purple)}.badge{display:inline-flex;align-items:center;gap:4px;padding:1px 8px;border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);white-space:nowrap;line-height:1.6;box-shadow:inset 0 1px #fff9}.badge .dot{width:5px;height:5px;border-radius:50%;background-color:currentColor}.tag{display:inline-flex;align-items:center;padding:1px 7px;border-radius:var(--radius-xs);background-color:var(--color-border-secondary);color:var(--color-text-secondary);font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);margin:0 3px 3px 0;box-shadow:inset 0 1px #fff9;line-height:1.6}.tag.b{background-color:var(--color-primary-light);color:#0b6b63}.tag.t{background-color:var(--color-primary-light);color:#0d7468}.tag.p{background-color:var(--color-purple-light);color:#5f46b8}.tag.w{background-color:var(--color-warning-light);color:#a66a1a}.tag.d{background-color:var(--color-danger-light);color:#a73c32}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:0 0 var(--radius-lg) var(--radius-lg)}table.tb{width:100%;border-collapse:collapse;font-size:var(--font-size-sm);min-width:760px}table.tb th{text-align:left;font-size:var(--font-size-xs);color:var(--color-text-tertiary);font-weight:var(--font-weight-extrabold);letter-spacing:.3px;padding:8px 11px;background:linear-gradient(180deg,#f7faf9,#fbfdfc);border-bottom:1px solid var(--color-border-primary);white-space:nowrap;position:sticky;top:0;z-index:1}table.tb td{padding:9px 11px;border-bottom:1px solid var(--color-border-secondary);vertical-align:middle;line-height:var(--line-height-normal)}table.tb tbody tr{transition:background-color var(--duration-fast) var(--ease-standard);cursor:pointer}table.tb tbody tr:hover{background-color:var(--color-bg-hover)}table.tb tbody tr.sel{background-color:var(--color-primary-light)}.name-link{color:var(--color-primary-hover);font-weight:600;cursor:pointer;transition:color var(--duration-fast) var(--ease-standard)}.name-link:hover{text-decoration:underline;text-underline-offset:2px}table.tb td.nowrap,table.tb th.nowrap{white-space:nowrap}.filters{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,max-content));gap:var(--space-2);align-items:center}.filters .full{grid-column:1 / -1}.filters .fbar{gap:var(--space-2)}.filters .freset{margin-left:auto;flex:0 0 auto}.filters .fkw{min-width:300px}.filters .inp{height:32px;font-size:var(--font-size-sm);width:100%;min-width:0}.filters select.inp{padding-right:22px}.filters .chk{font-size:var(--font-size-sm)}.filters .btn{height:32px;font-size:var(--font-size-sm);line-height:32px}.filters .btn.btn-sm{height:32px;line-height:32px}.chk{display:inline-flex;align-items:center;gap:6px;font-size:var(--font-size-sm);color:var(--color-text-secondary);cursor:pointer;font-weight:var(--font-weight-semibold);-webkit-user-select:none;user-select:none}.chk input{width:15px;height:15px;accent-color:var(--color-primary);flex-shrink:0}.pager{display:flex;align-items:center;gap:7px;justify-content:flex-end;padding:9px var(--space-5);border-top:1px solid var(--color-border-secondary);font-size:var(--font-size-sm);color:var(--color-text-tertiary);flex-wrap:wrap}.pager button{min-width:30px}.pager .pg{height:28px;min-height:28px;padding:0 8px;border-radius:var(--radius-xs);border:1px solid var(--color-border-primary);background:linear-gradient(180deg,#fff,#f5f9f7);cursor:pointer;font-weight:var(--font-weight-bold);color:var(--color-text-secondary);font-size:var(--font-size-sm);box-shadow:var(--shadow-sm);transition:border-color var(--duration-normal) var(--ease-standard),color var(--duration-normal) var(--ease-standard),background var(--duration-normal) var(--ease-standard)}.pager .pg:hover{border-color:var(--color-primary-soft);color:var(--color-primary-hover)}.pager .pg.on{background:linear-gradient(180deg,#19ab9e,var(--color-primary));border-color:var(--color-primary);color:var(--color-text-inverse);box-shadow:0 5px 12px -5px #0e8f8699}.pager .pg[disabled]{opacity:.4;cursor:not-allowed}.bar{height:7px;border-radius:5px;background-color:var(--color-border-secondary);overflow:hidden;box-shadow:inset 0 1px 2px #143c3214}.bar>i{display:block;height:100%;border-radius:5px;background:linear-gradient(90deg,var(--color-accent),var(--color-primary));transition:width .5s var(--ease-standard)}.seg{display:inline-flex;background-color:#eef4f2;border:1px solid var(--color-border-primary);border-radius:var(--radius-xs);padding:2px;gap:2px;box-shadow:inset 0 1px 2px #143c320d}.seg button{height:27px;padding:0 11px;border:0;background:transparent;border-radius:7px;font-size:var(--font-size-sm);font-weight:var(--font-weight-bold);color:var(--color-text-tertiary);cursor:pointer;transition:background var(--duration-normal) var(--ease-standard),color var(--duration-normal) var(--ease-standard),box-shadow var(--duration-normal) var(--ease-standard)}.seg button.on{background:linear-gradient(180deg,#fff,#f6faf8);color:var(--color-primary-hover);box-shadow:var(--shadow-sm),inset 0 1px #fff}.hr{height:1px;background-color:var(--color-border-secondary);margin:var(--space-5) 0}.section-t{font-size:var(--font-size-xs);font-weight:var(--font-weight-extrabold);color:var(--color-text-tertiary);letter-spacing:.7px;text-transform:uppercase;margin:0 0 7px;line-height:1.4}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#0f282373;z-index:var(--z-modal);display:flex;align-items:center;justify-content:center;padding:18px;animation:fadeIn var(--duration-normal) ease;backdrop-filter:blur(5px) saturate(1.1);-webkit-backdrop-filter:blur(5px) saturate(1.1)}.modal{background:linear-gradient(168deg,#fff,#fdfefe 55%,#f7fbfa);border-radius:22px;width:100%;max-width:660px;max-height:90vh;display:flex;flex-direction:column;box-shadow:0 2px 6px #143c3212,0 18px 44px -12px #143c3242,0 42px 96px -32px #143c3252,inset 0 1px #fffffff2;border:1px solid rgba(255,255,255,.75);overflow:hidden;animation:popIn var(--duration-slow) var(--ease-elastic)}.modal.wide{max-width:900px}.modal.narrow{max-width:430px}.modal-h{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-5) var(--space-6);border-bottom:1px solid var(--color-border-secondary);background:linear-gradient(180deg,#fbfdfceb,#fbfdfc66)}.modal-h h3{margin:0;font-size:var(--font-size-md);font-weight:var(--font-weight-extrabold);letter-spacing:.2px;color:var(--color-text-primary);line-height:var(--line-height-tight)}.modal-h .x{margin-left:auto;width:30px;height:30px;border-radius:50%;border:1px solid var(--color-border-primary);background:linear-gradient(180deg,#fff,#f5f9f7);cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--color-text-tertiary);transition:background var(--duration-normal) var(--ease-standard),color var(--duration-normal) var(--ease-standard),border-color var(--duration-normal) var(--ease-standard),transform var(--duration-normal) var(--ease-standard),box-shadow var(--duration-normal) var(--ease-standard);box-shadow:0 1px 2px #143c320f;flex-shrink:0}.modal-h .x:hover{background:linear-gradient(180deg,#fff,var(--color-danger-light));color:var(--color-danger);border-color:#f4c9c4;transform:rotate(90deg);box-shadow:0 2px 6px #dc5a4e2e}.modal.no-x .modal-h .x{display:none}.err-txt{color:var(--color-danger);font-size:var(--font-size-xs);line-height:1.5}.modal-b{padding:var(--space-6);overflow-y:auto;flex:1;scrollbar-width:thin;scrollbar-color:var(--color-border-primary) transparent}.modal-b::-webkit-scrollbar{width:8px}.modal-b::-webkit-scrollbar-thumb{background-color:var(--color-border-primary);border-radius:8px}.modal-f{padding:var(--space-4) var(--space-6);border-top:1px solid var(--color-border-secondary);display:flex;gap:var(--space-3);justify-content:flex-end;flex-wrap:wrap;background:linear-gradient(180deg,#fbfdfc66,#fbfdfceb)}.modal-f .f-start{margin-right:auto}.modal-f .f-danger{color:var(--color-danger);border-color:var(--color-danger-border)}.modal-f .f-danger:hover{background:var(--color-danger-light);border-color:var(--color-danger)}.cf-msg{margin:0;font-size:13.5px;line-height:1.75;color:var(--color-text-secondary)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes popIn{0%{opacity:0;transform:translateY(12px) scale(.98)}to{opacity:1;transform:none}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes popOut{0%{opacity:1;transform:none}to{opacity:0;transform:translateY(8px) scale(.985)}}@keyframes drSlideOut{0%{opacity:1;transform:none}to{opacity:.25;transform:translate(48px)}}.is-closing{pointer-events:none!important}.modal-mask.is-closing{animation:fadeOut .18s ease forwards}.modal-mask.is-closing .modal{animation:popOut .18s ease forwards}.drawer-mask.is-closing{animation:fadeOut .18s ease forwards}.drawer-mask.is-closing .drawer{animation:drSlideOut .18s var(--ease-standard) forwards}@media (prefers-reduced-motion: reduce){.modal-mask.is-closing,.modal-mask.is-closing .modal,.drawer-mask.is-closing,.drawer-mask.is-closing .drawer{animation:none}}.drawer-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-drawer);background-color:#0f23202e;backdrop-filter:blur(1px);-webkit-backdrop-filter:blur(1px);display:flex;justify-content:flex-end;pointer-events:none;animation:drFade var(--duration-normal) var(--ease-standard)}.drawer{position:fixed;top:0;right:0;bottom:0;width:min(880px,100%);height:100%;background-color:var(--color-bg-page);border-left:1px solid var(--glass-border);box-shadow:-1px 0 #ffffffb3 inset,-26px 0 64px -32px #143c3261;z-index:var(--z-drawer);display:flex;flex-direction:column;overflow:hidden;animation:drSlide var(--duration-slow) var(--ease-standard);pointer-events:auto}.drawer.has-list{width:min(1100px,100%)}.drawer-h{position:relative;display:flex;align-items:center;gap:var(--space-3);padding:var(--space-5) var(--space-7) var(--space-5) var(--space-7);background:linear-gradient(180deg,#fff,var(--color-bg-surface-alt));border-bottom:1px solid var(--color-border-primary);flex-shrink:0}.drawer-h:before{content:"";position:absolute;left:var(--space-4);top:50%;transform:translateY(-50%);width:3px;height:20px;border-radius:2px;background:linear-gradient(180deg,var(--color-accent),var(--color-primary))}.drawer-h h3{flex:1;min-width:0;margin:0;padding-left:var(--space-5);font-size:var(--font-size-md);font-weight:var(--font-weight-extrabold);letter-spacing:.2px;line-height:var(--line-height-tight);color:var(--color-text-primary)}.drawer-h h3 .dh-t{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer-nav{display:flex;align-items:center;gap:var(--space-2);flex-shrink:0}.drawer-h .x.drawer-x{margin-left:var(--space-2);width:32px;height:32px;border-radius:50%;border:1px solid var(--color-border-primary);background:linear-gradient(180deg,#fff,#f5f9f7);color:var(--color-text-tertiary);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;transition:background var(--duration-normal) var(--ease-standard),color var(--duration-normal) var(--ease-standard),border-color var(--duration-normal) var(--ease-standard),transform var(--duration-normal) var(--ease-standard),box-shadow var(--duration-normal) var(--ease-standard);box-shadow:0 1px 2px #143c320f}.drawer-h .x.drawer-x:hover{background:linear-gradient(180deg,#fff,var(--color-danger-light));color:var(--color-danger);border-color:var(--color-danger-border);transform:rotate(90deg);box-shadow:0 2px 8px #dc5a4e33}.drawer-h .x.drawer-x:active{transform:rotate(90deg) scale(.94)}.drawer-h .x.drawer-x:focus-visible{outline:2px solid var(--color-primary-soft);outline-offset:2px}.drawer-body{flex:1;display:flex;overflow:hidden;min-height:0}.drawer-list{width:292px;flex-shrink:0;display:flex;flex-direction:column;background-color:var(--color-bg-surface-alt);border-right:1px solid var(--color-border-primary);min-height:0}.drawer-list-h{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-5) var(--space-5) var(--space-4);font-size:var(--font-size-sm);font-weight:var(--font-weight-bold);color:var(--color-text-secondary);border-bottom:1px solid var(--color-border-secondary);flex-shrink:0}.drawer-list-h .dlh-t{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer-list-h .dlh-n{flex-shrink:0;min-width:22px;padding:1px 7px;border-radius:999px;font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);text-align:center;color:var(--color-primary-hover);background-color:var(--color-primary-light);border:1px solid var(--color-primary-border)}.drawer-list-scroll{flex:1;overflow-y:auto;padding:var(--space-3) var(--space-3) var(--space-2);-webkit-overflow-scrolling:touch;min-height:0;scrollbar-width:thin;scrollbar-color:var(--color-border-primary) transparent}.drawer-list-scroll::-webkit-scrollbar{width:8px}.drawer-list-scroll::-webkit-scrollbar-thumb{background-color:var(--color-border-primary);border-radius:8px}.drawer-list-empty{flex-shrink:0;padding:var(--space-3) var(--space-5) var(--space-4);font-size:var(--font-size-xs);line-height:var(--line-height-normal);color:var(--color-text-quaternary);border-top:1px solid var(--color-border-tertiary)}.drawer-list-item{position:relative;display:flex;align-items:center;padding:var(--space-4) var(--space-4) var(--space-4) var(--space-4);margin-bottom:2px;border-radius:var(--radius-sm);cursor:pointer;border:1px solid transparent;color:var(--color-text-secondary);transition:background-color var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard)}.drawer-list-item:before{content:"";position:absolute;left:4px;top:50%;transform:translateY(-50%) scaleY(.3);width:3px;height:26px;border-radius:2px;background:linear-gradient(180deg,var(--color-accent),var(--color-primary));opacity:0;transition:opacity var(--duration-fast) var(--ease-standard),transform var(--duration-fast) var(--ease-standard)}.drawer-list-item:hover{background-color:var(--color-bg-hover);border-color:var(--color-border-secondary)}.drawer-list-item.active{background-color:var(--color-primary-light);border-color:var(--color-primary-border);color:var(--color-primary-hover);font-weight:var(--font-weight-semibold);box-shadow:0 3px 10px -6px #0e8f8673}.drawer-list-item.active:before{opacity:1;transform:translateY(-50%) scaleY(1)}.drawer-list-item .dli-mark{flex-shrink:0;margin-left:var(--space-2);width:18px;height:18px;border-radius:50%;display:none;align-items:center;justify-content:center;color:var(--color-text-inverse);background:linear-gradient(180deg,var(--color-accent),var(--color-primary));box-shadow:0 1px 3px #0e8f8659}.drawer-list-item.active .dli-mark{display:flex}.drawer-list-item.active [style*=color-text-tertiary]{color:var(--color-primary-hover)!important}.drawer-list-item{touch-action:manipulation}.drawer-b{flex:1;min-width:0;min-height:0;overflow-y:auto;background-color:var(--color-bg-surface);-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--color-border-primary) transparent}.drawer-b::-webkit-scrollbar{width:8px}.drawer-b::-webkit-scrollbar-thumb{background-color:var(--color-border-primary);border-radius:8px}.drawer-b-in{padding:var(--space-6) var(--space-7) var(--space-8)}.drawer .modal-f{border-top:1px solid var(--color-border-primary);flex-shrink:0}.desc-sec+.desc-sec{margin-top:var(--space-6)}.desc-sec-h{display:flex;align-items:center;gap:var(--space-2);margin:0 0 var(--space-3);font-size:var(--font-size-sm);font-weight:var(--font-weight-extrabold);color:var(--color-text-secondary)}.desc-sec-h .dsh-ic{width:22px;height:22px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;color:var(--color-primary-hover);background:var(--color-primary-light);border:1px solid var(--color-primary-border);flex-shrink:0}.desc{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background-color:var(--color-border-tertiary);border:1px solid var(--color-border-tertiary);border-radius:var(--radius-md);overflow:hidden}.desc-item{display:flex;align-items:flex-start;gap:var(--space-3);padding:9px var(--space-4);min-width:0;background-color:var(--color-bg-surface)}.desc-item.full{grid-column:1 / -1}.desc-item-ph:after{content:"";display:block;height:20px}.desc-item dt{flex:0 0 76px;font-size:var(--font-size-xs);line-height:20px;color:var(--color-text-tertiary);word-break:keep-all}.desc-item dd{flex:1;min-width:0;margin:0;font-size:var(--font-size-sm);line-height:20px;color:var(--color-text-primary);word-break:break-word}.desc-item dd .dd-tag{display:inline-flex;align-items:center;margin-left:6px;vertical-align:1px}@media (max-width: 720px){.desc{grid-template-columns:1fr}.desc-item dt{flex-basis:68px}}@keyframes slideIn{0%{transform:translate(28px);opacity:.6}to{transform:none;opacity:1}}@keyframes drSlide{0%{transform:translate(52px);opacity:.35}to{transform:none;opacity:1}}@keyframes drFade{0%{opacity:0}to{opacity:1}}#toastRoot{position:fixed;top:16px;left:50%;transform:translate(-50%);z-index:var(--z-toast);display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}.toast{background:linear-gradient(180deg,#16332e,#0e2622);color:var(--color-text-inverse);padding:11px 17px;border-radius:12px;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);box-shadow:0 14px 34px -12px #0f28238c,inset 0 1px #ffffff1f;animation:popIn var(--duration-fast) var(--ease-standard);display:flex;align-items:center;gap:8px;max-width:90vw}.toast.ok{background:linear-gradient(180deg,#127a55,#0e6144)}.toast.err{background:linear-gradient(180deg,#9c3a30,#7f2c24)}.toast.warn{background:linear-gradient(180deg,#8a5a16,#6f4712)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px}.form-grid .full{grid-column:1 / -1}.req:after{content:" *";color:var(--color-danger)}.hint{font-size:var(--font-size-xs);color:var(--color-text-quaternary);margin-top:4px;line-height:var(--line-height-relaxed)}.err-t{font-size:var(--font-size-xs);color:var(--color-danger);margin-top:3px;line-height:1.5}.empty{padding:30px 14px;text-align:center;color:var(--color-text-quaternary)}.empty svg{opacity:.5;margin-bottom:8px}.empty p{margin:0;font-size:var(--font-size-sm);line-height:var(--line-height-normal)}.todo-row{display:flex;align-items:center;gap:var(--space-4);padding:9px 11px;border:1px solid var(--color-border-primary);border-radius:var(--radius-sm);margin-bottom:7px;background:linear-gradient(180deg,#fff,#fbfdfc);transition:border-color var(--duration-normal) var(--ease-standard),background var(--duration-normal) var(--ease-standard),transform var(--duration-normal) var(--ease-standard),box-shadow var(--duration-normal) var(--ease-standard);box-shadow:var(--shadow-sm)}.todo-row:hover{border-color:var(--color-primary-soft);background:linear-gradient(180deg,#fff,var(--color-primary-light));transform:translateY(-1px);box-shadow:0 6px 16px -8px #0e8f864d}.todo-row.over{border-color:var(--color-danger-border);background:linear-gradient(180deg,#fff,var(--color-danger-light))}.todo-ico{width:32px;height:32px;border-radius:var(--radius-xs);display:flex;align-items:center;justify-content:center;flex:0 0 32px;box-shadow:inset 0 1px #ffffffb3}.todo-main{flex:1;min-width:0}.todo-main .t1{font-size:var(--font-size-sm);font-weight:var(--font-weight-bold);display:flex;align-items:center;gap:6px;flex-wrap:wrap;line-height:var(--line-height-tight)}.todo-main .t2{font-size:var(--font-size-xs);color:var(--color-text-quaternary);margin-top:2px;line-height:1.4}.mlist{display:flex;flex-direction:column;gap:9px}.mcard{border:1px solid var(--color-border-primary);border-radius:var(--radius-sm);padding:11px;background:linear-gradient(180deg,#fff,#fbfdfc);box-shadow:var(--shadow-sm),inset 0 1px #fff}.mcard .r1{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.mcard .nm{font-weight:var(--font-weight-extrabold);font-size:var(--font-size-base)}.mcard .kv{display:grid;grid-template-columns:auto 1fr;gap:2px 9px;font-size:var(--font-size-sm);margin-top:7px;color:var(--color-text-secondary)}.mcard .kv b{color:var(--color-text-quaternary);font-weight:var(--font-weight-semibold)}.tl{position:relative;padding-left:18px}.tl:before{content:"";position:absolute;left:5px;top:4px;bottom:4px;width:2px;background-color:var(--color-border-primary)}.tl-i{position:relative;margin-bottom:10px}.tl-i:before{content:"";position:absolute;left:-17px;top:4px;width:9px;height:9px;border-radius:50%;background-color:#fff;border:2.5px solid var(--color-primary-soft);box-shadow:0 1px 3px #143c3226}.tl-i.hr:before{border-color:var(--color-primary)}.tl-i.cd:before{border-color:var(--color-border-primary)}.tl-i .tt{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);line-height:1.45}.tl-i .tm{font-size:var(--font-size-xs);color:var(--color-text-quaternary);margin-top:1px;line-height:1.4}.file-drop{border:1.5px dashed #bfd9d2;background:linear-gradient(180deg,#f7fbf9,#fbfdfc);border-radius:12px;padding:14px;text-align:center;cursor:pointer;transition:border-color var(--duration-normal) var(--ease-standard),background var(--duration-normal) var(--ease-standard)}.file-drop:hover{border-color:var(--color-primary-soft);background:linear-gradient(180deg,var(--color-primary-light),#f4faf8)}.file-list{margin-top:8px;display:flex;flex-direction:column;gap:6px}.file-row{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--color-border-primary);border-radius:var(--radius-xs);background:linear-gradient(180deg,#fdfefe,#f8fbfa);font-size:var(--font-size-sm);box-shadow:var(--shadow-sm)}.file-row .fm{width:28px;height:28px;border-radius:7px;background:linear-gradient(145deg,var(--color-primary-light),#eef8f5);color:var(--color-primary);display:flex;align-items:center;justify-content:center;flex:0 0 28px;font-size:10px;font-weight:var(--font-weight-extrabold);box-shadow:inset 0 1px #fffc}.grid{display:grid;gap:var(--space-4)}.g-2{grid-template-columns:repeat(2,1fr)}.g-3{grid-template-columns:repeat(3,1fr)}.g-4{grid-template-columns:repeat(4,1fr)}.g-21{grid-template-columns:2fr 1fr}.g-12{grid-template-columns:1fr 2fr}.row{display:flex;gap:var(--space-4);align-items:center;flex-wrap:wrap}.kv{display:grid;grid-template-columns:auto 1fr;gap:5px 12px;font-size:var(--font-size-sm);color:var(--color-text-secondary)}.kv b{color:var(--color-text-tertiary);font-weight:var(--font-weight-semibold);white-space:nowrap}.spread{display:flex;align-items:center;gap:var(--space-4)}.ml-auto{margin-left:auto}.mt6{margin-top:5px}.mt10{margin-top:8px}.mt14{margin-top:11px}.mt18{margin-top:14px}.mb0{margin-bottom:0}.muted{color:var(--color-text-tertiary)}.mut2{color:var(--color-text-quaternary)}.tiny{font-size:var(--font-size-xs)}.small{font-size:var(--font-size-sm)}.mono{font-family:var(--font-family-mono)}.center{text-align:center}.login-tip{margin-top:18px;padding:12px 14px;background:linear-gradient(180deg,var(--color-primary-light),#f0f9f7);border:1px solid var(--color-primary-border);border-radius:11px;font-size:var(--font-size-xs);color:#2c5f58;line-height:1.75;box-shadow:inset 0 1px #ffffffb3}.login-tip b{color:var(--color-primary-hover);font-weight:var(--font-weight-bold)}.login-err{background:linear-gradient(180deg,var(--color-danger-light),#fdece9);border:1px solid var(--color-danger-border);color:#a73c32;font-size:var(--font-size-sm);padding:10px 12px;border-radius:10px;margin-bottom:13px;line-height:var(--line-height-normal)}.boot-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-boot);display:flex;align-items:center;justify-content:center;background:linear-gradient(165deg,#e6f1ee,#eff6f4 42%,#e9f2f0);transition:opacity .25s ease}.boot-mask.hidden{display:none}.boot-box{display:flex;flex-direction:column;align-items:center;gap:13px;padding:28px 32px;border-radius:18px;background:linear-gradient(170deg,#fff,#fbfdfc);box-shadow:var(--shadow-lg),inset 0 1px #fff;max-width:88vw;border:1px solid var(--glass-border)}.boot-spin{width:32px;height:32px;border-radius:50%;border:3px solid #d3efea;border-top-color:var(--color-primary);animation:hrspin .8s linear infinite}@keyframes hrspin{to{transform:rotate(360deg)}}.boot-t{font-size:var(--font-size-md);font-weight:var(--font-weight-extrabold);color:#0f2d28}.boot-s{font-size:var(--font-size-sm);color:var(--color-text-tertiary);text-align:center;line-height:1.6;max-width:300px}.conn-bar{display:flex;align-items:center;gap:9px;padding:10px 15px;background:linear-gradient(180deg,var(--color-danger-light),#fbece9);color:#a73c32;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);border-bottom:1px solid var(--color-danger-border)}.conn-bar.hidden{display:none}.udrop{position:absolute;top:calc(100% + 12px);right:0;min-width:236px;background-color:#fff;border:1px solid var(--color-border-primary);border-radius:14px;box-shadow:0 18px 48px -18px #0f2d2859;padding:6px;display:none;z-index:var(--z-dropdown);animation:drFade var(--duration-fast) var(--ease-standard)}.udrop:before{content:"";position:absolute;left:0;right:0;top:-13px;height:13px}.userchip:hover .udrop,.userchip.open .udrop{display:block}.ud-head{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid var(--color-border-secondary);margin-bottom:4px}.ud-item{display:flex;align-items:center;gap:9px;padding:10px 12px;border-radius:10px;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:#334155;cursor:pointer;transition:background-color var(--duration-fast) var(--ease-standard)}.ud-item em{margin-left:auto;font-style:normal;font-size:var(--font-size-xs);color:#94a3b8;font-weight:500;white-space:nowrap}.ud-item:hover{background-color:#f1f5f9}.ud-item.danger{color:#b91c1c}.ud-item.danger:hover{background-color:#fef2f2}.legend{display:flex;flex-wrap:wrap;gap:7px 13px;margin-top:9px}.legend span{display:inline-flex;align-items:center;gap:5px;font-size:var(--font-size-xs);color:var(--color-text-secondary)}.legend i{width:9px;height:9px;border-radius:3px;display:block}.chart-wrap{width:100%;overflow-x:auto}.chart-wrap svg{display:block;max-width:100%}.rank-row{display:flex;align-items:center;gap:9px;padding:6px 0;font-size:var(--font-size-sm)}.rank-row .rn{flex:0 0 22px;height:22px;border-radius:6px;background-color:var(--color-border-secondary);color:var(--color-text-secondary);display:flex;align-items:center;justify-content:center;font-weight:var(--font-weight-extrabold);font-size:var(--font-size-xs);box-shadow:inset 0 1px #fff9}.rank-row .rn.top{background:linear-gradient(180deg,#19ab9e,var(--color-primary));color:var(--color-text-inverse);box-shadow:inset 0 1px #ffffff59}.rank-row .rl{flex:0 0 92px;font-weight:var(--font-weight-semibold);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rank-row .rb{flex:1}.rank-row .rv{flex:0 0 54px;text-align:right;font-variant-numeric:tabular-nums;font-weight:var(--font-weight-bold)}.perm-matrix{overflow-x:auto}.perm-matrix table{width:100%;border-collapse:collapse;font-size:var(--font-size-sm);min-width:640px}.perm-matrix th,.perm-matrix td{border:1px solid var(--color-border-secondary);padding:6px 9px;text-align:center}.perm-matrix th{background:linear-gradient(180deg,#f7faf9,#fbfdfc);font-size:var(--font-size-xs);color:var(--color-text-tertiary);font-weight:var(--font-weight-extrabold)}.perm-matrix td:first-child,.perm-matrix th:first-child{text-align:left;white-space:nowrap;color:var(--color-text-secondary);font-weight:var(--font-weight-semibold)}.perm-matrix input{width:15px;height:15px;accent-color:var(--color-primary)}.mail-preview{border:1px solid var(--color-border-primary);border-radius:var(--radius-sm);background:linear-gradient(180deg,#fbfdfc,#f9fcfb);padding:12px;font-size:var(--font-size-sm);line-height:1.7;white-space:pre-wrap;color:var(--color-text-secondary);max-height:320px;overflow:auto}.mail-body-inp{min-height:170px;font-family:var(--font-family-mono);font-size:var(--font-size-sm)}.log-row{display:flex;gap:9px;padding:7px 0;border-bottom:1px dashed var(--color-border-secondary);font-size:var(--font-size-xs)}.log-row .lt{color:var(--color-text-quaternary);flex:0 0 122px;font-variant-numeric:tabular-nums}.log-row .la{flex:0 0 72px;font-weight:var(--font-weight-bold)}.log-row .ld{flex:1;min-width:0;color:var(--color-text-secondary);word-break:break-word}.qr-box{display:flex;flex-direction:column;align-items:center;gap:9px}.qr-box .qr-wrap{padding:11px;background-color:#fff;border:1px solid var(--color-border-primary);border-radius:var(--radius-sm);box-shadow:var(--shadow-md),inset 0 1px #fff}.qr-box svg{display:block;width:176px;height:176px}.link-box{width:100%;background:linear-gradient(180deg,#f7fbf9,#fbfdfc);border:1px solid var(--color-border-primary);border-radius:10px;padding:8px 10px;font-size:var(--font-size-xs);word-break:break-all;font-family:var(--font-family-mono);color:#33544e;max-height:88px;overflow:auto}.rp-box{margin-top:10px;border:1px solid var(--color-border-primary);border-radius:var(--radius-sm);background:linear-gradient(180deg,#fdfefe,#f9fcfb);padding:11px 12px;font-size:var(--font-size-sm)}.rp-box.busy{border-color:#bfe3dc;background:linear-gradient(180deg,#f6fbf9,#f2faf7)}.rp-box.err{border-color:var(--color-danger-border);background:var(--color-danger-light)}.rp-head{display:flex;align-items:center;gap:8px;font-weight:var(--font-weight-bold);color:var(--color-text-primary)}.rp-head .sp{flex:1}.rp-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.rp-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:var(--radius-full);font-size:var(--font-size-xs);font-weight:var(--font-weight-bold);background-color:var(--color-primary-light);color:var(--color-primary);border:1px solid #d7e6ff;white-space:nowrap}.rp-chip.fill{background-color:#ecfdf5;color:#15803d;border-color:#bbf7d0}.rp-chip.conflict{background-color:#fff7ed;color:#c2410c;border-color:#fed7aa}.rp-warn{margin-top:7px;color:#b45309;font-size:var(--font-size-xs);line-height:1.7}.rp-ava{margin-top:9px;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.rp-ava img{width:52px;height:52px;border-radius:10px;object-fit:cover;border:1px solid var(--color-border-primary);background-color:#fff;display:block}.rp-ava .t{flex:1;min-width:150px;line-height:1.6}.inp.rp-fill{border-color:#86efac;background-color:#f7fdfa;box-shadow:0 0 0 3px #22c55e1a}.inp.rp-conf{border-color:#fdba74;background-color:#fffaf3;box-shadow:0 0 0 3px #f973161a}.rp-verify{display:flex;align-items:flex-start;gap:10px;padding:9px 10px;border:1px solid #fed7aa;background-color:#fffaf3;border-radius:10px;margin-top:8px}.rp-verify .k{font-size:var(--font-size-xs);font-weight:var(--font-weight-extrabold);color:#c2410c;flex:0 0 62px;padding-top:1px}.rp-verify .v{flex:1;min-width:0;font-size:var(--font-size-xs);line-height:1.7}.rp-verify .v b{font-weight:var(--font-weight-extrabold)}.rp-verify .a{display:flex;gap:6px;flex:0 0 auto}@media (min-width: 1440px){.view{padding:var(--space-5)}.grid{gap:var(--space-5)}.card-b{padding:var(--space-5)}.kpi{padding:var(--space-5) var(--space-6)}.kpi .num{font-size:var(--font-size-3xl)}}@media (min-width: 1281px) and (max-width: 1439px){.view{padding:var(--space-5)}}@media (max-width: 1279px){.g-4{grid-template-columns:repeat(4,1fr)}.grid{gap:var(--space-4)}}@media (max-width: 1080px){.g-3,.g-4{grid-template-columns:repeat(2,1fr)}.g-21,.g-12{grid-template-columns:1fr}.hide-sm{display:none!important}.only-sm{display:block!important}.mlist.only-sm{display:flex!important}}@media (max-width: 767px){:root{--sidebar-width: 0px}.aside{transform:translate(-102%);width:280px;box-shadow:0 0 60px -10px #143c3266;z-index:50}.aside.open{transform:none}.main{margin-left:0}.hamb{display:flex}.g-2,.g-3,.g-4{grid-template-columns:repeat(2,1fr)}.g-21,.g-12{grid-template-columns:1fr}.g-chart{grid-template-columns:1fr!important}.view{padding:var(--space-3) var(--space-3) calc(var(--space-5) + env(safe-area-inset-bottom))}.topbar{padding:0 var(--space-3);height:48px}.topbar h2{font-size:var(--font-size-base)}.form-grid{grid-template-columns:1fr}.modal-mask{padding:8px}.modal{max-height:96vh;border-radius:16px}.modal-h{padding:var(--space-4) var(--space-4)}.modal-b{padding:var(--space-4)}.modal-f{padding:var(--space-3) var(--space-4)}.drawer,.drawer.has-list{width:100%}.drawer-h{padding:var(--space-4) var(--space-5)}.drawer-list{width:236px}.drawer-list-h{padding:var(--space-4) var(--space-4) var(--space-3)}.drawer-b-in{padding:var(--space-5) var(--space-5) var(--space-6)}.hide-sm{display:none!important}.only-sm{display:block!important}.mlist.only-sm{display:flex!important}.card-b{padding:var(--space-4)}.card-h{padding:var(--space-3) var(--space-4);gap:var(--space-2)}.card-h .h-t{flex:1 1 100%}.card-h .r{flex:1 1 auto;margin-left:0}.card-h h3{font-size:var(--font-size-sm)}.card-h .sub{font-size:10.5px}.card-h .r .btn{height:28px;min-height:28px;padding:0 8px;font-size:11.5px}.card-h .r .btn svg{width:12px;height:12px}.kpi{padding:var(--space-4) var(--space-4)}.kpi .lab{font-size:var(--font-size-xs)}.kpi .num{font-size:var(--font-size-xl);margin-top:var(--space-1)}.kpi .foot{font-size:10px;margin-top:var(--space-1)}.kpi .ico{width:28px;height:28px;right:var(--space-3);top:var(--space-3)}.kpi .ico svg{width:14px;height:14px}.grid{gap:var(--space-3)}.mt14{margin-top:9px}.mt10{margin-top:7px}.filters{grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:var(--space-2)}.filters .full{grid-column:1 / -1}.filters .fbar>.seg{flex:1 1 100%}.filters .fkw{grid-column:1 / -1;min-width:0}.filters>.seg{grid-column:1 / -1}.filters .inp{height:36px;font-size:var(--font-size-sm)}.filters .chk{font-size:11.5px}.qr-box svg{width:150px;height:150px}.pager{justify-content:center}.todo-row{padding:7px 9px;gap:var(--space-2);margin-bottom:6px}.todo-ico{width:28px;height:28px;flex:0 0 28px}.todo-ico svg{width:15px;height:15px}.todo-main .t1{font-size:var(--font-size-sm)}.todo-main .t2{font-size:10.5px}.btn{height:36px;font-size:var(--font-size-sm)}.btn-sm{height:30px;min-height:30px;font-size:11.5px}.seg button{height:28px;font-size:11.5px}.inp,select.inp{height:40px;font-size:var(--font-size-sm)}.hide-channel-sm{display:none!important}}@media (max-width: 480px){.filters{grid-template-columns:repeat(auto-fit,minmax(95px,1fr));gap:5px}.top-right .hide-xs{display:none!important}.kpi .num{font-size:var(--font-size-lg)}.kpi .lab{font-size:10.5px}.kpi .foot{font-size:10px}.kpi{padding:var(--space-3) var(--space-4)}.kpi .ico{width:26px;height:26px;right:8px;top:8px}.card-h h3{font-size:12.5px}.card-h .sub{display:none}.card-h{padding:8px 10px}.card-b,.modal-b{padding:var(--space-3)}.login-box{padding:18px 14px 16px;border-radius:14px}.login-box h1{font-size:var(--font-size-md)}.brand .tt,.topbar h2,.mcard .nm{font-size:var(--font-size-sm)}.form-grid{gap:8px}.view{padding:var(--space-2) var(--space-2) calc(var(--space-4) + env(safe-area-inset-bottom))}.grid{gap:var(--space-2)}.mt14{margin-top:8px}.mt10{margin-top:6px}.todo-row{padding:6px 8px}.todo-main .t1{font-size:12px}.todo-main .t2{font-size:10px}.drawer.has-list .drawer-body{flex-direction:column}.drawer.has-list .drawer-list{width:100%;flex:0 0 auto;border-right:none;border-bottom:1px solid var(--color-border-primary)}.drawer.has-list .drawer-list-scroll{display:flex;gap:var(--space-2);flex:0 0 auto;padding:var(--space-2) var(--space-3);overflow-x:auto;overflow-y:hidden}.drawer.has-list .drawer-list-item{flex:0 0 auto;max-width:190px;margin-bottom:0;padding:var(--space-3) var(--space-3) var(--space-3) var(--space-4)}.drawer.has-list .drawer-list-item:before{left:3px;height:20px}.drawer.has-list .drawer-list-empty{display:none}.drawer.has-list .drawer-b-in{padding:var(--space-4) var(--space-4) var(--space-6)}}@media print{.aside,.topbar,.no-print{display:none!important}.main{margin-left:0}}@media (prefers-reduced-motion: reduce){.boot-spin{animation:none}.boot-mask,.modal,.drawer,.toast,.backdrop,.aside,.kpi,.btn,.todo-row{transition:none!important;animation:none!important}}.nav-gtitle,.nav-item,.userchip{touch-action:manipulation}.emp-pick{position:relative}.emp-pick-list{position:fixed;left:0;top:0;width:0;z-index:60;margin-top:0;max-height:240px;overflow-y:auto;background:var(--color-bg-surface);border:1px solid var(--color-border-primary);border-radius:var(--radius-md);box-shadow:var(--shadow-md)}.emp-pick-item{padding:7px 10px;font-size:13px;line-height:1.5;color:var(--color-text-primary);cursor:pointer;border-bottom:1px solid var(--color-border-tertiary);touch-action:manipulation}.emp-pick-item:last-child{border-bottom:0}.emp-pick-item:hover,.emp-pick-item:focus{background:var(--color-primary-lighter)}
