:root{--ink:#172126;--muted:#68767d;--line:#dce4e7;--surface:#fff;--canvas:#f5f7f7;--brand:#094BC1;--brand-dark:#06398f;--accent:#e9b949;--success:#19734a;--danger:#b42318;--shadow:0 18px 50px rgba(9,75,193,.10)}
*{box-sizing:border-box}
body{margin:0;background:var(--canvas);color:var(--ink);font:14px/1.5 Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif}
a{color:inherit}.shell{min-height:100vh}.topbar{position:sticky;top:0;z-index:10;background:rgba(255,255,255,.94);border-bottom:1px solid var(--line);backdrop-filter:blur(14px)}
.nav{max-width:1180px;margin:auto;padding:14px 24px;display:flex;align-items:center;gap:24px}.brand{display:flex;align-items:center;gap:11px;text-decoration:none;font-weight:800;color:var(--brand);letter-spacing:-.02em}.brand-mark{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;color:white;background:linear-gradient(145deg,var(--brand),#2a74e8)}
.nav-links{display:flex;gap:6px;margin-left:auto}.nav-links a{padding:8px 12px;border-radius:9px;text-decoration:none;color:var(--muted);font-weight:650}.nav-links a:hover,.nav-links a.active{background:#e9f1f3;color:var(--brand)}
.page{max-width:1180px;margin:auto;padding:36px 24px 64px}.eyebrow{color:var(--brand);font-size:12px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.hero{display:flex;justify-content:space-between;align-items:end;gap:24px;margin-bottom:28px}.hero h1{font-size:34px;line-height:1.15;letter-spacing:-.04em;margin:7px 0}.hero p{color:var(--muted);margin:0;max-width:650px}.button{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:10px;padding:11px 16px;background:var(--brand);color:#fff;text-decoration:none;font:inherit;font-weight:750;cursor:pointer;box-shadow:0 6px 16px rgba(9,75,193,.18)}.button:hover{background:var(--brand-dark)}.button.secondary{background:#fff;color:var(--brand);border:1px solid var(--line);box-shadow:none}.button.danger{background:var(--danger)}.button:disabled{opacity:.55;cursor:not-allowed}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:24px}.stat,.card{background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow)}.stat{padding:20px}.stat-label{color:var(--muted);font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em}.stat-value{font-size:30px;font-weight:800;letter-spacing:-.04em;margin-top:4px}.stat-note{color:var(--muted);font-size:12px}.card{padding:22px}.card h2{font-size:18px;margin:0 0 4px}.card-intro{color:var(--muted);margin:0 0 20px}.grid-2{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(360px,.95fr);gap:20px}.field{margin-bottom:17px}.field label{display:flex;justify-content:space-between;gap:12px;margin-bottom:7px;font-size:13px;font-weight:750}.hint{color:var(--muted);font-weight:450}.input,.textarea,.file-input{width:100%;border:1px solid #cad5d9;border-radius:10px;background:#fff;padding:11px 12px;color:var(--ink);font:inherit;outline:none}.input:focus,.textarea:focus,.file-input:focus{border-color:#438294;box-shadow:0 0 0 3px rgba(67,130,148,.13)}.textarea{min-height:132px;resize:vertical}.editor{min-height:270px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:13px}.dropzone{padding:14px;border:1px dashed #9fb4bb;border-radius:12px;background:#f8fbfb}.divider{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:12px;margin:14px 0}.divider:before,.divider:after{content:"";height:1px;background:var(--line);flex:1}.recipient-summary{display:flex;gap:10px;flex-wrap:wrap;margin-top:10px}.chip{display:inline-flex;align-items:center;padding:5px 9px;border-radius:999px;background:#edf3f4;color:var(--brand);font-size:12px;font-weight:700}.chip.warn{background:#fff4dc;color:#8a5a00}.notice{padding:12px 14px;border-radius:11px;margin:0 0 18px;border:1px solid #b9ddca;background:#edf9f2;color:#155d3b}.notice.error{border-color:#f1b5b0;background:#fff1f0;color:#8d1d15}.preview{height:520px;border:1px solid var(--line);border-radius:12px;background:white;overflow:auto}.preview iframe{width:100%;height:100%;border:0}.actionbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding-top:18px;border-top:1px solid var(--line)}.confirm{display:flex;gap:9px;align-items:flex-start;color:var(--muted);font-size:12px}.confirm input{margin-top:3px}.results{margin-top:20px}.result-row{display:flex;justify-content:space-between;gap:18px;padding:10px 12px;border-bottom:1px solid var(--line);font-size:13px}.status-ok{color:var(--success);font-weight:750}.status-error{color:var(--danger);font-weight:750}
.table-wrap{overflow:auto}.table{width:100%;border-collapse:collapse}.table th{text-align:left;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.07em;padding:10px 12px;border-bottom:1px solid var(--line)}.table td{padding:13px 12px;border-bottom:1px solid #edf1f2}.table tr:last-child td{border-bottom:0}.empty{text-align:center;color:var(--muted);padding:42px}.row-link{color:var(--brand);text-decoration:none}.row-link:hover{text-decoration:underline}.tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px}.tabs a{border:1px solid var(--line);border-radius:999px;padding:7px 11px;color:var(--muted);font-size:12px;font-weight:750;text-decoration:none}.tabs a:hover,.tabs a.active{background:#eaf1ff;border-color:#c7d7f5;color:var(--brand)}.badge{display:inline-flex;padding:4px 8px;border-radius:999px;background:#eaf1ff;color:var(--brand);font-size:11px;font-weight:750}.badge.muted{background:#f2f4f4;color:var(--muted)}.error-text{color:var(--danger);font-size:12px;margin-top:5px;max-width:280px}.progress{width:100px;height:7px;background:#e7edef;border-radius:99px;overflow:hidden}.progress span{display:block;height:100%;background:var(--brand);border-radius:inherit}.login-page{min-height:100vh;display:grid;grid-template-columns:minmax(0,1fr) minmax(430px,.78fr);background:#eef3fb}.login-art{background:linear-gradient(145deg,#06398f,#094BC1);padding:56px 64px;color:#fff;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}.login-art h1{font-size:46px;line-height:1.06;letter-spacing:-.04em;max-width:590px;margin:10px 0 16px}.login-art p{color:#dce8ff;max-width:540px;font-size:16px;margin:0}.login-art-meta{display:flex;gap:10px;flex-wrap:wrap}.login-art-meta span{border:1px solid rgba(255,255,255,.28);border-radius:999px;padding:7px 10px;color:#edf4ff;font-size:12px;font-weight:750}.login-panel{display:grid;place-items:center;padding:32px}.login-card{width:min(410px,100%);background:#fff;border:1px solid #dfe7f2;border-radius:18px;padding:34px;box-shadow:0 24px 70px rgba(9,75,193,.14)}.login-card h2{font-size:32px;line-height:1.1;letter-spacing:-.03em;margin:4px 0 8px}.login-card>p{color:var(--muted);margin:0 0 26px}.login-card .button{width:100%;margin-top:6px;min-height:46px}
@media(max-width:820px){.stats{grid-template-columns:repeat(2,1fr)}.grid-2,.login-page{grid-template-columns:1fr}.login-art{min-height:auto;padding:34px 28px}.login-art h1{font-size:32px}.login-art-meta{margin-top:26px}.login-panel{padding:24px}.hero{align-items:flex-start;flex-direction:column}.preview{height:400px}}@media(max-width:520px){.page,.nav{padding-left:16px;padding-right:16px}.nav-links a{padding:8px}.nav-links .label{display:none}.stats{grid-template-columns:1fr 1fr}.stat{padding:15px}.stat-value{font-size:25px}.hero h1{font-size:28px}.login-art{padding:26px 20px}.login-art p,.login-art-meta{display:none}.login-panel{padding:18px}.login-card{border-radius:14px;padding:24px}.login-card h2{font-size:28px}.actionbar{align-items:stretch;flex-direction:column}.button{width:100%}}
.mode-toggle{margin:0 0 14px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:#f8fbfb;color:var(--ink)}
.is-readonly{background:#f5f7f7;color:var(--muted)}
.notice.subtle{border-color:#d7e2f0;background:#f8fbff;color:#53646f}
.login-logo{display:flex;align-items:center;width:min(210px,72%);max-width:100%;margin:0 auto 28px}
.login-logo img{display:block;width:100%;height:auto;max-height:46px;object-fit:contain;object-position:center}

/* shadcn-inspired polish layer */
:root{--ink:#0f172a;--muted:#64748b;--line:#e2e8f0;--canvas:#f8fafc;--ring:rgba(9,75,193,.16);--shadow:0 1px 2px rgba(15,23,42,.04),0 18px 50px rgba(9,75,193,.08)}
body{background:radial-gradient(circle at top left,rgba(9,75,193,.08),transparent 28rem),var(--canvas)}
.brand-mark{box-shadow:0 8px 20px rgba(9,75,193,.18)}
.nav-links a{border-radius:10px}.nav-links a:hover,.nav-links a.active{background:#eef4ff;color:var(--brand)}
.button{border-radius:12px;box-shadow:0 1px 2px rgba(15,23,42,.08),0 8px 18px rgba(9,75,193,.18);transition:.15s ease}.button:hover{transform:translateY(-1px)}.button.secondary{box-shadow:0 1px 2px rgba(15,23,42,.04)}.button.danger{background:#fff;color:#dc2626;border:1px solid #fecaca;box-shadow:none}.button.danger:hover{background:#fef2f2}.button.ghost{background:transparent;color:var(--muted);border:1px solid transparent;box-shadow:none}
.stat,.card{background:rgba(255,255,255,.96);border-color:var(--line);border-radius:18px;box-shadow:var(--shadow)}
.input,.textarea,.file-input{border-color:#cbd5e1;border-radius:12px;box-shadow:0 1px 2px rgba(15,23,42,.04)}.input:focus,.textarea:focus,.file-input:focus{border-color:var(--brand);box-shadow:0 0 0 4px var(--ring)}
.dropzone{border-color:#94a3b8;border-radius:14px;background:#f8fafc}.chip{background:#eff6ff}.chip.warn{background:#fff7ed;color:#9a3412}
.notice{border-color:#bbf7d0;background:#f0fdf4;color:#166534}.notice.error{border-color:#fecaca;background:#fef2f2;color:#991b1b}
.preview{border-radius:14px}.table{border-collapse:separate;border-spacing:0}.table th{background:#f8fafc}.table tbody tr:hover{background:#f8fbff}.tabs a:hover,.tabs a.active,.badge{background:#eff6ff;border-color:#bfdbfe}.badge.muted{background:#f1f5f9;color:var(--muted)}
.inline-form{display:inline}.actions-cell{white-space:nowrap}.campaign-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.fallback-link{display:block;color:#094BC1;text-decoration:underline;font-weight:700}.small-muted{color:var(--muted);font-size:12px}
.previous-card{border:1px solid var(--line);border-radius:14px;background:#f8fafc;padding:13px}.previous-actions{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}.previous-list{max-height:230px;overflow:auto;border:1px solid var(--line);border-radius:12px;background:#fff}.previous-row{display:flex!important;justify-content:flex-start!important;gap:10px;margin:0!important;padding:10px 12px;border-bottom:1px solid #eef2f7;font-weight:500!important}.previous-row:last-child{border-bottom:0}.previous-row:hover{background:#f8fbff}.previous-row input{margin-top:4px}.previous-row span{display:grid}.previous-row small{color:var(--muted);font-size:12px}.previous-row input:disabled+span{opacity:.55}
.send-layout{display:grid!important;grid-template-columns:minmax(0,1fr) minmax(360px,480px);gap:20px;align-items:start;width:100%}.send-now-box{display:grid;gap:11px;margin:0 0 18px;padding:14px;border:1px solid #bfdbfe;border-radius:14px;background:#eff6ff}.send-now-box .button{width:max-content;min-width:180px}.send-layout aside.card{position:sticky;top:92px;display:block!important}.preview-card{min-width:0}.preview-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.preview-header .card-intro{margin-bottom:14px}.preview{display:block!important;min-height:520px}
@media(max-width:980px){.send-layout{grid-template-columns:1fr}.send-layout aside.card{position:static}.send-now-box .button{width:100%}.preview{min-height:420px}}
