:root{--ink: #16241f;--ink2: #46574f;--muted: #7a8a83;--line: #e2e8e4;--line-soft: #f2f5f3;--surface: #f6f9f7;--canvas: #eef2f0;--white: #ffffff;--accent: #0f7d6b;--accent-dark: #0a5d50;--accent-soft: #e9f5f1;--accent-border: #bfded4;--accent-text: #20503f;--warn-bg: #fdf7ea;--warn-border: #f0dfc0;--warn-text: #5c4a26;--danger-bg: #fbeeeb;--danger-border: #f0cdc6;--danger-text: #8a3226;--info-bg: #eaf1f8;--info-border: #c9dcec;--info-text: #274f73;--font-base: "Noto Sans TC", "IBM Plex Sans", system-ui, sans-serif;--font-num: "IBM Plex Sans", sans-serif;--fs-xs: 11px;--fs-sm: 11.5px;--fs-base: 12.5px;--fs-body: 13px;--fs-body-lg: 13.5px;--fs-title: 14px;--fs-title-lg: 15px;--fs-h3: 17px;--fs-h2: 21px;--fs-metric: 30px;--lh-tight: 1.3;--lh-normal: 1.7;--lh-relaxed: 1.9;--sp-1: 4px;--sp-2: 6px;--sp-3: 8px;--sp-4: 10px;--sp-5: 12px;--sp-6: 14px;--sp-7: 16px;--sp-8: 18px;--sp-9: 20px;--sp-10: 26px;--r-sm: 6px;--r-md: 7px;--r-base: 8px;--r-lg: 10px;--r-xl: 14px;--r-pill: 999px;--shadow-frame: 0 10px 30px rgba(22, 36, 31, .08);--shadow-bar: 0 -6px 16px rgba(22, 36, 31, .06);--shadow-modal: 0 20px 50px rgba(22, 36, 31, .25);--sidebar-w: 212px;--content-max: 1100px}*{box-sizing:border-box}body{margin:0;background:var(--canvas);color:var(--ink);font-family:var(--font-base);font-size:var(--fs-body);line-height:var(--lh-normal);-webkit-font-smoothing:antialiased}a{color:var(--accent);text-underline-offset:2px}a:hover{color:var(--accent-dark)}input,button,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-sm)}.shell{display:flex;min-height:100vh}.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);background:var(--surface);border-right:1px solid var(--line);padding:var(--sp-8) var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-8);position:sticky;top:0;height:100vh;overflow-y:auto}.brand{font-weight:700;font-size:var(--fs-title-lg);color:var(--accent);letter-spacing:.04em}.brand small{display:block;font-weight:400;font-size:var(--fs-xs);color:var(--muted);letter-spacing:0}.nav{display:flex;flex-direction:column;gap:2px}.nav a{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-base);color:var(--ink2);text-decoration:none;font-size:var(--fs-base)}.nav a:hover{background:var(--line-soft);color:var(--ink)}.nav a.active{background:var(--accent-soft);color:var(--accent-text);font-weight:500}.nav .badge{background:var(--accent);color:#fff;border-radius:var(--r-pill);padding:0 6px;font-size:var(--fs-xs);font-family:var(--font-num);min-width:18px;text-align:center}.main{flex:1;min-width:0;display:flex;flex-direction:column;max-height:100vh}.page-header{background:var(--white);border-bottom:1px solid var(--line);padding:var(--sp-7) var(--sp-10);display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-6);flex-wrap:wrap}.page-header h1{margin:0;font-size:var(--fs-h3);font-weight:700}.page-header p{margin:4px 0 0;color:var(--muted);font-size:var(--fs-base)}.content{flex:1;overflow-y:auto;padding:var(--sp-9) var(--sp-10) 80px}.content>.inner{max-width:var(--content-max);margin:0 auto;display:flex;flex-direction:column;gap:var(--sp-8)}.action-bar{position:sticky;bottom:0;background:var(--white);border-top:1px solid var(--line);box-shadow:var(--shadow-bar);padding:var(--sp-4) var(--sp-10);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-6);flex-wrap:wrap;max-height:64px}.action-bar .summary{display:flex;gap:var(--sp-7);font-size:var(--fs-base);color:var(--ink2);flex-wrap:wrap}.action-bar .summary b{font-family:var(--font-num);color:var(--ink)}.card{background:var(--white);border:1px solid var(--line);border-radius:var(--r-xl);padding:var(--sp-8)}.card h2{margin:0 0 var(--sp-2);font-size:var(--fs-title-lg);font-weight:700}.card h3{margin:0 0 var(--sp-3);font-size:var(--fs-title);font-weight:700}.card>.hint{color:var(--muted);font-size:var(--fs-base);margin:0 0 var(--sp-5)}.grid{display:grid;gap:var(--sp-6)}.grid.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.row{display:flex;gap:var(--sp-5);align-items:center;flex-wrap:wrap}.row.between{justify-content:space-between}.stack{display:flex;flex-direction:column;gap:var(--sp-5)}.stack.tight{gap:var(--sp-3)}.btn{border:1px solid var(--line);background:var(--white);color:var(--ink);border-radius:var(--r-base);padding:8px 14px;font-size:var(--fs-base);cursor:pointer;min-height:34px;transition:background .12s}.btn:hover:not(:disabled){background:var(--line-soft)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:500}.btn.primary:hover:not(:disabled){background:var(--accent-dark)}.btn.danger{border-color:var(--danger-border);color:var(--danger-text);background:var(--danger-bg)}.btn.small{padding:5px 10px;min-height:28px;font-size:var(--fs-sm)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.active{background:var(--accent-soft);border-color:var(--accent-border);color:var(--accent-text);font-weight:500}label.field{display:flex;flex-direction:column;gap:4px;font-size:var(--fs-base);color:var(--ink2)}label.field input,label.field select,label.field textarea{border:1px solid var(--line);border-radius:var(--r-base);padding:8px 10px;background:var(--white);font-size:var(--fs-body);min-height:34px}label.field .note{color:var(--muted);font-size:var(--fs-xs)}.checkbox{display:flex;align-items:flex-start;gap:var(--sp-3);font-size:var(--fs-base);cursor:pointer}.checkbox input{margin-top:3px;width:16px;height:16px;accent-color:var(--accent)}.pill{display:inline-flex;align-items:center;gap:5px;border-radius:var(--r-pill);padding:2px 10px;font-size:var(--fs-sm);border:1px solid;white-space:nowrap}.pill .mark{font-family:var(--font-num)}.pill.ready,.pill.delivered{background:var(--accent-soft);color:var(--accent-text);border-color:var(--accent-border)}.pill.queued,.pill.excluded{background:var(--line-soft);color:var(--ink2);border-color:var(--line)}.pill.inProgress{background:var(--info-bg);color:var(--info-text);border-color:var(--info-border)}.pill.failed{background:var(--danger-bg);color:var(--danger-text);border-color:var(--danger-border)}.pill.unknown,.pill.retrying,.pill.manualReview,.pill.warning{background:var(--warn-bg);color:var(--warn-text);border-color:var(--warn-border)}.notice{border-radius:var(--r-base);padding:var(--sp-5) var(--sp-6);font-size:var(--fs-base);border:1px solid;line-height:var(--lh-normal)}.notice.info{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}.notice.warn{background:var(--warn-bg);border-color:var(--warn-border);color:var(--warn-text)}.notice.danger{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger-text)}.notice.ok{background:var(--accent-soft);border-color:var(--accent-border);color:var(--accent-text)}.notice.plain{background:var(--surface);border-color:var(--line);color:var(--ink2)}table.data{width:100%;border-collapse:collapse;font-size:var(--fs-base)}table.data th{text-align:left;font-weight:500;color:var(--ink2);font-size:var(--fs-sm);padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--line);white-space:nowrap}table.data td{padding:var(--sp-4);border-bottom:1px solid var(--line-soft);vertical-align:top}table.data tr.locked{background:var(--line-soft);color:var(--muted)}table.data tr:hover:not(.locked){background:var(--surface)}.table-wrap{overflow-x:auto}.metric{font-family:var(--font-num);font-size:var(--fs-metric);font-weight:600;line-height:1.1}.metric-card{background:var(--white);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--sp-7);display:flex;flex-direction:column;gap:var(--sp-2);text-align:left;cursor:pointer;width:100%}.metric-card:hover{border-color:var(--accent-border)}.metric-card.warn{background:var(--warn-bg);border-color:var(--warn-border)}.metric-card .title{font-size:var(--fs-base);color:var(--ink2);font-weight:500}.metric-card .desc{font-size:var(--fs-xs);color:var(--ink2);line-height:var(--lh-normal)}.steps{display:flex;gap:var(--sp-2);flex-wrap:wrap;background:var(--white);border:1px solid var(--line);border-radius:var(--r-lg);padding:var(--sp-3)}.steps button{border:none;background:none;padding:6px 12px;border-radius:var(--r-base);font-size:var(--fs-base);color:var(--muted);cursor:pointer;white-space:nowrap}.steps button.current{background:var(--accent);color:#fff;font-weight:500}.steps button.done{color:var(--accent-text);background:var(--accent-soft)}.steps button:disabled{opacity:.45;cursor:not-allowed}.reconcile{display:flex;gap:var(--sp-3);align-items:center;flex-wrap:wrap;font-size:var(--fs-base)}.reconcile .step{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-base);padding:var(--sp-3) var(--sp-5)}.reconcile .step b{font-family:var(--font-num);font-size:var(--fs-title)}.reconcile .arrow{color:var(--muted)}.preview-pane{border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}.preview-pane header{background:var(--surface);border-bottom:1px solid var(--line);padding:var(--sp-4) var(--sp-6);font-size:var(--fs-base);font-weight:500;display:flex;justify-content:space-between;gap:var(--sp-4);align-items:center}.sms-bubble{background:var(--accent-soft);border:1px solid var(--accent-border);border-radius:var(--r-lg);padding:var(--sp-6);margin:var(--sp-6);white-space:pre-wrap;font-size:var(--fs-body);line-height:var(--lh-relaxed);color:var(--ink)}.email-frame{width:100%;border:none;background:var(--canvas);min-height:460px}.email-frame.mobile{max-width:390px;margin:0 auto;display:block}.editor-toolbar{display:flex;gap:4px;flex-wrap:wrap;border:1px solid var(--line);border-bottom:none;border-radius:var(--r-base) var(--r-base) 0 0;padding:var(--sp-2);background:var(--surface)}.editor-toolbar button{border:1px solid transparent;background:none;border-radius:var(--r-sm);padding:4px 9px;font-size:var(--fs-base);cursor:pointer;min-width:30px}.editor-toolbar button:hover:not(:disabled){background:var(--line-soft)}.editor-toolbar button.on{background:var(--accent-soft);border-color:var(--accent-border);color:var(--accent-text)}.editor-toolbar button:disabled{opacity:.4;cursor:not-allowed}.editor-toolbar .sep{width:1px;background:var(--line);margin:2px 4px}.tiptap{border:1px solid var(--line);border-radius:0 0 var(--r-base) var(--r-base);padding:var(--sp-6);min-height:120px;background:var(--white);font-size:var(--fs-body);line-height:var(--lh-relaxed)}.tiptap:focus{outline:2px solid var(--accent);outline-offset:-2px}.tiptap p{margin:0 0 var(--sp-4)}.tiptap p:last-child{margin-bottom:0}.tiptap ul,.tiptap ol{margin:0 0 var(--sp-4);padding-left:22px}.var-chips{display:flex;gap:var(--sp-2);flex-wrap:wrap}.var-chip{border:1px dashed var(--accent-border);background:var(--accent-soft);color:var(--accent-text);border-radius:var(--r-pill);padding:3px 10px;font-size:var(--fs-sm);cursor:pointer}.var-chip:disabled{border-style:solid;border-color:var(--line);background:var(--line-soft);color:var(--muted);cursor:not-allowed}.var-chip .req{color:var(--danger-text);margin-left:2px}.block-list{display:flex;flex-direction:column;gap:var(--sp-2)}.block-item{border:1px solid var(--line);border-radius:var(--r-base);padding:var(--sp-4);background:var(--white);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);cursor:grab}.block-item.selected{border-color:var(--accent);background:var(--accent-soft)}.block-item.drag-over{border-top:2px solid var(--accent)}.block-item .label{font-size:var(--fs-base);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skeleton{background:linear-gradient(90deg,var(--line-soft),var(--surface),var(--line-soft));border-radius:var(--r-base);height:16px;animation:pulse 1.4s ease-in-out infinite}@keyframes pulse{0%,to{opacity:.5}50%{opacity:1}}.empty{text-align:center;padding:var(--sp-10);color:var(--muted)}.empty h3{color:var(--ink2);margin:0 0 var(--sp-3)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#16241f73;display:flex;align-items:center;justify-content:center;padding:var(--sp-7);z-index:100}.modal{background:var(--white);border-radius:var(--r-xl);box-shadow:var(--shadow-modal);padding:var(--sp-9);max-width:520px;width:100%;max-height:86vh;overflow-y:auto}.modal.wide{max-width:1080px;max-height:92vh}@media(max-width:640px){.modal-backdrop{padding:var(--sp-3, 8px)}.modal,.modal.wide{padding:var(--sp-6, 16px);max-height:96vh}}table.data tr.group-row td{background:var(--accent-soft);border-top:2px solid var(--line)}.open-access-banner{background:#fff4e0;border-bottom:1px solid #f0d49c;color:#6b4a00;padding:8px 16px;font-size:var(--fs-base);line-height:1.5}.send-bar{position:sticky;bottom:0;z-index:20;background:var(--white);border:1px solid var(--line);border-radius:var(--r-xl);box-shadow:var(--shadow-bar);padding:var(--sp-4) var(--sp-6, 16px);display:flex;flex-direction:column;gap:6px}.send-bar-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px}.send-bar-row .btn.primary{margin-left:auto}.send-bar-count{font-family:var(--font-num)}.field.inline{flex-direction:row;align-items:center;gap:6px}.field.inline select{max-width:260px}.sms-bubble{white-space:pre-wrap;overflow-wrap:anywhere;background:var(--accent-soft);border:1px solid var(--line);border-radius:12px;padding:10px 12px;font-size:var(--fs-base);line-height:1.6}@media(max-width:640px){.send-bar-row .btn.primary{margin-left:0;width:100%}.field.inline select{max-width:100%}}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--sp-7)}.login-card{background:var(--white);border:1px solid var(--line);border-radius:var(--r-xl);box-shadow:var(--shadow-frame);padding:var(--sp-10);width:100%;max-width:400px}.muted{color:var(--muted)}.small{font-size:var(--fs-sm)}.num{font-family:var(--font-num)}.wrap-anywhere{overflow-wrap:anywhere}@media(max-width:1024px){.grid.cols-4,.grid.cols-3{grid-template-columns:repeat(2,minmax(0,1fr))}.content{padding:var(--sp-7) var(--sp-7) 80px}.page-header{padding:var(--sp-6) var(--sp-7)}.action-bar{padding:var(--sp-4) var(--sp-7)}}@media(max-width:820px){.shell{flex-direction:column}.sidebar{width:100%;flex:none;height:auto;position:static;flex-direction:column;gap:var(--sp-4);padding:var(--sp-5)}.nav{flex-direction:row;overflow-x:auto;gap:var(--sp-2);padding-bottom:2px}.nav a{white-space:nowrap;min-height:44px}.main{max-height:none}.content{overflow:visible}.grid.cols-2,.grid.cols-3,.grid.cols-4{grid-template-columns:1fr}.action-bar{max-height:none;padding:var(--sp-3) var(--sp-5);flex-direction:column;align-items:stretch;gap:var(--sp-2)}.action-bar .summary{gap:var(--sp-4);font-size:var(--fs-sm)}.action-bar .btn{width:100%;min-height:44px}}@media(max-width:560px){table.data,table.data tbody,table.data tr,table.data td{display:block;width:100%}table.data thead{display:none}table.data tr{border:1px solid var(--line);border-radius:var(--r-base);margin-bottom:var(--sp-4);padding:var(--sp-3)}table.data td{border:none;padding:var(--sp-2) var(--sp-3);display:flex;justify-content:space-between;gap:var(--sp-4)}table.data td:before{content:attr(data-label);color:var(--muted);font-size:var(--fs-sm);flex:0 0 auto}}@media print{.sidebar,.action-bar{display:none}}
