:root{--color-bg-main: #f8f9f5;--color-bg-secondary: #ffffff;--color-bg-tertiary: #f0f4ed;--color-bg-hover: #e8f0e3;--color-text-primary: #2d4a2b;--color-text-secondary: #5a7a57;--color-text-tertiary: #8b9d88;--color-primary: #4a9d8f;--color-primary-hover: #3d8a7d;--color-primary-light: #e6f4f2;--color-border: #d4e0d1;--color-border-light: #e8f0e3;--color-success: #6baf92;--color-warning: #d4a574;--color-danger: #c97a7a;--shadow-sm: 0 1px 3px rgba(45, 74, 43, .08);--shadow-md: 0 2px 8px rgba(45, 74, 43, .1);--radius-sm: 6px;--radius-md: 10px;--bg: var(--color-bg-main);--surface: var(--color-bg-secondary);--border: var(--color-border);--text: var(--color-text-primary);--muted: var(--color-text-secondary);--primary: var(--color-primary);--primary-soft: var(--color-primary-light);--danger: var(--color-danger);--warn: var(--color-warning);--warn-bg: #fdf6e3;--ok: var(--color-success);--radius: var(--radius-sm);color-scheme:light}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:15px/1.6 Noto Sans TC,PingFang TC,system-ui,sans-serif}a{color:var(--primary)}code{font-family:ui-monospace,Menlo,monospace;font-size:.92em}.app-nav{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:8px 16px;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:20}.nav-org{font-weight:600;color:var(--primary);white-space:nowrap}.nav-links{display:flex;gap:4px;list-style:none;margin:0;padding:0;flex:1;flex-wrap:wrap}.nav-links a{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:var(--radius);text-decoration:none;color:var(--text);white-space:nowrap}.nav-links a:hover{background:var(--primary-soft)}.nav-links a.router-link-active{background:var(--primary);color:#fff}.nav-badge{background:#0000001f;border-radius:10px;padding:0 6px;font-size:11px;font-variant-numeric:tabular-nums}.router-link-active .nav-badge{background:#ffffff40}.nav-clock{color:var(--muted);font-variant-numeric:tabular-nums;font-size:12px}.nav-user{font-weight:600}.nav-role{color:var(--muted);font-weight:400;margin-left:4px;font-size:12px}.page{padding:12px 16px 40px}.toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 12px;margin-bottom:10px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}.page-title{margin:0;font-size:16px;white-space:nowrap}.toolbar-sep{flex:1}.toolbar-count{color:var(--muted);white-space:nowrap}.filter-group{display:flex;gap:4px;flex-wrap:wrap}.filter-select,.form-input,.search-input,.form-textarea{padding:5px 8px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);font:inherit;color:inherit}.form-textarea{width:100%;font-family:ui-monospace,Menlo,monospace;font-size:12px}.search-input{min-width:220px}.search-icon-btn{border:0;background:none;cursor:pointer;font-size:15px}.btn{padding:5px 10px;border:1px solid var(--border);background:var(--surface);border-radius:var(--radius);cursor:pointer;font:inherit;color:inherit;white-space:nowrap}.btn:not([class*=btn-]):hover{background:var(--primary-soft)}.btn[class*=btn-]:hover{filter:brightness(1.08)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-sm{padding:4px 8px;font-size:13px}.btn-primary{background:var(--primary);color:#fff;border-color:var(--primary)}.btn-primary:hover{filter:brightness(1.12);background:var(--primary);color:#fff}.btn.is-active{background:var(--primary);color:#fff;border-color:var(--primary)}.card-list{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);overflow-x:auto;box-shadow:var(--shadow-sm)}.card{border-top:1px solid var(--border)}.card:first-child{border-top:0}.card-header{display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:pointer;min-width:1350px}.card-header:hover{background:var(--color-bg-hover)}.card-header--cols{background:var(--color-bg-tertiary);font-weight:600;font-size:13px;position:sticky;top:0;cursor:default}.card-header--cols:hover{background:var(--color-bg-tertiary)}.expand-icon,.callqueue-btn{width:22px;text-align:center;border:0;background:none;cursor:pointer;color:var(--muted);flex:none}.callqueue-btn.is-queued{color:#e0a800}.card-main{display:flex;gap:8px;flex:0 0 auto;align-items:center}.card-col{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:0}.sort-col{cursor:pointer;-webkit-user-select:none;user-select:none}.sort-col:hover{color:var(--primary)}.sort-hint{font-size:11px;color:var(--border);margin-left:3px}.sort-col:hover .sort-hint{color:var(--muted)}.fixed-company{flex:0 0 210px;overflow:hidden}.fixed-company .company-name{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fixed-area{flex:0 0 64px}.fixed-industry{flex:0 0 110px}.fixed-contact{flex:0 0 180px}.fixed-phone{flex:0 0 130px}.fixed-caller{flex:0 0 80px}.fixed-date{flex:0 0 104px}.fixed-followup{flex:0 0 100px}.fixed-stage{flex:0 0 88px}.fixed-tags{flex:1 1 120px}.company-name{font-weight:500}.company-en{font-size:11px;color:var(--muted)}.expand-summary{display:grid;grid-template-columns:repeat(3,96px minmax(0,1fr));gap:8px 18px;margin:0 0 12px;padding:14px 16px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);font-size:inherit;align-items:baseline}.expand-summary dt{color:var(--muted);white-space:nowrap}.expand-summary dd{margin:0;word-break:break-word}.expand-summary dd.span-full{grid-column:2 / -1}@media(max-width:1280px){.expand-summary{grid-template-columns:repeat(2,96px minmax(0,1fr))}}@media(max-width:800px){.expand-summary{grid-template-columns:96px minmax(0,1fr)}}.card-detail{padding:12px 44px;background:var(--color-bg-tertiary);border-top:1px dashed var(--border)}.info-grid{display:grid;grid-template-columns:90px 1fr;gap:4px 12px;margin:0}.info-grid dt{color:var(--muted)}.info-grid dd{margin:0}.info-list{margin:8px 0;padding-left:20px;color:var(--muted)}.list-state{padding:20px;text-align:center;color:var(--muted)}.list-state.is-error{color:var(--danger);background:#fdf1f0;border-radius:var(--radius);text-align:left;padding:10px 12px}.list-state.is-warn{color:var(--warn);background:var(--warn-bg);border-radius:var(--radius);text-align:left;padding:10px 12px}.is-overdue{color:var(--danger);font-weight:600}.edm-status-badge{padding:1px 7px;border-radius:10px;font-size:12px;background:#eceff3}.edm-status-badge.is-sent,.edm-status-badge.is-delivered{background:#e3f0fb;color:#1b5e9e}.edm-status-badge.is-opened{background:#fdf0e3;color:#c26a1f;font-weight:600}.edm-status-badge.is-clicked{background:#e8833a;color:#fff;font-weight:600}.edm-status-badge.is-bounced,.edm-status-badge.is-failed,.edm-status-badge.is-complained{background:#fdecea;color:var(--danger)}.edm-status-badge.is-unsubscribed{background:#eceff3;color:var(--muted)}.settings-section{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:16px 18px;margin-bottom:12px;box-shadow:var(--shadow-sm)}.settings-title{margin:14px 0 6px;font-size:14px}.settings-title:first-child{margin-top:0}.settings-hint{color:var(--muted);font-size:13px;margin:6px 0}.form-row{display:flex;align-items:center;gap:8px;margin:8px 0;flex-wrap:wrap}.form-row>label{flex:0 0 90px;color:var(--muted)}.form-row .form-input{flex:1;min-width:200px}.tag-list{list-style:none;margin:8px 0 0;padding:0}.tag-item{display:flex;align-items:center;gap:8px;padding:5px 0;border-top:1px solid var(--border)}.tag-name{flex:1}.stage-flow{margin:8px 0 0;padding-left:20px}.stage-flow-item{padding:3px 0}.stage-key{color:var(--muted);margin-left:8px}.map-table{width:100%;border-collapse:collapse;margin:10px 0;font-size:13px}.map-table th,.map-table td{border:1px solid var(--border);padding:5px 8px;text-align:left}.map-table th{background:var(--color-bg-tertiary)}.map-sample{color:var(--muted);max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.import-summary{display:flex;gap:10px;list-style:none;padding:0;margin:10px 0;flex-wrap:wrap}.import-summary li{padding:6px 14px;border-radius:var(--radius);background:#eceff3}.import-summary .is-new{background:#e6f4ea;color:var(--ok)}.import-summary .is-update{background:#e3f0fb;color:#1b5e9e}.import-summary .is-invalid{background:#fdecea;color:var(--danger)}.import-summary .is-dup{background:var(--warn-bg);color:var(--warn)}.edm-preview{border:1px solid var(--border);border-radius:var(--radius);padding:12px;background:#fff;min-height:300px}.auth{max-width:340px;margin:12vh auto;padding:28px;background:var(--surface);border:1px solid var(--border);border-radius:10px;text-align:center}.auth-org{color:var(--muted);font-size:13px;margin:0}.auth-title{margin:6px 0 20px;font-size:20px;color:var(--primary)}.auth-subtitle{font-size:14px;margin:0 0 12px}.auth-field{text-align:left;margin-bottom:12px}.auth-field label{display:block;font-size:13px;color:var(--muted);margin-bottom:4px}.auth-field input{width:100%;padding:7px 9px;border:1px solid var(--border);border-radius:var(--radius);font:inherit}.auth .btn{width:100%}.auth-error{color:var(--danger);font-size:13px}.auth-hint{color:var(--muted);font-size:12px;margin-top:14px;line-height:1.7}.loading-overlay{position:fixed;top:0;right:0;bottom:0;left:0;display:grid;place-content:center;background:#ffffffbf}.loading-fade-enter-active,.loading-fade-leave-active{transition:opacity .12s ease}.loading-fade-enter-from,.loading-fade-leave-to{opacity:0}.pagination{display:flex;align-items:center;gap:10px;padding:10px 2px;flex-wrap:wrap}.pagination__info{color:var(--muted)}.pagination__buttons{display:flex;gap:3px;flex-wrap:wrap}.pagination__buttons button{padding:3px 8px;border:1px solid var(--border);background:var(--surface);border-radius:var(--radius);cursor:pointer;font:inherit}.pagination__buttons button.is-active{background:var(--primary);color:#fff;border-color:var(--primary)}.pagination__buttons button:disabled{opacity:.4;cursor:not-allowed}.perm-table{width:100%;border-collapse:collapse;margin:8px 0 16px;font-size:13px}.perm-table th,.perm-table td{border:1px solid var(--border);padding:6px 10px;text-align:left}.perm-table th{background:var(--color-bg-tertiary);white-space:nowrap}.perm-table td code{color:var(--muted);font-size:11px;margin-left:6px}.perm-cell{text-align:center!important;width:90px}.perm-cell input{width:16px;height:16px;cursor:pointer}.perm-table tr.is-revoked{opacity:.5;text-decoration:line-through}.toolbar-count.is-ok{color:var(--ok)}.settings-title.is-warn{color:var(--warn)}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;display:none;z-index:50;align-items:flex-start;justify-content:center;padding:6vh 16px;overflow-y:auto}.modal.active{display:flex}.modal-content{background:var(--surface);border-radius:var(--radius-md);width:100%;box-shadow:var(--shadow-md),0 12px 48px #2d4a2b2e}.modal-header{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--surface);border-radius:var(--radius-md) var(--radius-md) 0 0}.modal-header h3{margin:0;font-size:15px;flex:1}.modal-header-actions{display:flex;align-items:center;gap:6px}.modal-x{border:0;background:none;font-size:20px;line-height:1;cursor:pointer;color:var(--muted)}.modal-body{padding:16px}.form-grid{display:grid;grid-template-columns:110px 1fr;gap:8px 12px;align-items:start}.form-grid>label{color:var(--muted);padding-top:6px}.form-inline{display:flex;gap:6px;flex-wrap:wrap}.form-inline .form-input{flex:1;min-width:120px}.form-input-sm{flex:0 0 110px!important;min-width:90px!important}.form-check{display:flex;align-items:center;gap:6px;padding-top:6px}.form-input.is-invalid{border-color:var(--danger);background:#fdf1f0}.field-error{color:var(--danger);font-size:12px;margin:0}.tag-inline{display:flex;flex-wrap:wrap;gap:5px}.tag-chip{padding:3px 9px;border:1px solid var(--border);border-radius:12px;background:var(--surface);cursor:pointer;font:inherit;font-size:12px;color:inherit}.tag-chip.is-on{background:var(--primary);color:#fff;border-color:var(--primary)}.tag-multiselect{position:relative}.tag-dropdown{position:absolute;top:100%;left:0;z-index:30;margin-top:4px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 6px 20px #00000024;min-width:200px}.tag-dropdown-list{max-height:260px;overflow-y:auto;padding:6px}.tag-dropdown-item{display:flex;align-items:center;gap:6px;padding:4px 6px;cursor:pointer}.tag-dropdown-item:hover{background:var(--primary-soft)}.tag-dropdown-foot{display:flex;gap:6px;justify-content:flex-end;padding:6px;border-top:1px solid var(--border)}.card-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:12px}.act{padding:5px 11px;border:1px solid transparent;border-radius:var(--radius);cursor:pointer;font:inherit;font-size:13px;white-space:nowrap;transition:none}.act-primary{background:#e8833a;border-color:#e8833a;color:#fff;font-weight:600}.act-visit{background:#b7791f;border-color:#b7791f;color:#fff;font-weight:600}.act-plain{background:var(--color-bg-tertiary);border-color:var(--border);color:var(--text)}.act-plain:hover{background:var(--color-bg-hover)}.act-transfer{background:#fff;border-color:#c26a1f;color:#c26a1f;font-weight:600}.act-transfer:hover{background:#fdf0e3}.act-return{background:#fff;border-color:var(--muted);color:var(--muted);font-weight:600}.act-return:hover{background:var(--color-bg-tertiary)}.act-divider{width:1px;height:18px;background:var(--border);margin:0 3px}.btn-danger{background:var(--danger);color:#fff;border-color:var(--danger)}.btn-log{background:#e8833a;color:#fff;border-color:#e8833a;transition:none}.btn-log:hover{background:#e8833a;border-color:#e8833a;filter:none}.btn-visit{background:var(--warn);color:#fff;border-color:var(--warn)}.calllog-section{margin-top:4px}.panel-section-head{display:flex;align-items:center;gap:8px;margin:10px 0 6px}.panel-section-head h4{margin:0;font-size:14px;flex:1}.clh-item{border:1px solid var(--border);border-radius:var(--radius);margin-bottom:6px;background:var(--surface)}.clh-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 12px;background:var(--color-bg-tertiary);border-bottom:1px solid var(--border);font-size:14px;border-radius:var(--radius) var(--radius) 0 0}.clh-date{font-weight:700;font-size:14px}.clh-head .clh-meta{font-size:14px}.clh-head .tag-chip,.clh-head .edm-status-badge{font-size:13px;padding:2px 9px}.clh-meta{color:var(--muted)}.clh-tags{display:flex;gap:4px}.clh-stage{padding:1px 7px;border-radius:10px;background:var(--primary-soft);color:var(--primary)}.clh-followup{color:var(--danger)}.clh-body{margin:0;padding:10px 12px;white-space:pre-wrap;line-height:1.8;font-size:inherit}.side-panel-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000004d;z-index:45;display:flex;justify-content:flex-end}.side-panel{width:420px;max-width:92vw;background:var(--surface);height:100%;overflow-y:auto;box-shadow:-4px 0 24px #00000024}.side-panel-header{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--surface)}.side-panel-header h3{margin:0;font-size:15px;flex:1}.side-panel-body{padding:14px 16px 40px}.contact-card{border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px;margin-bottom:6px}.contact-card.is-primary{border-color:var(--primary);background:var(--primary-soft)}.contact-card-head{display:flex;align-items:center;gap:6px;margin-bottom:3px}.contact-card-sub{color:var(--muted);font-size:12px}.list-state.is-ok{color:var(--ok);background:#e6f4ea;border-radius:var(--radius);text-align:left;padding:8px 12px}.btn-visit{background:#b7791f;color:#fff;border-color:#b7791f}.fixed-edm{flex:0 0 180px;display:flex;align-items:center;gap:5px}.fixed-edm .edm-name{margin-left:0;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row-tags{display:flex;gap:3px;align-items:center;flex-wrap:nowrap;overflow:hidden}.row-tags .tag-chip{font-size:11px;padding:1px 7px;cursor:default;white-space:nowrap;flex:0 0 auto}.tag-more{font-size:11px;color:var(--muted);flex:0 0 auto}.fixed-tags{flex:0 0 170px;overflow:hidden}.card-header,.card-main{align-items:center}.card-main>.card-col{line-height:1.5}.quick-call-form{background:var(--color-primary-light);border:1px solid var(--color-primary);border-radius:var(--radius-md);padding:12px;display:flex;flex-direction:column;gap:10px}.qcf-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.qcf-block{display:flex;flex-direction:column;gap:5px}.qcf-label{color:var(--color-text-secondary);font-size:13px;white-space:nowrap}.quick-call-form .form-input{background:#fff}.qcf-contact{flex:0 0 150px}.qcf-ext{flex:0 0 80px}.qcf-email{flex:0 0 300px}.qcf-campaign{flex:0 0 220px}.qcf-date{flex:0 0 160px}.quick-call-form .form-textarea{background:#fff;min-height:90px;font-family:inherit;font-size:14px}.qcf-foot{gap:5px}.qcf-followup-label{margin-left:auto;font-weight:500;color:var(--color-text-primary)}.quick-call-form .tag-chip{background:#fff}.quick-call-form .tag-chip.is-on{background:var(--color-primary);color:#fff}.modal-header{padding:20px!important}.modal-body{padding:0 20px 20px!important}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start}.settings-wide{grid-column:1 / -1}@media(max-width:900px){.settings-grid{grid-template-columns:1fr}}.tag-x{border:0;background:none;color:inherit;cursor:pointer;margin-left:4px;opacity:.6;font-size:13px;line-height:1;padding:0}.tag-x:hover{opacity:1}.tag-label{border:0;background:none;color:inherit;font:inherit;cursor:text;padding:0}.tag-label:hover{text-decoration:underline}.tag-edit{width:160px;padding:2px 8px;font-size:13px}.stage-list{list-style:none;margin:8px 0 0;padding:0}.stage-row{display:flex;align-items:center;gap:8px;padding:4px 0}.stage-no{width:20px;color:var(--muted);text-align:right}.stage-row .form-input{flex:1}.stage-row .stage-key{flex:0 0 140px;color:var(--muted);font-size:11px}.edm-stats{display:flex;gap:8px;list-style:none;padding:0;margin:0 0 12px;flex-wrap:wrap}.edm-stats li{flex:1;min-width:96px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:10px 12px;box-shadow:var(--shadow-sm)}.edm-stats span{display:block;color:var(--muted);font-size:12px}.edm-stats strong{font-size:20px;font-variant-numeric:tabular-nums}.stat-sub{display:block;font-size:11px;color:var(--muted);font-style:normal}.edm-stats .is-ok strong{color:var(--ok)}.edm-stats .is-bad strong{color:var(--danger)}.edm-name{font-size:11px;color:var(--muted);margin-left:4px}.nav-impersonate{padding:4px 8px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);font:inherit;font-size:13px;color:inherit;max-width:230px}.impersonate-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:7px 16px;background:var(--color-warning);color:#fff;position:sticky;top:0;z-index:19;font-size:13px}.impersonate-bar strong{font-weight:700}.impersonate-bar .btn{background:#fff3;color:#fff;border-color:#ffffff80}.impersonate-bar .btn:hover{background:#ffffff52}.impersonate-me{opacity:.85}.edm-row{min-width:1360px}.edm-company{flex:0 0 210px;display:flex;flex-direction:column}.edm-contact{flex:0 0 90px}.edm-email{flex:0 0 200px}.edm-name-col{flex:0 0 140px}.edm-status-col{flex:0 0 80px}.edm-time{flex:0 0 148px;font-variant-numeric:tabular-nums}.edm-time.is-opened{color:#c26a1f;font-weight:600}.edm-num{flex:0 0 70px;text-align:center}.edm-caller{flex:0 0 80px}.company-link{color:var(--primary);text-decoration:none;font-weight:500}.company-link:hover{text-decoration:underline}.prospect-card.is-focus{box-shadow:inset 3px 0 0 var(--color-warning);background:#fffdf7}.cf-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px}.cf-field{display:flex;flex-direction:column;gap:4px;min-width:0}.cf-field>label{color:var(--muted);font-size:13px}.cf-field .form-input,.cf-field .form-textarea{width:100%}.cf-span{grid-column:1 / -1}.cf-inline{display:flex;gap:6px}.cf-inline .form-input{flex:1;min-width:0}.cf-inline .btn{flex:0 0 auto;white-space:nowrap}.field-hint{color:var(--muted);font-size:12px;margin:0}@media(max-width:640px){.cf-grid{grid-template-columns:1fr}}.phone-ext{color:var(--muted);font-size:12px;margin-left:6px}.cf-ext{flex:0 0 90px!important}.group-title{display:flex;align-items:center;gap:10px}.fixed-due{flex:0 0 210px}.overdue-cell{display:flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap}.overdue-cell .is-overdue{font-variant-numeric:tabular-nums}.overdue-days{font-size:11px;color:#fff;background:var(--color-warning);padding:1px 6px;border-radius:9px;white-space:nowrap}.auth-captcha{display:flex;justify-content:center;margin:4px 0;min-height:65px}
