*{margin:0;padding:0;box-sizing:border-box}body{font-family:Noto Sans TC,-apple-system,Microsoft JhengHei,sans-serif;background:#f5f6fa;color:#2d3436}.center-screen{min-height:100vh;display:flex;align-items:center;justify-content:center}.login-card{background:#fff;padding:48px 40px;border-radius:12px;box-shadow:0 4px 24px #00000014;text-align:center;width:380px}.login-card h1{font-size:22px;margin-bottom:8px}.subtitle{color:#636e72;font-size:14px;margin-bottom:28px}.error-box{background:#ffeaea;color:#c0392b;border:1px solid #f5b7b1;border-radius:8px;padding:10px 14px;font-size:13px;margin-bottom:20px}.google-btn{display:inline-flex;align-items:center;gap:10px;padding:12px 24px;border:1px solid #dfe6e9;border-radius:8px;background:#fff;color:#2d3436;font-size:15px;font-weight:500;text-decoration:none;transition:box-shadow .15s}.google-btn:hover{box-shadow:0 2px 8px #0000001f}.dashboard{min-height:100vh}.topbar{display:flex;justify-content:space-between;align-items:center;background:#fff;padding:12px 24px;box-shadow:0 1px 4px #0000000f}.logo{font-weight:700;font-size:16px}.user-info{display:flex;align-items:center;gap:12px;font-size:14px}.avatar{width:32px;height:32px;border-radius:50%}.role-badge{background:#e8f0fe;color:#1a73e8;border-radius:12px;padding:2px 10px;font-size:12px}.logout-btn{border:1px solid #dfe6e9;background:#fff;border-radius:6px;padding:6px 14px;cursor:pointer;font-size:13px}.logout-btn:hover{background:#f5f6fa}.content{padding:28px 32px}.content h2{margin-bottom:12px}.desc{color:#636e72;font-size:13px;margin-bottom:20px}.app-shell{display:flex;min-height:100vh}.sidebar{width:210px;background:#273c75;padding:20px 0;flex-shrink:0}.sidebar .brand{font-size:17px;font-weight:700;color:#fff;padding:0 20px 20px}.nav-link{display:block;padding:11px 20px;font-size:14px;color:#dcdde1;text-decoration:none;border-left:3px solid transparent}.nav-link:hover{background:#ffffff14}.nav-link.active{background:#ffffff1f;border-left-color:#00a8ff;color:#fff}.main-col{flex:1;display:flex;flex-direction:column}.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.primary-btn{background:#1a73e8;color:#fff;border:none;border-radius:8px;padding:9px 18px;font-size:14px;cursor:pointer}.primary-btn:hover{background:#1557b0}.primary-btn:disabled{opacity:.6;cursor:default}.products-layout{display:flex;gap:20px;align-items:flex-start}.cat-panel{width:220px;flex-shrink:0;background:#fff;border-radius:10px;box-shadow:0 1px 4px #0000000d;padding:8px;max-height:75vh;overflow-y:auto}.cat-item{display:flex;justify-content:space-between;align-items:center;width:100%;border:none;background:none;text-align:left;padding:9px 12px;font-size:13px;border-radius:6px;cursor:pointer;color:#2d3436}.cat-item:hover{background:#f1f3f4}.cat-item.active{background:#e8f0fe;color:#1a73e8;font-weight:500}.cat-count{font-size:11px;color:#b2bec3}.products-main{flex:1;min-width:0}.search-input{width:100%;padding:10px 14px;border:1px solid #dfe6e9;border-radius:8px;font-size:14px;margin-bottom:14px}.data-table{width:100%;border-collapse:collapse;background:#fff;border-radius:10px;overflow:hidden;box-shadow:0 1px 4px #0000000d;font-size:13px}.data-table th{background:#f8f9fb;text-align:left;padding:10px 14px;color:#636e72;font-weight:500}.data-table td{padding:10px 14px;border-top:1px solid #f1f2f6;vertical-align:top}.data-table .num{text-align:right;white-space:nowrap}.data-table .empty{text-align:center;color:#b2bec3;padding:30px}.prod-name{font-weight:500}.prod-cat{font-size:11px;color:#b2bec3;margin-top:2px}.prod-desc{color:#636e72;font-size:12px;max-width:420px}.row-actions button{border:1px solid #dfe6e9;background:#fff;border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer;margin-left:4px}.row-actions button:hover{background:#f5f6fa}.row-actions .danger{color:#c0392b;border-color:#f5b7b1}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:#fff;border-radius:12px;padding:24px 28px;width:520px;max-height:85vh;overflow-y:auto;box-shadow:0 8px 40px #0003}.modal h3{margin-bottom:16px}.modal label{display:block;font-size:13px;color:#636e72;margin-bottom:12px}.modal input,.modal textarea,.modal select{display:block;width:100%;margin-top:4px;padding:8px 10px;border:1px solid #dfe6e9;border-radius:6px;font-size:14px;font-family:inherit;background:#fff}.form-row{display:flex;gap:12px}.form-row label{flex:1}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:8px}.modal-actions button{border:1px solid #dfe6e9;background:#fff;border-radius:8px;padding:9px 18px;font-size:14px;cursor:pointer}.modal-actions button.primary-btn{background:#1a73e8;color:#fff;border-color:#1a73e8}.modal.wide{width:760px}.head-actions{display:flex;gap:10px;align-items:center}.ghost-btn{border:1px solid #dfe6e9;background:#fff;border-radius:8px;padding:9px 16px;font-size:14px;cursor:pointer}.ghost-btn:hover{background:#f5f6fa}.quote-add-btn{border:1px solid #1a73e8;color:#1a73e8;background:#fff;border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer;white-space:nowrap}.quote-add-btn.added{border-color:#00a86b;color:#00a86b;cursor:default}.quote-panel{position:fixed;top:0;right:0;bottom:0;width:400px;background:#fff;box-shadow:-4px 0 24px #0000001f;padding:20px 22px;overflow-y:auto;z-index:90}.quote-panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}.close-btn{border:none;background:none;cursor:pointer;font-size:14px;color:#b2bec3}.close-btn:hover{color:#2d3436}.quote-item{border:1px solid #f1f2f6;border-radius:8px;padding:10px 12px;margin-bottom:10px}.quote-item-head{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;font-size:13px}.quote-item-row{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:13px}.quote-item-row select,.quote-item-row input{border:1px solid #dfe6e9;border-radius:6px;padding:5px 8px;font-size:13px}.quote-item-row input{width:100px}.quote-item-row input.qty{width:56px}.quote-item-row .subtotal{margin-left:auto;font-weight:500}.quote-total{text-align:right;font-size:16px;font-weight:700;padding:12px 0;margin-bottom:8px;border-top:2px solid #2d3436}.quote-panel label{display:block;font-size:13px;color:#636e72;margin-bottom:12px}.quote-panel input,.quote-panel textarea{display:block;width:100%;margin-top:4px;padding:8px 10px;border:1px solid #dfe6e9;border-radius:6px;font-size:14px;font-family:inherit}.primary-btn.full{width:100%}.success-box{background:#e6f9ee;color:#00753f;border:1px solid #a7e8c5;border-radius:8px;padding:10px 14px;font-size:13px;margin-bottom:14px}.tag{border-radius:10px;padding:2px 9px;font-size:11px;white-space:nowrap;display:inline-block}.tag.green{background:#e6f9ee;color:#00a86b}.tag.blue{background:#e8f0fe;color:#1a73e8}.tag.orange{background:#fff3e6;color:#e17055}.tag.red{background:#ffeaea;color:#c0392b}.tag.gray{background:#f1f2f6;color:#636e72}.tag.purple{background:#f3e8ff;color:#7c3aed}.tag-btn{border:none;background:none;padding:0;cursor:pointer}.cust-id{border:none;background:none;padding:0;cursor:pointer;font:inherit;color:#1a73e8;font-weight:700;white-space:nowrap}.cust-expand td{background:#f8f9fb;padding:14px 16px}.voided td{opacity:.55}.section-title{font-size:16px;margin:22px 0 8px}.row-actions .ok{color:#00753f;border-color:#a7e8c5}.nav-link{display:flex;align-items:center}.nav-badge{margin-left:auto;background:#e17055;color:#fff;border-radius:10px;padding:1px 8px;font-size:11px}.detail-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px 18px;margin:0 0 8px}.detail-grid dt{font-size:12px;color:#636e72}.detail-grid dd{margin:2px 0 0;font-size:14px;overflow-wrap:anywhere}.modal h4{margin:14px 0 8px;font-size:14px;color:#273c75;border-left:3px solid #1a73e8;padding-left:8px}.form-row .narrow{flex:0 0 110px}.seg{display:inline-flex;border:1px solid #dfe6e9;border-radius:8px;overflow:hidden;margin-top:4px}.seg button{border:none;background:#fff;padding:7px 14px;font-size:13px;cursor:pointer}.seg button.on{background:#1a73e8;color:#fff}.row-actions{white-space:nowrap}.chat-link{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:8px;color:#00a86b}.chat-link:hover{background:#e6f9ee}.inline-add{display:flex;gap:8px;margin:-4px 0 14px}.inline-add input{flex:1;margin-top:0}.inline-add .ghost-btn{padding:7px 12px;font-size:13px;white-space:nowrap}.inline-add .ghost-btn:disabled{opacity:.5;cursor:default}.filter-row{display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap}.filter-row .search-input{flex:1;min-width:240px;margin:0}.filter-select{min-width:170px;padding:9px 12px;border:1px solid #dfe6e9;border-radius:8px;font-size:14px;background:#fff}.tag+.tag,td>button+.tag{margin-left:6px}.contract-table .tag,.modal h3 .tag{margin-left:6px}.contract-section{margin-top:14px;padding-top:14px;border-top:1px solid #e9ecef}.contract-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:13px}.primary-btn.small{padding:6px 12px;font-size:13px}.table-scroll{overflow-x:auto}.contract-table{width:100%;border-collapse:collapse;font-size:13px;background:#fff;border-radius:8px}.contract-table th{background:#eef1f6;padding:8px 10px;text-align:left;color:#636e72;font-weight:500;white-space:nowrap}.contract-table td{padding:8px 10px;border-top:1px solid #f1f2f6;vertical-align:top}.contract-table th.num,.contract-table td.num,.cf-table td.num{text-align:right;white-space:nowrap}.mini-btn{border:1px solid #dfe6e9;background:#fff;border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer}.mini-btn:hover{background:#f5f6fa}.mini-btn.danger{color:#c0392b;border-color:#f5b7b1}.mini-btn:disabled{opacity:.5;cursor:default}.empty-block{padding:14px;text-align:center;color:#b2bec3;font-size:13px}.modal.xwide{width:960px;max-width:96vw}.modal.wide{max-width:96vw}.modal-backdrop.stacked{z-index:110}.note-warn{background:#fff8e6;border:1px solid #ffeaa7;color:#b7791f;border-radius:8px;padding:10px 14px;font-size:13px;margin:10px 0;overflow-wrap:anywhere}.cf-table{width:100%;border-collapse:collapse;font-size:12px;margin-top:6px}.cf-table th{background:#f8f9fb;padding:7px 8px;text-align:left;color:#636e72;font-weight:500;white-space:nowrap}.cf-table td{padding:6px 8px;border-top:1px solid #f1f2f6;vertical-align:middle}.cf-table input,.cf-table select{margin-top:0;padding:5px 6px;font-size:12px}.cf-table input[type=checkbox],.pick-list input[type=checkbox]{width:auto;display:inline-block}.cf-table input[type=number]{width:96px}.cf-table input.w-qty{width:60px}.cf-table input.w-disc{width:70px;display:inline-block}.cf-table .w-dt{width:54px;display:inline-block;margin-left:4px}.nowrap{white-space:nowrap}.total-hint{font-size:12px;font-weight:400;color:#e17055}.high-sign-row{align-items:flex-end;margin-top:10px}.high-sign-row .high-sign{flex:0 0 300px}.high-sign input{background:#f8f9fb;font-weight:700}.high-sign input.negative{color:#c0392b}.high-sign-row .error-box{flex:1;margin:0 0 12px}.pick-list{max-height:52vh;overflow-y:auto}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:14px;margin-bottom:14px}.stat-card{background:#f8f9fb;border-radius:10px;padding:14px 16px}.stat-card .label{font-size:12px;color:#636e72;margin-bottom:6px}.stat-card .value{font-size:19px;font-weight:700;white-space:nowrap}.stat-card .value.small{font-size:15px;white-space:normal}.stat-card .sub{margin-top:4px}.mod-req-box{border-top:1px solid #e9ecef;margin-top:14px;padding-top:12px}.modal-actions .danger{color:#c0392b;border-color:#f5b7b1}.wrap-cell{white-space:normal;max-width:320px;overflow-wrap:anywhere}@media print{.no-print,.sidebar,.topbar{display:none!important}}.locked-cell{color:#b2bec3;cursor:help}.table-note{margin-top:6px}.h4-hint{float:right;font-weight:400;font-size:12px;color:#636e72}.acct-bar{display:flex;gap:18px;align-items:center;flex-wrap:wrap;background:#fff;border:1px solid #eef0f4;border-radius:10px;padding:18px 20px}.acct-status{min-width:130px;text-align:center}.acct-label{font-size:20px;font-weight:700}.acct-pct{text-align:right;font-size:11px;color:#636e72}.acct-track{background:#e8eaf0;border-radius:6px;height:8px;width:130px}.acct-track div{height:8px;border-radius:6px}.acct-sep{width:1px;background:#eef0f4;align-self:stretch}.acct-cell{text-align:center}.acct-num{font-size:19px;font-weight:600;white-space:nowrap}.acct-num small{font-size:12px;font-weight:400}.acct-op{font-size:20px;color:#b2bec3}.acct-sub{font-size:11px;color:#636e72}.acct-sub.warn{color:#e17055}.acct-green{color:#00a86b;font-weight:700}.acct-blue{color:#1a73e8;font-weight:700}.list-actions{margin-bottom:6px}.modal h4{margin-top:18px}.modal .field{flex:1;font-size:13px;color:#636e72;margin-bottom:12px}.radio-row{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;margin-top:8px}.modal label.radio{display:inline-flex;align-items:center;gap:4px;margin:0;font-size:13px;color:#2d3436}.modal label.radio input,.modal input[type=checkbox]{width:auto;margin:0;display:inline-block}.form-row .narrow.date{flex:0 0 160px}.pay-block{background:#f8f9fb;border-radius:10px;padding:14px 16px;margin-bottom:10px}.pay-block .form-row{margin-top:8px}.ghost-btn.full{width:100%;margin-bottom:8px}.modal-actions.center{justify-content:center}.modal-actions .primary-btn.submit{background:#00a86b;border-color:#00a86b}.modal-actions .close-solid{background:#e17055;color:#fff;border-color:#e17055}.modal label .prod-cat{display:block;margin-top:4px}.modal.xwide .data-table td,.modal.xwide .data-table th{white-space:nowrap}.work-cat{margin:12px 0 4px;font-weight:700;font-size:13px;color:#273c75}.work-cat .prod-cat{font-weight:400}.work-form{background:#f8f9fb;border-radius:10px;padding:14px 16px;margin-bottom:12px}.ops-title{font-size:13px;display:block;margin-bottom:8px}.empty-cell{text-align:center;color:#b2bec3;padding:14px}.modal.xwide .data-table td.wrap-cell{white-space:normal}.dispatch-form{max-width:860px;background:#fff;border-radius:10px;padding:18px 20px;margin-bottom:18px;box-shadow:0 1px 4px #0000000d}.dispatch-form label{display:block;font-size:13px;color:#636e72;margin-bottom:12px}.dispatch-form input,.dispatch-form textarea,.dispatch-form select{display:block;width:100%;margin-top:4px;padding:8px 10px;border:1px solid #dfe6e9;border-radius:6px;font-size:14px;font-family:inherit;background:#fff}
