:root{--bg:#f6f7fb;--card:#ffffff;--card-2:#f1f3f9;--card-3:#e8eaf3;--ink:#11131c;--ink-soft:#5a6178;--ink-faint:#9197ac;--line:#e6e8f1;--line-2:#d6d9e6;--accent:#5b5bf0;--accent-dk:#4747d8;--accent-tint:#ecedfe;--accent-soft:#d6d7fb;--ok:#18a05f;--ok-tint:#e6f5ed;--warn:#bc7a12;--warn-tint:#f9efd8;--danger:#dd3b54;--danger-tint:#fbe8ec;--radius:9px;--radius-sm:7px;--sh-sm:0 1px 2px rgba(16,19,26,.06), 0 1px 1px rgba(16,19,26,.04);--sh-md:0 6px 20px -6px rgba(16,19,26,.14), 0 2px 6px -2px rgba(16,19,26,.08);--sh-pop:0 18px 48px -16px rgba(16,19,26,.28);--tabh:60px;--toph:56px;--rail:216px;--fg:var(--ink);--mut:var(--ink-soft);--accent2:var(--ok);--hero:radial-gradient(1100px 460px at 82% -10%, #ecedfe 0%, rgba(236,237,254,0) 60%);--topbar-bg:rgba(255,255,255,.82);--tabbar-bg:rgba(255,255,255,.9);--rail-bg:rgba(255,255,255,.7);--disp:"Manrope","Noto Sans TC",sans-serif;--body:"Manrope","Noto Sans TC",-apple-system,sans-serif;--mono:"IBM Plex Mono","Noto Sans TC",ui-monospace,monospace;--ico-empty:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 7l1.5 12.5a1 1 0 0 0 1 .9h11a1 1 0 0 0 1-.9L20 7'/%3E%3Cpath d='M2 7h20'/%3E%3Cpath d='M9 7V5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2'/%3E%3C/svg%3E");--ico-alert:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' y1='8' x2='12' y2='13'/%3E%3Cline x1='12' y1='16.5' x2='12' y2='16.6'/%3E%3C/svg%3E")}html[data-theme=dark]{--bg:#08090d;--card:#101218;--card-2:#161922;--card-3:#1d212c;--ink:#e7e9f2;--ink-soft:#8b91a3;--ink-faint:#5b6175;--line:#20232e;--line-2:#2c303c;--accent:#7c7cf5;--accent-dk:#9a9aff;--accent-tint:#16182a;--accent-soft:#26294a;--ok:#34d27e;--ok-tint:#0d2418;--warn:#e6ac42;--warn-tint:#27200f;--danger:#ff5d75;--danger-tint:#2a1419;--sh-sm:0 1px 2px rgba(0,0,0,.6);--sh-md:0 14px 40px -14px rgba(0,0,0,.8), 0 2px 8px -2px rgba(0,0,0,.5);--sh-pop:0 24px 60px -18px rgba(0,0,0,.85);--hero:radial-gradient(950px 400px at 85% -10%, rgba(124,124,245,.14) 0%, rgba(124,124,245,0) 60%);--topbar-bg:rgba(8,9,13,.72);--tabbar-bg:rgba(8,9,13,.85);--rail-bg:rgba(16,18,24,.6);color-scheme:dark}@media (prefers-color-scheme:dark){html:not([data-theme=light]){--bg:#08090d;--card:#101218;--card-2:#161922;--card-3:#1d212c;--ink:#e7e9f2;--ink-soft:#8b91a3;--ink-faint:#5b6175;--line:#20232e;--line-2:#2c303c;--accent:#7c7cf5;--accent-dk:#9a9aff;--accent-tint:#16182a;--accent-soft:#26294a;--ok:#34d27e;--ok-tint:#0d2418;--warn:#e6ac42;--warn-tint:#27200f;--danger:#ff5d75;--danger-tint:#2a1419;--sh-sm:0 1px 2px rgba(0,0,0,.6);--sh-md:0 14px 40px -14px rgba(0,0,0,.8), 0 2px 8px -2px rgba(0,0,0,.5);--sh-pop:0 24px 60px -18px rgba(0,0,0,.85);--hero:radial-gradient(950px 400px at 85% -10%, rgba(124,124,245,.14) 0%, rgba(124,124,245,0) 60%);--topbar-bg:rgba(8,9,13,.72);--tabbar-bg:rgba(8,9,13,.85);--rail-bg:rgba(16,18,24,.6);color-scheme:dark}}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{margin:0;padding:0;height:100%}body{font-family:var(--body);color:var(--ink);font-size:15px;line-height:1.5;font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;letter-spacing:-.005em;background:var(--bg)}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit}::selection{background:var(--accent-soft);color:var(--ink)}.topbar{position:fixed;top:0;left:0;right:0;height:var(--toph);z-index:30;display:flex;align-items:center;gap:10px;padding:0 18px;background:var(--topbar-bg);-webkit-backdrop-filter:saturate(1.6) blur(12px);backdrop-filter:saturate(1.6) blur(12px);border-bottom:1px solid var(--line)}.brand{font-family:var(--disp);font-weight:800;font-size:17px;letter-spacing:-.02em;color:var(--ink);position:relative;padding-left:16px}.brand:before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:9px;height:9px;border-radius:3px;background:var(--accent);box-shadow:0 0 0 4px var(--accent-tint)}.badge{font-family:var(--disp);font-size:11px;font-weight:700;letter-spacing:.01em;color:var(--ink-soft);background:var(--card-3);border:1px solid var(--line);padding:4px 10px;border-radius:999px}.badge.mssql{background:var(--accent-tint);color:var(--accent-dk);border-color:var(--accent-soft)}.badge.off{background:var(--danger-tint);color:var(--danger);border-color:#f3c4c4}.view{padding:18px 16px;padding-bottom:calc(var(--tabh) + 26px);margin-top:var(--toph);min-height:calc(100vh - var(--toph));animation:viewIn .3s ease both}@keyframes viewIn{0%{opacity:0}to{opacity:1}}.loading{color:var(--ink-soft);text-align:center;padding:42px 0 38px;display:flex;flex-direction:column;align-items:center;gap:13px;font-size:13.5px}.loading:before{content:"";width:26px;height:26px;border-radius:50%;border:2.5px solid var(--line-2);border-top-color:var(--accent);animation:spin .72s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.empty{color:var(--ink-faint);text-align:center;padding:38px 18px 40px;font-size:14px}.empty:before{content:"";display:block;width:34px;height:34px;margin:0 auto 11px;opacity:.55;background:currentColor;-webkit-mask:var(--ico-empty) center/contain no-repeat;mask:var(--ico-empty) center/contain no-repeat}.err{color:var(--danger);background:var(--danger-tint);border:1px solid var(--danger-tint);border-left:3px solid var(--danger);border-radius:var(--radius-sm);padding:12px 14px 12px 13px;margin:10px 0;display:flex;gap:10px;align-items:flex-start;line-height:1.5;animation:cardIn .28s cubic-bezier(.2,.7,.3,1) both}.err:before{content:"";flex:none;width:18px;height:18px;margin-top:1px;background:currentColor;-webkit-mask:var(--ico-alert) center/contain no-repeat;mask:var(--ico-alert) center/contain no-repeat}.tabbar{position:fixed;bottom:0;left:0;right:0;height:var(--tabh);z-index:30;display:flex;background:var(--tabbar-bg);-webkit-backdrop-filter:saturate(1.6) blur(12px);backdrop-filter:saturate(1.6) blur(12px);border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom)}.tab{flex:1;background:none;border:none;color:var(--ink-faint);font-size:11px;font-weight:600;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;cursor:pointer;text-decoration:none;position:relative;transition:color .15s}.tab .i{font-size:19px;line-height:1;transition:transform .15s}.tab.active{color:var(--accent)}.tab.active .i{transform:translateY(-1px)}.tab.active:after{content:"";position:absolute;top:7px;width:26px;height:26px;border-radius:9px;background:var(--accent-tint);z-index:-1}.tab:hover{color:var(--ink-soft)}.section-title{font-family:var(--disp);font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);margin:8px 2px 12px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;margin-bottom:11px;box-shadow:var(--sh-sm);animation:cardIn .34s cubic-bezier(.2,.7,.3,1) both}@keyframes cardIn{0%{opacity:0;transform:translateY(7px)}to{opacity:1;transform:none}}.card:nth-child(1){animation-delay:.01s}.card:nth-child(2){animation-delay:.04s}.card:nth-child(3){animation-delay:.07s}.card:nth-child(4){animation-delay:.1s}.card:nth-child(5){animation-delay:.13s}.card:nth-child(6){animation-delay:.16s}.card:nth-child(7){animation-delay:.19s}.card:nth-child(8){animation-delay:.22s}.row-tap{display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:pointer}.card:has(.row-tap){transition:box-shadow .16s,border-color .16s,transform .16s}.card:has(.row-tap):hover{box-shadow:var(--sh-md);border-color:var(--line-2);transform:translateY(-1px)}.row-tap:active{opacity:.7}.big{font-size:16px;font-weight:700;letter-spacing:-.015em}.muted{color:var(--ink-soft)}.chip{font-family:var(--disp);font-size:11px;font-weight:600;color:var(--ink-soft);background:var(--card-3);border:1px solid transparent;padding:2px 9px;border-radius:999px}.chip.chip-on{color:var(--ok);background:var(--ok-tint)}.chip.chip-rej{color:var(--danger);background:var(--danger-tint)}.whoami{margin-left:auto;margin-right:6px;font-size:13px;font-weight:500;color:var(--ink-soft);max-width:34vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.logout{margin-right:2px;background:var(--card);color:var(--ink-soft);border:1px solid var(--line);border-radius:9px;padding:5px 11px;font-size:14px;cursor:pointer;transition:.14s}.logout:hover{background:var(--danger-tint);color:var(--danger);border-color:#f3c4c4}.login-wrap{display:flex;align-items:center;justify-content:center;min-height:90vh;padding:20px}.login-card{width:100%;max-width:368px;background:var(--card);border:1px solid var(--line);border-radius:18px;padding:32px 28px;display:flex;flex-direction:column;box-shadow:var(--sh-pop)}.login-brand{font-family:var(--disp);font-size:25px;font-weight:800;letter-spacing:-.02em;margin-bottom:4px}.approve-box{border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px 14px;margin-bottom:10px;background:var(--card-2)}.rec-field{display:flex;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px solid var(--line)}.rec-field:last-child{border-bottom:none}.rec-k{color:var(--ink-soft);font-size:12.5px;font-weight:500;white-space:nowrap}.rec-v{text-align:right;word-break:break-all;font-variant-numeric:tabular-nums;font-weight:500}.search{width:100%;padding:12px 15px;border-radius:var(--radius-sm);border:1px solid var(--line-2);background:var(--card);color:var(--ink);font-size:15px;margin-bottom:12px;font-family:var(--body);transition:border-color .15s,box-shadow .15s}.search::placeholder{color:var(--ink-faint)}.search:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-tint)}.pager{display:flex;align-items:center;justify-content:center;gap:14px;margin:18px 0 4px}.pager button{background:var(--card);color:var(--ink);border:1px solid var(--line-2);border-radius:9px;padding:9px 16px;font-size:14px;font-weight:600;cursor:pointer;transition:.14s}.pager button:not(:disabled):hover{border-color:var(--accent);color:var(--accent);background:var(--accent-tint)}.pager button:disabled{opacity:.4}.pager .muted{font-family:var(--mono);font-size:13px}.back{background:none;border:none;color:var(--accent);font-size:14px;font-weight:600;cursor:pointer;padding:4px 0;margin-bottom:8px;display:inline-block}.back:hover{text-decoration:underline}.seg-bar{display:flex;gap:8px;overflow-x:auto;margin-bottom:14px;padding-bottom:3px;flex-wrap:wrap}.seg{flex:0 0 auto;background:var(--card);color:var(--ink-soft);border:1px solid var(--line-2);border-radius:var(--radius-sm);padding:8px 16px;font-size:13.5px;font-weight:600;cursor:pointer;white-space:nowrap;transition:.14s}.seg:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-tint)}.seg.on{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 0 18px -5px var(--accent),inset 0 1px #ffffff2e}.seg-collapse-toggle{display:flex;align-items:center;gap:10px;width:100%;margin-bottom:12px;background:var(--card);color:var(--ink);border:1px solid var(--line-2);border-radius:var(--radius-sm);padding:11px 14px;font-size:14px;font-weight:600;cursor:pointer}.seg-collapse-cur{flex:1;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.seg-collapse-act{flex:0 0 auto;color:var(--accent);font-size:13px;font-weight:700}.seg-collapse .seg-collapse-list{display:none}.seg-collapse.open .seg-collapse-list{display:flex}@media (min-width:860px){.seg-collapse-toggle{display:none}.seg-collapse .seg-collapse-list{display:flex!important}}.sort-bar{align-items:center;margin-top:-4px;margin-bottom:12px}.sort-bar .sort-label{flex:0 0 auto;font-size:12.5px;font-weight:600}.sort-bar .sort-dir{font-variant-numeric:tabular-nums}.sub{margin-top:5px;display:flex;flex-wrap:wrap;gap:5px 14px;font-size:12.5px;font-variant-numeric:tabular-nums}.sub b{color:var(--ink-soft);font-weight:600}.tree details{margin-left:2px;border-left:2px solid var(--line);padding-left:12px;margin-bottom:4px}.tree>details{border-left:none;padding-left:0}.tree summary{cursor:pointer;padding:11px 4px;list-style:none;display:flex;align-items:center;gap:9px;border-bottom:1px solid var(--line)}.tree summary::-webkit-details-marker{display:none}.tree summary:before{content:"›";color:var(--accent);font-weight:700;transition:transform .15s;font-size:17px;line-height:1}.tree details[open]>summary:before{transform:rotate(90deg)}.tree summary.sys{font-family:var(--disp);font-weight:700;letter-spacing:-.01em;font-size:15.5px}.leaf{padding:10px 4px 10px 18px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;gap:8px}.leaf-link{cursor:pointer;color:var(--accent)}.leaf-link:active{opacity:.7}.leaf-link:hover{color:var(--accent-dk)}.menu-self-link{cursor:pointer;color:var(--accent)}.menu-self-link:hover{text-decoration:underline}.fav-heart{margin-left:auto;flex:none;background:none;border:none;padding:4px;cursor:pointer;color:var(--ink-faint);border-radius:8px;line-height:0;transition:.14s}.fav-heart:hover{color:var(--danger);background:var(--card-3)}.fav-heart.on{color:var(--danger)}.form-code{font-size:11px;color:var(--ink-faint);font-family:var(--mono)}.wip-tag{font-family:var(--disp);font-size:10px;font-weight:700;letter-spacing:.02em;color:var(--warn);background:var(--warn-tint);border:1px solid #f0d79a;padding:2px 8px;border-radius:999px;margin-left:7px;white-space:nowrap}.seg.seg-wip{color:var(--warn);border-color:#eccf86}.seg.seg-wip:hover{background:var(--warn-tint);border-color:#e6c069}.seg.seg-wip.on{background:var(--warn);color:#fff;border-color:var(--warn)}.wip-banner{background:var(--warn-tint);color:#8a5806;border:1px solid #f0d79a;border-radius:var(--radius-sm);padding:11px 14px;font-size:13px;margin-bottom:12px}.pending-tag{font-family:var(--disp);font-size:10px;font-weight:700;letter-spacing:.02em;color:var(--accent-dk);background:var(--accent-tint);border:1px solid var(--accent-soft);padding:2px 8px;border-radius:999px;margin-left:7px;white-space:nowrap}.pending-banner{background:var(--accent-tint);color:var(--accent-dk);border:1px solid var(--accent-soft);border-left:4px solid var(--accent);border-radius:var(--radius-sm);padding:11px 14px;font-size:13px;margin-bottom:12px;line-height:1.6}.info-banner{background:var(--surface-2,#f4f6f8);color:var(--ink-2,#445);border:1px solid var(--line,#dde);border-left:4px solid var(--brand,#3a7bd5);border-radius:var(--radius-sm);padding:11px 14px;font-size:13px;margin-bottom:12px;line-height:1.6}.hidden-tag{font-family:var(--disp);font-size:10px;font-weight:700;letter-spacing:.02em;color:#6b7280;background:#f3f4f6;border:1px solid #d1d5db;padding:2px 8px;border-radius:999px;margin-left:7px;white-space:nowrap}.menu-search{position:relative;margin:0 2px 8px}.menu-search .search{width:100%}.menu-search-clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);background:none;border:none;color:var(--ink-soft);font-size:15px;cursor:pointer;padding:4px 6px;line-height:1}.menu-crumb{color:var(--ink-soft);font-size:12px;font-weight:500}.kv{display:grid;grid-template-columns:auto 1fr;gap:7px 16px;font-size:14px}.kv .k{color:var(--ink-soft);font-weight:500}.fld{display:flex;flex-direction:column;gap:5px;margin-bottom:12px}.fld:last-child{margin-bottom:0}.fld span{font-size:12.5px;color:var(--ink-soft);font-weight:500}.fld input{padding:11px 13px;border-radius:var(--radius-sm);border:1px solid var(--line-2);background:var(--card);color:var(--ink);font-size:15px;font-family:var(--body);transition:.15s}.fld input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-tint)}.line-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.link-del{background:none;border:none;color:var(--danger);font-size:13px;font-weight:600;cursor:pointer}.add-line{width:100%;padding:12px;border:1.5px dashed var(--line-2);background:var(--card-2);color:var(--accent);border-radius:var(--radius-sm);font-size:14px;font-weight:600;cursor:pointer;margin-bottom:14px;transition:.14s}.add-line:hover{border-color:var(--accent);background:var(--accent-tint)}.submit-btn{width:100%;padding:14px;border:none;background:var(--accent);color:#fff;border-radius:var(--radius-sm);font-size:15px;font-weight:700;cursor:pointer;box-shadow:var(--sh-sm);transition:.14s;letter-spacing:-.01em}.submit-btn:not(:disabled):hover{background:var(--accent-dk);box-shadow:var(--sh-md)}.submit-btn:not(:disabled):active{transform:translateY(1px)}.submit-btn:disabled{opacity:.5}.act-bar{display:flex;gap:10px;margin-bottom:11px;flex-wrap:wrap}.act-bar button,.act-bar a{flex:1;min-width:118px;text-align:center;padding:11px;border-radius:var(--radius-sm);border:1px solid var(--line-2);background:var(--card);color:var(--ink);font-size:14px;font-weight:600;cursor:pointer;text-decoration:none;transition:.14s}.act-bar button:hover,.act-bar a:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-tint)}.act-bar .danger{color:var(--danger);border-color:#f0c4c4}.act-bar .danger:hover{background:var(--danger);color:#fff;border-color:var(--danger)}.fab{position:fixed;right:18px;bottom:calc(var(--tabh) + 18px);z-index:20;background:var(--accent);color:#fff;border:none;border-radius:999px;padding:14px 22px;font-size:15px;font-weight:700;box-shadow:0 10px 28px -8px color-mix(in srgb,var(--accent) 70%,transparent),inset 0 1px #fff3;cursor:pointer;transition:.14s}.fab:hover{background:var(--accent-dk);transform:translateY(-1px)}.payroll .card-h{font-family:var(--disp);font-weight:700;font-size:14.5px;margin-bottom:8px;display:flex;align-items:center;justify-content:space-between;gap:8px}.payroll .row{display:flex;align-items:flex-end;gap:10px}.payroll .row.wrap{flex-wrap:wrap}.payroll .fld{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--ink-soft);min-width:90px;flex:1}.payroll .fld input,.payroll .fld select{background:var(--card);color:var(--ink);border:1px solid var(--line-2);border-radius:var(--radius-sm);padding:9px;font-size:14px;font-family:var(--mono)}.payroll .fld.ro{flex-direction:row;align-items:center;justify-content:space-between;background:var(--card-3);border:1px solid var(--line);border-radius:var(--radius-sm);padding:9px 11px}.payroll .fld.ro b{color:var(--ink);font-size:15px;font-family:var(--mono)}.payroll .grid-fields{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.payroll .btn{background:var(--card);color:var(--ink);border:1px solid var(--line-2);border-radius:var(--radius-sm);padding:10px 15px;font-size:14px;font-weight:600;cursor:pointer;white-space:nowrap;transition:.14s}.payroll .btn:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-tint)}.payroll .btn.sm{padding:5px 10px;font-size:12px}.payroll .btn.primary{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 0 18px -5px var(--accent),inset 0 1px #ffffff2e}.payroll .btn.primary:hover{background:var(--accent-dk)}.payroll .btn.danger{background:var(--danger-tint);color:var(--danger);border-color:#f0c4c4}.payroll .btn:disabled{opacity:.5}.payroll .hits{border:1px solid var(--line-2);border-radius:var(--radius-sm);margin-top:6px;max-height:200px;overflow:auto;background:var(--card);box-shadow:var(--sh-sm)}.payroll .hit{padding:9px 11px;font-size:14px;cursor:pointer;border-bottom:1px solid var(--line)}.payroll .hit:hover{background:var(--accent-tint)}.payroll table.grid{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums}.payroll table.grid th,.payroll table.grid td{border:1px solid var(--line);padding:5px 7px;text-align:left}.payroll table.grid th{background:var(--card-3);font-family:var(--disp);font-weight:700;color:var(--ink-soft)}.payroll table.grid input,.payroll table.grid select{width:100%;background:var(--card);color:var(--ink);border:1px solid var(--line-2);border-radius:6px;padding:6px;font-size:13px;font-family:var(--mono)}.payroll .ok-msg{background:var(--ok-tint);color:#0c7d44;border:1px solid #b3e3c6;border-radius:var(--radius-sm);padding:10px 13px;font-size:13px;margin:6px 0}@media (min-width:860px){.topbar{height:var(--toph);padding:0 24px;z-index:40}.brand{font-size:18px}.whoami{max-width:none;font-size:13px}.tabbar{top:var(--toph);bottom:0;left:0;right:auto;width:var(--rail);height:auto;flex-direction:column;align-items:stretch;gap:3px;border-top:none;border-right:1px solid var(--line);padding:14px 12px;background:var(--rail-bg)}.tab{flex:0 0 auto;flex-direction:row;justify-content:flex-start;gap:13px;padding:11px 14px;font-size:14px;font-weight:600;border-radius:10px;transition:.14s}.tab .i{font-size:18px;width:22px;text-align:center}.tab:hover{background:var(--card-3);color:var(--ink)}.tab.active{background:var(--accent-tint);color:var(--accent-dk)}.tab.active:after{display:none}.view{margin-left:var(--rail);margin-top:var(--toph);padding:32px clamp(28px,4vw,68px) 76px;max-width:calc(var(--rail) + 1100px)}.fab{right:34px;bottom:34px}.payroll,.tree{max-width:1020px}}@media (min-width:1500px){.view{margin-right:auto}}@media (prefers-reduced-motion:reduce){.view,.card{animation:none!important}}.skel-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;margin-bottom:11px;box-shadow:var(--sh-sm)}.skel-line{height:12px;border-radius:6px;margin:9px 0;background:linear-gradient(100deg,var(--card-3) 30%,var(--line-2) 50%,var(--card-3) 70%);background-size:300% 100%;animation:shimmer 1.3s ease-in-out infinite}.skel-line.t{height:15px;width:46%;margin-top:2px}.skel-line.s{height:10px;width:78%}.skel-line.s2{height:10px;width:62%}@keyframes shimmer{0%{background-position:120% 0}to{background-position:-20% 0}}@media (prefers-reduced-motion:reduce){.skel-line{animation:none}}.empty-state{text-align:center;padding:46px 22px 50px;display:flex;flex-direction:column;align-items:center;gap:7px;animation:viewIn .3s ease both}.empty-state .es-ico{width:56px;height:56px;border-radius:18px;display:flex;align-items:center;justify-content:center;background:var(--card-3);color:var(--ink-faint);margin-bottom:5px}.empty-state .es-ico svg{width:27px;height:27px;display:block}.empty-state .es-title{font-family:var(--disp);font-weight:700;font-size:15.5px;color:var(--ink);letter-spacing:-.01em}.empty-state .es-hint{font-size:13px;color:var(--ink-soft);max-width:290px;line-height:1.6}.empty-state .es-act{margin-top:11px;padding:9px 20px;border-radius:999px;border:1px solid var(--line-2);background:var(--card);color:var(--accent);font-size:13.5px;font-weight:600;cursor:pointer;transition:.14s}.empty-state .es-act:hover{border-color:var(--accent);background:var(--accent-tint)}.err .err-retry{margin-left:auto;flex:none;align-self:center;background:var(--card);color:var(--danger);border:1px solid var(--danger);border-radius:8px;padding:5px 13px;font-size:13px;font-weight:600;cursor:pointer;transition:.14s}.err .err-retry:hover{background:var(--danger);color:#fff}.stat-hero{background:var(--ok-tint);border:1px solid var(--ok);border-radius:var(--radius);padding:14px 16px;margin-bottom:11px;box-shadow:var(--sh-sm)}.stat-hero .stat-big{font-size:18px;font-weight:800;letter-spacing:-.02em;color:var(--ok)}.pos{color:var(--ok)}.neg{color:var(--danger)}.toast-host{position:fixed;left:0;right:0;bottom:calc(var(--tabh) + 16px);z-index:60;display:flex;flex-direction:column;align-items:center;gap:9px;padding:0 16px;pointer-events:none}@media (min-width:860px){.toast-host{left:var(--rail);bottom:26px}}.toast{pointer-events:auto;width:fit-content;max-width:min(440px,92vw);display:flex;align-items:center;gap:11px;padding:11px 15px 11px 13px;background:var(--card);color:var(--ink);border:1px solid var(--line-2);border-left:3px solid var(--ink-faint);border-radius:12px;box-shadow:var(--sh-pop);font-size:14px;font-weight:500;line-height:1.4;cursor:pointer;animation:toastIn .26s cubic-bezier(.2,.8,.2,1) both}.toast.out{animation:toastOut .2s ease forwards}.toast .ti{flex:none;width:19px;height:19px;display:block}.toast.ok{border-left-color:var(--ok)}.toast.ok .ti{color:var(--ok)}.toast.err{border-left-color:var(--danger)}.toast.err .ti{color:var(--danger)}.toast.info{border-left-color:var(--accent)}.toast.info .ti{color:var(--accent)}@keyframes toastIn{0%{opacity:0;transform:translateY(16px) scale(.96)}to{opacity:1;transform:none}}@keyframes toastOut{to{opacity:0;transform:translateY(8px)}}@media (prefers-reduced-motion:reduce){.toast{animation:none}.toast.out{opacity:0}}.dash-hi{margin:2px 2px 16px}.dash-hi-greet{font-family:var(--disp);font-weight:800;font-size:22px;letter-spacing:-.02em;color:var(--ink)}.dash-hi-date{margin-top:3px;font-size:13px;color:var(--ink-soft);font-variant-numeric:tabular-nums}.dash-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:11px;margin-bottom:6px}.dash-stat{text-align:left;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:15px 16px;box-shadow:var(--sh-sm);cursor:pointer;transition:.15s;display:flex;flex-direction:column;gap:3px;font-family:inherit;min-width:0;animation:cardIn .34s cubic-bezier(.2,.7,.3,1) both}.dash-stat:hover{box-shadow:var(--sh-md);border-color:var(--line-2);transform:translateY(-1px)}.dash-stat:active{opacity:.75}.dash-stat-num{font-family:var(--disp);font-weight:800;font-size:28px;line-height:1;letter-spacing:-.02em;color:var(--ink);font-variant-numeric:tabular-nums}.dash-stat-lbl{font-size:12.5px;color:var(--ink-soft);font-weight:500}.dash-stat.warn{background:var(--warn-tint);border-color:var(--warn)}.dash-stat.warn .dash-stat-num,.dash-stat.warn .dash-stat-lbl{color:var(--warn)}.dash-stat.danger{background:var(--danger-tint);border-color:var(--danger)}.dash-stat.danger .dash-stat-num,.dash-stat.danger .dash-stat-lbl{color:var(--danger)}.dash-tiles{display:grid;grid-template-columns:1fr 1fr;gap:11px}.dash-tile{position:relative;display:flex;align-items:center;gap:13px;text-align:left;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 15px;box-shadow:var(--sh-sm);cursor:pointer;transition:.15s;font-family:inherit;min-width:0;animation:cardIn .34s cubic-bezier(.2,.7,.3,1) both}.dash-tile-pin{position:absolute;top:6px;right:6px;width:24px;height:24px;line-height:1;border:none;background:none;cursor:pointer;font-size:13px;border-radius:7px;opacity:.28;filter:grayscale(1);transition:.14s}.dash-tile-pin:hover{opacity:.7;background:var(--card-3)}.dash-tile-pin.on{opacity:1;filter:none;background:var(--accent-tint)}.dash-collapse>summary::-webkit-details-marker{display:none}.dash-collapse .dash-caret{color:var(--accent);font-weight:700;font-size:17px;line-height:1;transition:transform .15s;display:inline-block}.dash-collapse[open] .dash-caret{transform:rotate(90deg)}.dash-tile:hover{box-shadow:var(--sh-md);border-color:var(--accent-soft);transform:translateY(-1px)}.dash-tile:active{opacity:.75}.dash-tile-ico{flex:none;width:42px;height:42px;border-radius:12px;background:var(--accent-tint);display:flex;align-items:center;justify-content:center;font-size:21px;line-height:1}.dash-tile-txt{display:flex;flex-direction:column;gap:2px;min-width:0}.dash-tile-title{font-family:var(--disp);font-weight:700;font-size:14.5px;color:var(--ink);letter-spacing:-.01em}.dash-tile-sub{font-size:11.5px;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (min-width:560px){.dash-tiles{grid-template-columns:repeat(3,1fr)}}@media (min-width:860px){.dash-stats{max-width:760px}.dash-tiles{grid-template-columns:repeat(3,1fr);max-width:760px}}.bi-legend{display:flex;gap:16px;font-size:12px;color:var(--ink-soft);margin-bottom:8px}.bi-legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}.bi-dot.sales{background:var(--accent)}.bi-dot.pur{background:var(--ink-faint)}.bi-chart{display:flex;gap:6px;align-items:flex-end;overflow-x:auto;padding-bottom:4px;min-height:150px}.bi-col{flex:0 0 auto;width:26px;display:flex;flex-direction:column;align-items:center;gap:5px}.bi-bars{height:130px;width:100%;display:flex;align-items:flex-end;justify-content:center;gap:2px}.bi-bar{width:9px;border-radius:3px 3px 0 0;min-height:1px;transition:height .3s ease}.bi-bar.sales{background:linear-gradient(var(--accent),var(--accent-dk))}.bi-bar.pur{background:var(--ink-faint);opacity:.5}.bi-x{font-size:9.5px;color:var(--ink-faint);font-variant-numeric:tabular-nums;white-space:nowrap}.bi-track{height:6px;background:var(--card-3);border-radius:99px;overflow:hidden}.bi-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-dk));border-radius:99px}.abc-tag{font-family:var(--disp);font-size:11px;font-weight:700;padding:1px 7px;border-radius:6px;vertical-align:1px}.abc-A{background:var(--ok-tint);color:var(--ok)}.abc-B{background:var(--accent-tint);color:var(--accent-dk)}.abc-C{background:var(--card-3);color:var(--ink-soft)}.scan-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:flex;align-items:center;justify-content:center;background:#080a0eb8;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);padding:18px;animation:viewIn .2s ease both}.scan-box{width:100%;max-width:420px;background:var(--card);border:1px solid var(--line-2);border-radius:16px;overflow:hidden;box-shadow:var(--sh-pop)}.scan-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 16px;border-bottom:1px solid var(--line);font-family:var(--disp);font-weight:700;font-size:15px;color:var(--ink)}.scan-x{background:none;border:none;color:var(--ink-soft);font-size:18px;cursor:pointer;padding:2px 6px;border-radius:8px;line-height:1}.scan-x:hover{background:var(--card-3);color:var(--ink)}.scan-frame{position:relative;background:#000;aspect-ratio:4/3;overflow:hidden}.scan-frame video{width:100%;height:100%;object-fit:cover;display:block}.scan-reticle{position:absolute;top:18%;right:14%;bottom:18%;left:14%;border-radius:14px;pointer-events:none;box-shadow:0 0 0 100vmax #00000047;border:2px solid rgba(255,255,255,.9)}.scan-reticle:after{content:"";position:absolute;left:8px;right:8px;top:50%;height:2px;background:var(--accent);box-shadow:0 0 10px 1px var(--accent);border-radius:2px;animation:scanline 1.8s ease-in-out infinite}@keyframes scanline{0%,to{transform:translateY(-46%)}50%{transform:translateY(46%)}}.scan-hint{padding:12px 16px;font-size:13px;color:var(--ink-soft);text-align:center}@media (prefers-reduced-motion:reduce){.scan-reticle:after{animation:none}}@media print{.tabbar,.topbar,.no-print,.pager{display:none!important}.view{padding:0;margin:0}body{background:#fff;color:#000;background-image:none}.card{break-inside:avoid;border:1px solid #ccc;background:#fff;color:#000;box-shadow:none}.seg-bar,.act-bar,.back,.search,button,select,input{display:none!important}.rec-k,.rec-v,.k{color:#000}.doc-screen{display:none!important}.print-doc{display:block!important}}.print-doc{display:none;color:#000;font-size:12px;font-family:Noto Sans TC,Microsoft JhengHei,serif}.print-doc .pd-head{text-align:center;border-bottom:2px solid #000;padding-bottom:6px;margin-bottom:8px}.print-doc .pd-company{font-size:18px;font-weight:700;letter-spacing:2px}.print-doc .pd-title{font-size:15px;margin-top:2px}.print-doc .pd-no{font-size:12px;margin-top:2px;text-align:right}.print-doc .pd-meta{width:100%;border-collapse:collapse;margin-bottom:8px}.print-doc .pd-meta th{text-align:left;width:14%;background:#f0f0f0;border:1px solid #999;padding:3px 6px;font-weight:600;white-space:nowrap}.print-doc .pd-meta td{width:36%;border:1px solid #999;padding:3px 6px}.print-doc .pd-detail-title{font-weight:600;margin:8px 0 3px}.print-doc .pd-table{width:100%;border-collapse:collapse;margin-bottom:6px}.print-doc .pd-table th{background:#e8e8e8;border:1px solid #888;padding:3px 5px;font-size:11px;white-space:nowrap}.print-doc .pd-table td{border:1px solid #888;padding:3px 5px;font-size:11px}.print-doc .pd-table td.num{text-align:right;font-variant-numeric:tabular-nums}.print-doc .pd-table tr.pd-total td{font-weight:700;background:#f5f5f5;border-top:2px solid #000}.print-doc .pd-sign{display:flex;justify-content:space-between;margin-top:24px}.print-doc .pd-sign>div{flex:1;text-align:center;border-top:1px solid #000;margin:0 12px;padding-top:4px;font-size:12px}.perm-layout{display:flex;flex-direction:column;gap:12px}.perm-search{width:100%;padding:8px 10px;border:1px solid var(--line-2);border-radius:8px;background:var(--card);color:var(--ink);font-size:14px;margin-bottom:8px}.perm-userlist{display:flex;flex-direction:column;gap:4px;max-height:42vh;overflow:auto;border:1px solid var(--line);border-radius:10px;padding:6px;background:var(--card-2)}.perm-user{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto;gap:0 8px;padding:7px 10px;border-radius:8px;cursor:pointer;background:var(--card);border:1px solid transparent}.perm-user:hover{border-color:var(--accent-soft)}.perm-user.active{background:var(--accent-tint);border-color:var(--accent)}.perm-user.off{opacity:.55}.perm-user-id{font-weight:600;font-family:IBM Plex Mono,monospace;font-size:13px;display:flex;align-items:center;gap:6px}.perm-user-name{grid-column:1;font-size:12px;color:var(--ink-soft)}.perm-user-cnt{grid-column:2;grid-row:1/3;align-self:center;font-size:12px;color:var(--ink-soft);white-space:nowrap}.perm-super-dot{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:var(--accent);color:#fff;font-size:10px;font-weight:700}.perm-super-tag{margin-left:10px;padding:2px 8px;border-radius:6px;background:var(--accent);color:#fff;font-size:12px;font-weight:600}.perm-grp{border:1px solid var(--line);border-radius:8px;margin-bottom:6px;background:var(--card-2)}.perm-grp>summary{cursor:pointer;padding:8px 10px;font-weight:600;display:flex;align-items:center;gap:8px}.perm-func{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:6px 12px;border-top:1px solid var(--line)}.perm-func-name{font-size:13px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.perm-flags{display:flex;gap:4px;flex-shrink:0}.perm-flag{font-size:11px;padding:2px 7px;border-radius:5px;background:var(--card-3);color:var(--ink-soft);border:1px solid var(--line)}.perm-flag.on{background:var(--accent-tint);color:var(--accent-dk);border-color:var(--accent-soft);font-weight:600}@media (min-width:860px){.perm-layout{flex-direction:row;align-items:flex-start}.perm-users{width:280px;flex-shrink:0;position:sticky;top:8px}.perm-userlist{max-height:72vh}.perm-detail{flex:1;min-width:0}}.perm-flag.edit{cursor:pointer;-webkit-user-select:none;user-select:none}.perm-flag.edit:hover{border-color:var(--accent);color:var(--accent-dk)}.perm-func-name input[type=checkbox]{margin-right:7px;accent-color:var(--accent);cursor:pointer}.btn.sm{padding:3px 10px;font-size:12px;border-radius:6px}.perm-inline-chk{display:inline-flex;align-items:center;gap:5px;font-size:13px;padding-bottom:6px;cursor:pointer;-webkit-user-select:none;user-select:none}.perm-inline-chk input{accent-color:var(--accent)}.perm-newuser{border:1px solid var(--accent-soft);background:var(--accent-tint)}.perm-detail select{padding:7px 9px;border:1px solid var(--line-2);border-radius:8px;background:var(--card);color:var(--ink);font-size:14px}
