@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:400;src:url(../media/public-sans-vietnamese-400-normal.24_1tzbnw33ja.woff2)format("woff2"),url(../media/public-sans-vietnamese-400-normal.0-4ulxt49ka3e.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:400;src:url(../media/public-sans-latin-ext-400-normal.2l_xj0rhcbz64.woff2)format("woff2"),url(../media/public-sans-latin-ext-400-normal.0n93hxbemuh3v.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:400;src:url(../media/public-sans-latin-400-normal.0dfhr30pzjgke.woff2)format("woff2"),url(../media/public-sans-latin-400-normal.1iuoi-v758x-j.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:500;src:url(../media/public-sans-vietnamese-500-normal.44q80cvx9e17c.woff2)format("woff2"),url(../media/public-sans-vietnamese-500-normal.2o25nloz4j6xo.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:500;src:url(../media/public-sans-latin-ext-500-normal.136rpmb49efeo.woff2)format("woff2"),url(../media/public-sans-latin-ext-500-normal.30ge7ie4t6f-y.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:500;src:url(../media/public-sans-latin-500-normal.3xdq1ar451d-2.woff2)format("woff2"),url(../media/public-sans-latin-500-normal.3rx3vgale2q5o.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:600;src:url(../media/public-sans-vietnamese-600-normal.17-_vp97v_ldf.woff2)format("woff2"),url(../media/public-sans-vietnamese-600-normal.38e6o90zb5i8y.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:600;src:url(../media/public-sans-latin-ext-600-normal.05da1qdr9tnx7.woff2)format("woff2"),url(../media/public-sans-latin-ext-600-normal.1rtzco0-5hi93.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:600;src:url(../media/public-sans-latin-600-normal.28kl08ryt2g51.woff2)format("woff2"),url(../media/public-sans-latin-600-normal.1ycgdwfdvv7pk.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:700;src:url(../media/public-sans-vietnamese-700-normal.2w2bxbbyvbeye.woff2)format("woff2"),url(../media/public-sans-vietnamese-700-normal.30uqq5v_pyg9i.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:700;src:url(../media/public-sans-latin-ext-700-normal.0169f882krkhs.woff2)format("woff2"),url(../media/public-sans-latin-ext-700-normal.34uholw-20dot.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:700;src:url(../media/public-sans-latin-700-normal.1ccm_jb9ry_v5.woff2)format("woff2"),url(../media/public-sans-latin-700-normal.14cvx1kfmn0q_.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
:root{--bg:#f5f7f6;--surface:#fff;--ink:#1b2a33;--muted:#5b6a72;--line:#d8e0e3;--line-strong:#b8c6cb;--blue:#1f5f8b;--blue-ink:#154566;--blue-soft:#e6eff6;--green:#2e7d4f;--green-soft:#e5f2ea;--amber:#8f5410;--amber-soft:#fbefdd;--red:#a33a2b;--red-soft:#f8e5e1;--radius:10px;--focus:0 0 0 3px #1f5f8b59}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--ink);margin:0}body{-webkit-font-smoothing:antialiased;font:400 16px/1.55 Public Sans,system-ui,sans-serif}a{color:var(--blue)}h1{letter-spacing:-.01em;margin:0 0 6px;font-size:28px;font-weight:700;line-height:1.2}h2{margin:0 0 4px;font-size:20px;font-weight:600;line-height:1.3}h3{margin:0 0 4px;font-size:16px;font-weight:600}p{margin:0 0 12px}.lead{color:var(--muted);max-width:62ch;margin-bottom:24px;font-size:17px}.muted{color:var(--muted)}.small{font-size:14px}button,.btn{cursor:pointer;background:var(--blue);color:#fff;border:1px solid #0000;border-radius:8px;align-items:center;gap:8px;padding:11px 18px;font:600 15px/1 Public Sans,system-ui,sans-serif;text-decoration:none;display:inline-flex}button:hover,.btn:hover{background:var(--blue-ink)}button:disabled{opacity:.55;cursor:not-allowed}button.secondary{background:var(--surface);color:var(--ink);border-color:var(--line-strong)}button.secondary:hover{background:var(--blue-soft)}button.ghost{color:var(--blue);background:0 0;padding:8px 10px}button.ghost:hover{background:var(--blue-soft)}button.good{background:var(--green)}button.good:hover{background:#24653f}button.danger{background:var(--surface);color:var(--red);border-color:#e3b9b1}button.danger:hover{background:var(--red-soft)}button.small,.btn.small{padding:7px 12px;font-size:14px}.linkish{color:var(--blue);background:0 0;border:0;padding:6px 4px;font-weight:600}.linkish:hover{background:0 0;text-decoration:underline}:focus-visible{box-shadow:var(--focus);outline:none}input[type=text],input[type=email],input[type=password],input[type=number],input[type=time],input[type=url],select,textarea{width:100%;font:inherit;color:var(--ink);border:1px solid var(--line-strong);background:#fff;border-radius:8px;padding:10px 12px}textarea{resize:vertical;min-height:120px;line-height:1.5}input:focus,select:focus,textarea:focus{border-color:var(--blue);box-shadow:var(--focus);outline:none}.field{margin-bottom:18px;display:block}.field-label{margin-bottom:6px;font-weight:600;display:block}.hint{color:var(--muted);margin-top:6px;font-size:14px;display:block}.check{cursor:pointer;align-items:flex-start;gap:10px;margin:10px 0;display:flex}.check input{width:18px;height:18px;accent-color:var(--blue);margin-top:3px}.topbar{background:var(--surface);border-bottom:1px solid var(--line);align-items:center;gap:28px;padding:12px 28px;display:flex}.brand{color:var(--ink);font-size:17px;font-weight:700;text-decoration:none}.topbar nav{gap:6px;display:flex}.topbar nav a{color:var(--ink);border-radius:8px;padding:8px 12px;font-weight:500;text-decoration:none}.topbar nav a:hover{background:var(--blue-soft)}.who{color:var(--muted);align-items:center;gap:10px;margin-left:auto;font-size:15px;display:flex}.page{max-width:1120px;margin:0 auto;padding:36px 28px 80px}.loading{text-align:center;color:var(--muted);padding:80px}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:20px;padding:24px}.panel>h2+p{color:var(--muted)}.row{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.row>.field{margin-bottom:0}.grid2{grid-template-columns:1fr 1fr;gap:0 20px;display:grid}.actions{flex-wrap:wrap;align-items:center;gap:10px;margin-top:8px;display:flex}.pills{flex-wrap:wrap;gap:8px;display:flex}.pill{background:var(--surface);color:var(--ink);border:1px solid var(--line-strong);border-radius:999px;padding:8px 14px;font-weight:500}.pill:hover{background:var(--blue-soft)}.pill.on{background:var(--blue);border-color:var(--blue);color:#fff}.chips{border:1px solid var(--line-strong);background:#fff;border-radius:8px;flex-wrap:wrap;align-items:center;gap:6px;padding:6px;display:flex}.chips:focus-within{border-color:var(--blue);box-shadow:var(--focus)}.chips input{font:inherit;color:var(--ink);border:0;outline:none;flex:1;min-width:180px;padding:6px;box-shadow:none!important}.chip{background:var(--blue-soft);color:var(--blue-ink);border-radius:6px;align-items:center;gap:2px;padding:4px 4px 4px 10px;font-weight:500;display:inline-flex}.chip button{color:var(--blue-ink);background:0 0;padding:2px 6px;font-size:16px}.chip button:hover{background:#0000000f}.campaign-layout{grid-template-columns:250px 1fr;align-items:start;gap:40px;display:grid}.campaign-layout>div,.settings-layout>div{min-width:0}.table select{min-width:160px}.route{position:sticky;top:24px}.route-title{color:var(--muted);margin-bottom:18px;font-size:15px;font-weight:700}.route ol{margin:0;padding:0;list-style:none;position:relative}.route ol:before{content:"";background:var(--line);width:2px;position:absolute;top:18px;bottom:18px;left:17px}.route li{position:relative}.route a{color:var(--ink);border-radius:8px;grid-template-columns:36px 1fr;gap:12px;padding:10px 8px 10px 0;text-decoration:none;display:grid}.route a:hover .route-name{text-decoration:underline}.route .dot{background:var(--surface);border:2px solid var(--line-strong);width:36px;height:36px;color:var(--muted);z-index:1;border-radius:50%;place-items:center;font-weight:700;display:grid;position:relative}.route .done .dot{background:var(--green-soft);border-color:var(--green);color:var(--green)}.route .current .dot{background:var(--blue);border-color:var(--blue);color:#fff}.route .route-name{padding-top:2px;font-weight:600;line-height:1.3}.route .route-sub{color:var(--muted);font-size:14px;line-height:1.35}.route .current .route-name{color:var(--blue-ink)}.route .disabled{pointer-events:none;opacity:.55}.table{border-collapse:collapse;background:var(--surface);width:100%}.table th{text-align:left;color:var(--muted);border-bottom:1px solid var(--line);padding:10px 12px;font-size:14px;font-weight:600}.table td{border-bottom:1px solid var(--line);vertical-align:top;padding:12px}.table tr.click{cursor:pointer}.table tr.click:hover td{background:#f8fafb}.table .num{text-align:right;font-variant-numeric:tabular-nums}.table-wrap{border:1px solid var(--line);border-radius:var(--radius);overflow-x:auto}.status{white-space:nowrap;border-radius:6px;padding:3px 9px;font-size:13px;font-weight:600;display:inline-block}.s-verified,.s-done,.s-sent,.s-ok{background:var(--green-soft);color:var(--green)}.s-sourced,.s-draft,.s-running,.s-queued{background:var(--blue-soft);color:var(--blue-ink)}.s-rejected,.s-failed,.s-blocked,.s-skipped{background:var(--red-soft);color:var(--red)}.s-not_found,.s-none{color:var(--muted);background:#eef1f2}.s-approved,.s-warn{background:var(--amber-soft);color:var(--amber)}.progress{background:var(--line);border-radius:99px;height:8px;margin:10px 0 14px;overflow:hidden}.progress span{background:var(--blue);height:100%;transition:width .4s;display:block}.activity{border-top:1px solid var(--line);max-height:260px;overflow:auto}.activity div{border-bottom:1px solid var(--line);justify-content:space-between;gap:16px;padding:8px 0;font-size:14px;display:flex}.activity div span:last-child{color:var(--muted);text-align:right}.msg{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:14px;padding:20px 22px}.msg-head{flex-wrap:wrap;justify-content:space-between;gap:12px;margin-bottom:10px;display:flex}.msg-subject{margin-bottom:8px;font-weight:600}.msg-body{white-space:pre-wrap;border:1px solid var(--line);background:#fafbfb;border-radius:8px;padding:14px 16px;font-size:15px}.problem{background:var(--amber-soft);color:var(--amber);border-radius:8px;margin:6px 0;padding:10px 14px;font-weight:500}.note{background:var(--blue-soft);color:var(--blue-ink);border-radius:8px;margin:6px 0;padding:10px 14px}details{margin-top:10px}details summary{cursor:pointer;color:var(--blue);padding:4px 0;font-weight:600}.facts div{border-bottom:1px solid var(--line);padding:8px 0;font-size:14px}.evidence{color:#4a3d12;background:#fffbea;border-left:3px solid #d9b44a;margin-top:4px;padding:6px 10px;font-size:14px}.tabs{border-bottom:1px solid var(--line);flex-wrap:wrap;gap:4px;margin-bottom:20px;display:flex}.tabs button{color:var(--muted);background:0 0;border-bottom:3px solid #0000;border-radius:0;padding:12px 14px}.tabs button:hover{color:var(--ink);background:0 0}.tabs button.on{color:var(--ink);border-bottom-color:var(--blue)}.settings-layout{grid-template-columns:220px 1fr;align-items:start;gap:36px;display:grid}.side-nav{flex-direction:column;gap:2px;display:flex;position:sticky;top:24px}.side-nav button{color:var(--ink);text-align:left;background:0 0;padding:10px 12px;font-weight:500}.side-nav button:hover{background:var(--blue-soft)}.side-nav button.on{background:var(--blue-soft);color:var(--blue-ink);font-weight:600}.drawer-wrap{z-index:50;background:#1b2a3359;justify-content:flex-end;display:flex;position:fixed;inset:0}.drawer{background:var(--bg);width:min(640px,100%);height:100%;overflow:auto;box-shadow:-8px 0 30px #1b2a3326}.drawer header{background:var(--surface);border-bottom:1px solid var(--line);z-index:1;justify-content:space-between;align-items:center;padding:18px 24px;display:flex;position:sticky;top:0}.drawer-body{padding:20px 24px 60px}.kv{border-bottom:1px solid var(--line);grid-template-columns:170px 1fr;gap:6px 16px;padding:12px 0;display:grid}.kv-label{color:var(--muted);font-size:14px}.checklist{margin:0;padding:0;list-style:none}.checklist li{border-bottom:1px solid var(--line);align-items:center;gap:14px;padding:12px 0;display:flex}.checklist .tick{border:2px solid var(--line-strong);width:26px;height:26px;color:var(--muted);border-radius:50%;flex:none;place-items:center;font-size:14px;font-weight:700;display:grid}.checklist .tick.yes{background:var(--green);border-color:var(--green);color:#fff}.camp-list{gap:12px;display:grid}.camp{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);color:var(--ink);grid-template-columns:1fr auto;align-items:center;gap:16px;padding:18px 22px;text-decoration:none;display:grid}.camp:hover{border-color:var(--blue)}.camp-stats{color:var(--muted);gap:22px;font-size:14px;display:flex}.camp-stats b{color:var(--ink);font-size:18px;display:block}.empty{border:1px dashed var(--line-strong);border-radius:var(--radius);text-align:center;color:var(--muted);background:var(--surface);padding:28px}.empty-title{color:var(--ink);font-weight:600}.toasts{z-index:100;gap:8px;width:min(560px,92vw);display:grid;position:fixed;bottom:22px;left:50%;transform:translate(-50%)}.toast{border-radius:8px;padding:12px 16px;font-weight:500;box-shadow:0 6px 24px #1b2a332e}.toast.ok{background:var(--ink);color:#fff}.toast.err{background:var(--red);color:#fff}.login{background:var(--surface);border:1px solid var(--line);border-radius:14px;max-width:400px;margin:12vh auto;padding:34px}.placeholder-groups{gap:10px;margin:8px 0 18px;display:grid}.placeholder-groups .pills .pill{padding:5px 10px;font-size:13px}.warn-fact{opacity:.6}@media (max-width:860px){.campaign-layout,.settings-layout{grid-template-columns:1fr}.route{position:static}.route ol{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.topbar nav{order:3;width:100%}.route ol:before{display:none}.side-nav{flex-flow:wrap;position:static}.grid2{grid-template-columns:1fr}.page{padding:20px 16px 60px}.topbar{flex-wrap:wrap;gap:12px;padding:10px 16px}.kv{grid-template-columns:1fr}}@media (prefers-reduced-motion:reduce){*{transition:none!important}}
