.header-right[data-v-64e42c77]{align-items:center;gap:4px;display:flex}.notif-bell[data-v-64e42c77]{border-radius:var(--radius);width:34px;height:34px;color:var(--color-text-muted);justify-content:center;align-items:center;text-decoration:none;transition:background .15s,color .15s;display:flex;position:relative}.notif-bell[data-v-64e42c77]:hover{color:var(--color-text);background:#f0f3f2}.notif-badge[data-v-64e42c77]{color:#fff;background:#ef4444;border:1.5px solid #fff;border-radius:999px;justify-content:center;align-items:center;min-width:14px;height:14px;padding:0 3px;font-size:9px;font-weight:700;line-height:1;display:flex;position:absolute;top:3px;right:3px}.user-dropdown-wrapper[data-v-64e42c77]{position:relative}.user-trigger[data-v-64e42c77]{cursor:pointer;border-radius:var(--radius);background:0 0;border:none;align-items:center;gap:9px;padding:5px 8px;font-family:inherit;transition:background .15s;display:flex}.user-trigger[data-v-64e42c77]:hover,.user-trigger.is-open[data-v-64e42c77]{background:#f0f3f2}.header-avatar[data-v-64e42c77]{color:#fff;background:linear-gradient(135deg,#303030,#97c6cf);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-size:13px;font-weight:700;display:flex;overflow:hidden}.header-avatar-img[data-v-64e42c77]{object-fit:cover;width:100%;height:100%}.user-meta[data-v-64e42c77]{text-align:left}.user-name[data-v-64e42c77]{color:var(--color-text);font-size:13px;font-weight:600;line-height:1.3}.trigger-caret[data-v-64e42c77]{color:var(--color-text-muted);flex-shrink:0;transition:transform .35s cubic-bezier(.3,1.3,.5,1)}.trigger-caret.rotated[data-v-64e42c77]{transform:rotate(180deg)}.user-dropdown[data-v-64e42c77]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);z-index:500;min-width:168px;padding:4px 0;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden;box-shadow:0 6px 20px #0000001a}.dropdown-item[data-v-64e42c77]{color:var(--color-text);white-space:nowrap;cursor:pointer;background:0 0;border:none;align-items:center;gap:9px;width:100%;padding:9px 14px;font-family:inherit;font-size:13px;text-decoration:none;transition:background .1s;display:flex}.dropdown-item[data-v-64e42c77]:hover{background:#f0f3f2}.dropdown-item--danger[data-v-64e42c77]{color:#dc2626}.dropdown-item--danger[data-v-64e42c77]:hover{background:#fee2e2}.dropdown-divider[data-v-64e42c77]{background:var(--color-border);height:1px;margin:4px 0}.dropdown-notif-pill[data-v-64e42c77]{color:#fff;background:#ef4444;border-radius:999px;margin-left:auto;padding:2px 6px;font-size:10px;font-weight:700;line-height:1}.toast-container[data-v-2fb1cafe]{z-index:10000;pointer-events:none;flex-direction:column;gap:8px;display:flex;position:fixed;bottom:24px;right:24px}.toast[data-v-2fb1cafe]{pointer-events:all;border-radius:8px;align-items:center;gap:10px;min-width:220px;max-width:360px;padding:12px 16px;font-size:14px;font-weight:500;display:flex;box-shadow:0 4px 16px #00000026}.toast--success[data-v-2fb1cafe]{color:#2f6446;background:#ecfdf5;border:1px solid #89c09f}.toast--error[data-v-2fb1cafe]{color:#991b1b;background:#fef2f2;border:1px solid #fca5a5}.toast--info[data-v-2fb1cafe]{color:#303030;background:#f0f7f8;border:1px solid #cbe3e8}.toast-icon[data-v-2fb1cafe]{flex-shrink:0;font-size:13px;font-weight:700}.toast-msg[data-v-2fb1cafe]{flex:1}.toast-close[data-v-2fb1cafe]{cursor:pointer;opacity:.5;color:inherit;background:0 0;border:none;flex-shrink:0;padding:0 2px;font-size:11px;line-height:1}.toast-close[data-v-2fb1cafe]:hover{opacity:1}.toast-enter-active[data-v-2fb1cafe]{transition:opacity .2s,transform .2s}.toast-leave-active[data-v-2fb1cafe]{transition:opacity .15s,transform .15s}.toast-enter-from[data-v-2fb1cafe]{opacity:0;transform:translateY(8px)}.toast-leave-to[data-v-2fb1cafe]{opacity:0;transform:translate(20px)}.toast-move[data-v-2fb1cafe]{transition:transform .2s}.fade-enter-active,.fade-leave-active{transition:opacity .2s}.fade-enter-from,.fade-leave-to{opacity:0}.app-footer{text-align:center;color:var(--color-text-muted);border-top:1px solid var(--color-border);margin-top:auto;padding:12px 0;font-size:11px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--zw-paper:#f7f9f8;--zw-ink:#303030;--zw-mist:#97c6cf;--zw-sage:#89c09f;--zw-honey:#e9b24c;--brand:var(--zw-ink);--brand-dark:#1f1f1f;--brand-light:#97c6cf47;--color-bg:var(--zw-paper);--color-surface:#fff;--color-text:var(--zw-ink);--color-text-muted:#6b716f;--color-border:#e3e8e6;--color-primary:var(--zw-ink);--color-accent:var(--zw-mist);--color-success:#5a9a73;--color-warning:var(--zw-honey);--color-danger:#ef4444;--color-action:var(--zw-ink);--sidebar-width:240px;--sidebar-collapsed:64px;--header-height:56px;--radius:8px;--shadow:0 1px 3px #00000012, 0 1px 2px #0000000a}html,body{height:100%;color:var(--color-text);background:var(--color-bg);-webkit-font-smoothing:antialiased;font-family:Noto Sans TC,-apple-system,BlinkMacSystemFont,PingFang TC,Microsoft JhengHei,Segoe UI,sans-serif;font-size:14px;line-height:1.5}#app{height:100%}.app-layout{height:100dvh;display:flex;overflow:hidden}.main-content{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.page-content{flex:1;padding:24px;overflow-y:auto}.sidebar{--sb-ease:cubic-bezier(.6, 0, .2, 1);--sb-dur:.45s;width:var(--sidebar-width);background:var(--color-surface);border-right:1px solid var(--color-border);height:100vh;transition:width var(--sb-dur) var(--sb-ease);z-index:100;flex-direction:column;flex-shrink:0;display:flex;position:sticky;top:0;overflow:hidden}.sidebar.is-collapsed{width:var(--sidebar-collapsed)}.sidebar-brand-info,.nav-label,.nav-group-label>span{white-space:nowrap;transition:opacity .3s ease .12s, transform var(--sb-dur) var(--sb-ease);overflow:hidden}.sidebar.is-collapsed .sidebar-brand-info,.sidebar.is-collapsed .nav-label,.sidebar.is-collapsed .nav-group-label>span{opacity:0;pointer-events:none;transition:opacity .2s ease, transform var(--sb-dur) var(--sb-ease);transform:translate(-12px)}.sidebar-top{border-bottom:1px solid var(--color-border);flex-shrink:0;align-items:center;gap:8px;height:56px;padding:0 12px 0 18px;display:flex;position:relative;overflow:hidden}.sidebar-brand{width:calc(var(--sidebar-width) - 30px);flex:none;align-items:center;gap:9px;display:flex}.sidebar-logo-mark{flex-shrink:0;width:28px;height:28px}.sidebar-brand-info{flex-direction:column;gap:1px;min-width:0;display:flex}.sidebar-company-name{color:var(--color-text);white-space:nowrap;text-overflow:ellipsis;font-size:11px;font-weight:700;line-height:1.3;overflow:hidden}.sidebar-system-name{color:var(--color-text-muted);white-space:nowrap;font-size:10px}.sidebar-footer{border-top:1px solid var(--color-border);transition:padding-right var(--sb-dur) var(--sb-ease);flex-shrink:0;justify-content:flex-end;padding:10px 8px;display:flex}.sidebar.is-collapsed .sidebar-footer{padding-right:calc((var(--sidebar-collapsed) - 26px) / 2)}.sidebar-toggle{border:1px solid var(--color-border);cursor:pointer;width:26px;height:26px;color:var(--color-text-muted);background:0 0;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;transition:background .15s,color .15s,border-color .15s;display:flex}.sidebar-toggle:hover{color:var(--color-text);background:#f0f3f2;border-color:#cfd6d3}.sidebar-close{cursor:pointer;width:28px;height:28px;color:var(--color-text-muted);background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;transition:background .15s;display:none}.sidebar-close:hover{background:#f0f3f2}.sidebar-nav{flex:1;padding:8px;overflow:hidden auto}.sidebar-nav::-webkit-scrollbar{width:3px}.sidebar-nav::-webkit-scrollbar-track{background:0 0}.sidebar-nav::-webkit-scrollbar-thumb{background:#e3e8e6;border-radius:999px}.nav-item{color:var(--color-text-muted);white-space:nowrap;border-radius:6px;align-items:center;gap:10px;margin-bottom:1px;padding:9px 10px 9px 15px;font-size:13px;font-weight:500;text-decoration:none;transition:background .12s,color .12s;display:flex;overflow:hidden}.nav-item:hover{color:var(--color-text);background:#f0f3f2}.nav-item.active{background:var(--brand-light);color:var(--brand)}.nav-icon{flex-shrink:0;width:17px;height:17px}.nav-group+.nav-group{margin-top:4px}.nav-group--not-first{padding-top:6px}.nav-group-label{letter-spacing:.04em;color:var(--color-text-muted);white-space:nowrap;padding:4px 10px 3px;font-size:10px;font-weight:700;position:relative;overflow:hidden}.nav-group-label>span{opacity:.55;display:block}.nav-group-label:before{content:"";background:var(--color-border);opacity:0;height:1px;transition:opacity .2s;position:absolute;top:50%;left:10px;right:10px}.sidebar.is-collapsed .nav-group-label:before{opacity:1;transition-delay:.15s}@media (prefers-reduced-motion:reduce){.sidebar,.sidebar-footer,.sidebar-brand-info,.nav-label,.nav-group-label>span{transition-duration:10ms!important;transition-delay:0s!important}}@media (width<=767px){.sidebar{z-index:300;height:100dvh;transition:transform .22s cubic-bezier(.4,0,.2,1);position:fixed;top:0;left:0;transform:translate(-100%);width:260px!important}.sidebar.is-mobile-open{transform:translate(0);box-shadow:4px 0 24px #0000001f}.sidebar-footer{display:none}.sidebar-close{display:flex}.sidebar-brand{flex:1;width:auto;min-width:0}.mobile-overlay{z-index:299;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);background:#0006;position:fixed;inset:0}.page-content{padding:16px}}.app-header{height:var(--header-height);-webkit-backdrop-filter:blur(10px);border-bottom:1px solid var(--color-border);z-index:200;background:#ffffffeb;flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:0 20px 0 16px;display:flex;position:sticky;top:0}.header-left{align-items:center;gap:8px;display:flex}.header-menu-btn{cursor:pointer;width:36px;height:36px;color:var(--color-text-muted);border-radius:var(--radius);background:0 0;border:none;justify-content:center;align-items:center;transition:background .15s;display:none}.header-menu-btn:hover{background:#f0f3f2}@media (width<=767px){.header-menu-btn{display:flex}}.header-title{font-size:15px;font-weight:600}.user-switcher{align-items:center;gap:10px;display:flex}.user-info{text-align:right}.user-name{font-size:13px;font-weight:600}.user-role-label{margin-top:2px}.role-select{border:1px solid var(--color-border);border-radius:var(--radius);cursor:pointer;color:var(--color-text);background:#fff;padding:5px 8px;font-family:inherit;font-size:12px}.role-select:focus{border-color:var(--brand);outline:none}.role-badge{white-space:nowrap;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.role-badge--admin,.role-badge--accountant{color:#303030;background:#e4f1f3}.role-badge--shareholder{color:#2f6446;background:#e3f1e8}.role-badge--staff{color:#3f4442;background:#f0f3f2}.card{background:var(--color-surface);border-radius:var(--radius);border:1px solid var(--color-border);box-shadow:var(--shadow)}.card-header{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;padding:14px 20px;display:flex}.card-header h2{font-size:14px;font-weight:600}.card-body{padding:20px}.page-header{margin-bottom:20px}.page-header h1{margin-bottom:4px;font-size:20px;font-weight:700}.page-header p{color:var(--color-text-muted);font-size:13px}.btn{border-radius:var(--radius);cursor:pointer;white-space:nowrap;border:none;align-items:center;gap:5px;padding:7px 14px;font-family:inherit;font-size:13px;font-weight:500;transition:opacity .15s;display:inline-flex}.btn:hover:not(:disabled){opacity:.88}.btn:active:not(:disabled){opacity:.75}.btn:disabled{opacity:.4;cursor:not-allowed}.btn--primary{background:var(--color-action);color:#fff}.btn--brand{background:var(--brand);color:#fff}.btn--success{background:var(--color-success);color:#fff}.btn--danger{background:var(--color-danger);color:#fff}.btn--dark{background:var(--color-action);color:#fff}.btn--ghost{color:var(--brand);border:1px solid var(--brand);background:0 0}.btn--ghost-dark{color:var(--color-text);border:1px solid var(--color-border);background:0 0}.btn--ghost-neutral{color:var(--color-text-muted);border:1px solid var(--color-border);background:0 0}.btn--sm{padding:4px 10px;font-size:12px}.table-wrapper{overflow-x:auto}table{border-collapse:collapse;width:100%}th{text-align:left;color:var(--color-text-muted);border-bottom:1px solid var(--color-border);white-space:nowrap;background:#f7f9f8;padding:10px 12px;font-size:12px;font-weight:600}td{border-bottom:1px solid var(--color-border);vertical-align:middle;padding:11px 12px;font-size:13px}tbody tr:last-child td{border-bottom:none}tbody tr:hover td{background:#f7f9f8}.status-badge{border-radius:999px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.status-badge--pending{color:#8a5a12;background:#fbf0da}.status-badge--approved{color:#2f6446;background:#e3f1e8}.status-badge--rejected{color:#991b1b;background:#fee2e2}.status-badge--active{color:#2f6446;background:#e3f1e8}.status-badge--completed{color:#303030;background:#e4f1f3}.status-badge--planning{color:#3f4442;background:#f0f3f2}.status-badge--quoting,.status-badge--waiting{color:#303030;background:#e4f1f3}.status-badge--notstarted{color:#6b716f;background:#f0f3f2}.status-badge--inprogress{color:#2f6446;background:#e3f1e8}.status-badge--closed{color:#6b21a8;background:#e9d5ff}.tag{color:#4f5553;white-space:nowrap;background:#f0f3f2;border-radius:999px;padding:2px 7px;font-size:11px;font-weight:500;display:inline-block}.stats-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;margin-bottom:20px;display:grid}.stat-card{background:var(--color-surface);border-radius:var(--radius);border:1px solid var(--color-border);box-shadow:var(--shadow);padding:16px 20px;overflow:hidden}.stat-label{color:var(--color-text-muted);white-space:nowrap;text-overflow:ellipsis;margin-bottom:8px;font-size:12px;overflow:hidden}.stat-value{white-space:nowrap;text-overflow:ellipsis;font-size:18px;font-weight:700;line-height:1;overflow:hidden}.progress-bar{vertical-align:middle;background:#e3e8e6;border-radius:999px;width:90px;height:5px;margin-right:6px;display:inline-block;overflow:hidden}.progress-fill{background:var(--brand);border-radius:999px;height:100%}.form-group{margin-bottom:14px}.form-label{color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:5px;font-size:12px;font-weight:600;display:block}.form-input{border:1px solid var(--color-border);border-radius:var(--radius);width:100%;color:var(--color-text);background:#fff;padding:8px 10px;font-family:inherit;font-size:13px;transition:border-color .15s,box-shadow .15s}.form-input:focus{border-color:var(--brand);outline:none;box-shadow:0 0 0 3px #97c6cf73}.form-input[readonly],.form-input:read-only{cursor:not-allowed;color:var(--color-text-muted);background:#f7f9f8}.modal{background:var(--color-surface);border-radius:var(--radius);width:500px;max-width:100%;max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px #0003}.modal-header{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.modal-header h2{font-size:15px;font-weight:600}.modal-body{padding:20px}.modal-footer{border-top:1px solid var(--color-border);justify-content:flex-end;gap:8px;padding:14px 20px;display:flex}.tab-bar{border-bottom:2px solid var(--color-border);gap:4px;padding-bottom:0;display:flex}.tab-btn{cursor:pointer;color:var(--color-text-muted);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-2px;padding:8px 18px;font-family:inherit;font-size:13px;font-weight:500;transition:color .15s,border-color .15s}.tab-btn:hover{color:var(--color-text)}.tab-btn.active{color:var(--brand);border-bottom-color:var(--brand);font-weight:600}.flex{display:flex}.flex-between{justify-content:space-between;align-items:center;display:flex}.gap-2{gap:8px}.gap-3{gap:12px}.mt-4{margin-top:16px}.mb-4{margin-bottom:16px}.text-muted{color:var(--color-text-muted)}.text-sm{font-size:12px}@media (width<=640px){.stats-grid{grid-template-columns:repeat(2,1fr);gap:10px}.page-header h1{font-size:17px}.card-body{padding:14px}.modal{width:100%}}.menu-reveal-enter-active{transform-origin:top;transition:transform .35s cubic-bezier(.3,1.3,.5,1),opacity .2s}.menu-reveal-enter-from{opacity:0;transform:scaleY(.6)}.menu-reveal-enter-active>*{transition:opacity .25s,transform .3s cubic-bezier(.3,1.3,.5,1)}.menu-reveal-enter-from>*{opacity:0;transform:translateY(-6px)}.menu-reveal-enter-active>:nth-child(2){transition-delay:50ms}.menu-reveal-enter-active>:nth-child(3){transition-delay:.1s}.menu-reveal-enter-active>:nth-child(4){transition-delay:.15s}.menu-reveal-enter-active>:nth-child(5){transition-delay:.2s}.menu-reveal-enter-active>:nth-child(6){transition-delay:.25s}.menu-reveal-enter-active>:nth-child(7){transition-delay:.3s}.menu-reveal-enter-active>:nth-child(n+8){transition-delay:.35s}.menu-reveal-leave-active{transform-origin:top;transition:transform .16s,opacity .16s}.menu-reveal-leave-to{opacity:0;transform:scaleY(.9)}@media (prefers-reduced-motion:reduce){.menu-reveal-enter-active,.menu-reveal-leave-active,.menu-reveal-enter-active>*{transition:opacity .15s!important}.menu-reveal-enter-from,.menu-reveal-leave-to,.menu-reveal-enter-from>*{transform:none!important}}
