:root{--bg:#f4f6f8;--panel:#fff;--ink:#1f2933;--muted:#7b8794;--line:#e4e7eb;
--brand:#2563eb;--ok:#0a7d33;--err:#c0392b;--warn:#b7791f;--danger:#c0392b}
*{box-sizing:border-box}
body{margin:0;font-family:system-ui,"Segoe UI","Hiragino Kaku Gothic ProN",Meiryo,sans-serif;
background:var(--bg);color:var(--ink);line-height:1.6}
a{color:var(--brand);text-decoration:none}
a:hover{text-decoration:underline}
.topbar{display:flex;align-items:center;gap:1rem;background:#111827;color:#fff;padding:.6rem 1rem;flex-wrap:wrap}
.topbar a{color:#e5e7eb}
.brand a{font-weight:700;color:#fff}
.topbar nav{display:flex;gap:1rem;flex-wrap:wrap;flex:1}
.logout{display:flex;align-items:center;gap:.5rem;margin-left:auto}
.logout .user{color:#9ca3af;font-size:.85rem}
.container{max-width:1100px;margin:1.2rem auto;padding:0 1rem}
.container.narrow{max-width:560px}
h1{font-size:1.4rem}h2{font-size:1.1rem;margin-top:1.4rem}h3{font-size:.95rem;color:var(--muted)}
.muted{color:var(--muted);font-size:.9rem}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:1rem;margin:1rem 0}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
@media(max-width:820px){.two-col{grid-template-columns:1fr}}
table{width:100%;border-collapse:collapse;margin:.6rem 0;font-size:.9rem}
th,td{border:1px solid var(--line);padding:.4rem .5rem;text-align:left;vertical-align:top}
th{background:#f9fafb}
label{display:block;margin:.5rem 0;font-size:.9rem}
input,select,textarea{width:100%;padding:.4rem;border:1px solid #cbd2d9;border-radius:5px;font:inherit}
.row-form input,.row-form select{width:auto}
button{background:var(--brand);color:#fff;border:0;border-radius:5px;padding:.5rem .9rem;cursor:pointer;font:inherit}
button:hover{opacity:.92}
button.primary{background:var(--ok);font-weight:700}
button.danger,.danger{background:var(--danger)}
.link-btn{background:none;color:var(--brand);padding:0;text-decoration:underline}
.stack-form label{margin:.4rem 0}
.row-form{display:flex;gap:.5rem;align-items:end;flex-wrap:wrap;margin:.5rem 0}
.filters,.inline-add{display:flex;gap:.5rem;flex-wrap:wrap;margin:.8rem 0}
.filters input,.filters select,.inline-add input{width:auto}
.chk{display:flex;align-items:center;gap:.3rem}
.chk input{width:auto}
.cards{display:flex;gap:1rem;flex-wrap:wrap}
.card{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:1rem 1.4rem;min-width:150px}
.card .num{font-size:1.8rem;font-weight:700}
.card .lbl{color:var(--muted);font-size:.85rem}
.funnel td{font-size:1.1rem;font-weight:600}
.funnel .rate{color:var(--muted);font-size:.85rem;font-weight:400}
.badge{display:inline-block;padding:.05rem .4rem;border-radius:4px;background:#e5e7eb;font-size:.8rem}
.badge.ok{background:#d1fae5;color:var(--ok)}
.badge.dup{background:#fde2e1;color:var(--err)}
.alert-ok{background:#d1fae5;color:var(--ok);padding:.5rem .8rem;border-radius:6px}
.alert-error{background:#fde2e1;color:var(--err);padding:.5rem .8rem;border-radius:6px}
.alert-warn{background:#fef3c7;color:var(--warn);padding:.5rem .8rem;border-radius:6px}
.reasons{color:var(--err)}
.row-ng{background:#fff4f4}
.row-dup{background:#fff9f0}
.result-success{color:var(--ok);font-weight:600}
.result-failed,.result-skipped{color:var(--err)}
.result-in_progress{color:var(--warn)}
.login-box{max-width:360px;margin:3rem auto;background:#fff;padding:1.5rem;border-radius:8px;border:1px solid var(--line)}
.send-panel{border:2px solid var(--brand)}
.cheat{background:#f9fafb;border-radius:6px;padding:.6rem;margin:.6rem 0}
.batch-actions{white-space:nowrap}
.batch-actions button{margin:.2rem .2rem 0 0}
code{background:#eef2f7;padding:.05rem .3rem;border-radius:4px;font-size:.85em}
