:root{
  --primary:#4f6ef7; --primary-d:#3a57d8; --primary-soft:#eef1fe;
  --bg:#f5f6fa; --card:#fff; --line:#e7e9f0; --text:#3b4257; --muted:#98a0b3;
  --ok:#1abc9c; --warn:#f7b84b; --danger:#fa5c7c;
  --sidebar-w:248px; --topbar-h:60px; --radius:10px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{font-family:Pretendard,-apple-system,'Malgun Gothic',sans-serif;background:var(--bg);color:var(--text);font-size:14px;line-height:1.5}
a{color:inherit;text-decoration:none}
input,select,button,textarea{font-family:inherit}

/* ---- layout ---- */
.wrap{display:flex;min-height:100vh}
.sidebar{width:var(--sidebar-w);background:#fff;border-right:1px solid var(--line);position:fixed;inset:0 auto 0 0;overflow-y:auto;z-index:20}
.brand{height:var(--topbar-h);display:flex;align-items:center;gap:9px;padding:0 20px;border-bottom:1px solid var(--line);font-weight:700;color:var(--primary-d)}
.brand .logo{width:28px;height:28px;border-radius:7px;background:linear-gradient(135deg,var(--primary),#7a90fb);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:13px}
.brand-logo{height:24px;width:auto;display:block}
.menu{padding:8px 0 30px}
.menu .grp{font-size:11px;color:#5f6779;font-weight:700;padding:16px 20px 6px;letter-spacing:.02em}
.menu a.item{display:flex;align-items:center;gap:10px;padding:9px 20px;color:#23293a;font-weight:500;border-left:3px solid transparent}
.menu a.item:hover{background:#f7f8fc;color:var(--primary-d)}
.menu a.item.active{background:var(--primary-soft);color:var(--primary-d);border-left-color:var(--primary);font-weight:600}
.menu a.item i{font-size:15px;width:18px;text-align:center;color:#7b8497}
.menu a.item.active i{color:var(--primary)}
.menu a.soon{opacity:.55}
.main{flex:1;margin-left:var(--sidebar-w)}
.topbar{height:var(--topbar-h);background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:flex-end;padding:0 24px;position:sticky;top:0;z-index:10}
.topbar .user{display:flex;align-items:center;gap:8px;cursor:pointer;font-weight:600}
.topbar .user .av{width:32px;height:32px;border-radius:50%;background:var(--primary-soft);color:var(--primary-d);display:flex;align-items:center;justify-content:center;font-weight:700}
.usermenu{position:absolute;top:54px;right:24px;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 6px 24px rgba(40,55,110,.12);display:none;min-width:150px;overflow:hidden}
.usermenu.show{display:block}
.usermenu a{display:block;padding:10px 14px;font-size:13px}
.usermenu a:hover{background:#f7f8fc}
.content{padding:24px 28px;max-width:1200px}
.page-head{margin-bottom:18px}
.page-head h1{font-size:20px;margin:2px 0 0;font-weight:700}
.crumb{font-size:12px;color:var(--muted)}
.crumb b{color:var(--text);font-weight:600}

/* ---- card ---- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:0 1px 2px rgba(20,30,60,.04)}
.card-b{padding:18px}
.card-title{font-weight:700;font-size:15px;margin:0 0 14px}

/* ---- form controls ---- */
.filters{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.sel,.inp{height:38px;border:1px solid var(--line);border-radius:8px;padding:0 12px;background:#fff;color:var(--text);font-size:13px;outline:none}
.sel{padding-right:28px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath fill='%2398a0b3' d='M0 0l5 6 5-6z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;-webkit-appearance:none;appearance:none}
.sel:focus,.inp:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.inp.search{min-width:250px}
textarea.inp{height:auto;padding:10px 12px;width:100%}

/* ---- buttons ---- */
.btn{height:38px;padding:0 16px;border-radius:8px;border:1px solid transparent;font-size:13px;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-d)}
.btn-light{background:#fff;border-color:var(--line);color:var(--text)}.btn-light:hover{background:#f7f8fc}
.btn-danger{background:#fff;border-color:#f6c5d0;color:var(--danger)}.btn-danger:hover{background:#fff0f3}
.btn-sm{height:32px;padding:0 11px;font-size:12px}

/* ---- table ---- */
table.tbl{width:100%;border-collapse:collapse;font-size:13px}
.tbl th{background:#fafbff;color:#737b90;font-weight:600;text-align:left;padding:11px 12px;border-bottom:1px solid var(--line);white-space:nowrap}
.tbl td{padding:11px 12px;border-bottom:1px solid #f0f2f7}
.tbl tbody tr:hover{background:#fafbff}
.tbl .c{text-align:center;white-space:nowrap}
.tbl a.link{color:var(--primary-d);font-weight:600}
.tbl a.name{color:#1b2030;font-weight:600}
.tbl a.name:hover{text-decoration:underline}

/* ---- misc ---- */
.bdg{display:inline-block;padding:3px 9px;border-radius:20px;font-size:11px;font-weight:600}
.bdg.gray{background:#eef0f4;color:#737b90}.bdg.blue{background:var(--primary-soft);color:var(--primary-d)}
.bdg.green{background:#e3f7f2;color:#0e9b82}.bdg.amber{background:#fef4e2;color:#c98a12}
.pager{display:flex;gap:4px;justify-content:center;margin-top:18px}
.pager a{min-width:32px;height:32px;border:1px solid var(--line);border-radius:7px;display:flex;align-items:center;justify-content:center;color:#737b90;font-size:13px}
.pager a.on{background:var(--primary);color:#fff;border-color:var(--primary)}
.pager a:hover:not(.on){background:#f7f8fc}
.mt{margin-top:18px}
.spread{display:flex;justify-content:space-between;align-items:center}
.toolbar{display:flex;gap:8px;flex-wrap:wrap}
.count{font-size:13px;color:var(--muted)}.count b{color:var(--text)}
.fgrid{display:grid;grid-template-columns:110px 1fr 110px 1fr;gap:14px 16px;align-items:start}
.fgrid .fl{font-size:13px;color:#737b90;font-weight:600;padding-top:9px}
.fgrid .full{grid-column:2/5}
.fgrid .sel,.fgrid .inp{width:100%}
.req:after{content:'*';color:var(--danger);margin-left:3px}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:16px}
.tabs .t{padding:9px 14px;font-size:13px;font-weight:600;color:var(--muted);border-bottom:2px solid transparent;cursor:pointer}
.tabs .t.on{color:var(--primary-d);border-bottom-color:var(--primary)}
.ribbon{position:fixed;right:-44px;top:14px;transform:rotate(45deg);background:var(--warn);color:#5a3d00;font-size:11px;font-weight:700;padding:4px 50px;z-index:50;box-shadow:0 1px 4px rgba(0,0,0,.15)}
.toast-msg{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(20px);background:#2b3147;color:#fff;padding:11px 18px;border-radius:8px;font-size:13px;opacity:0;transition:.3s;z-index:100}
.toast-msg.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ---- login ---- */
.auth{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#e9edfe 0%,#f5f6fa 60%)}
.auth .box{width:382px;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 12px 44px rgba(40,55,110,.12);padding:36px 32px}
.auth .ttl{text-align:center;margin-bottom:24px}
.auth .ttl .logo{width:56px;height:56px;border-radius:15px;margin:0 auto 14px;background:linear-gradient(135deg,var(--primary),#7a90fb);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:22px}
.auth .ttl .logo-img{height:52px;width:auto;margin:0 auto 16px;display:block}
.auth .ttl h2{font-size:17px;margin:0}.auth .ttl p{font-size:12px;color:var(--muted);margin:7px 0 0}
.fld{margin-bottom:12px;position:relative}
.fld .inp{width:100%;height:44px}
.fld .eye{position:absolute;right:12px;top:12px;color:var(--muted);cursor:pointer}
.auth .btn-primary{width:100%;height:46px;justify-content:center;font-size:14px;margin-top:6px}
.auth .links{text-align:center;margin-top:16px;font-size:12px;color:var(--muted)}
.auth .links a:hover{color:var(--primary-d)}
.auth .links a{margin:0 7px}
.note{background:#f7f8fc;border:1px dashed var(--line);border-radius:8px;padding:11px 13px;font-size:12px;color:#737b90;margin-top:16px;line-height:1.65}
.hero{font-size:13px;color:#737b90;line-height:1.7}
.gp2{font-size:12px;font-weight:700;color:#737b90;margin:16px 0 8px}
.gp2:first-child{margin-top:0}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{display:inline-flex;align-items:center;gap:6px;padding:8px 13px;border-radius:8px;font-size:12.5px;border:1px solid var(--line)}
.chip.done{background:#fff;color:var(--primary-d);border-color:#cfd9fb}
.chip.done:hover{background:var(--primary-soft)}
.chip.done i{color:var(--ok)}
.chip.todo{background:#f7f8fc;color:var(--muted)}
@media(max-width:1024px){:root{--sidebar-w:200px}}
@media(max-width:560px){.sidebar{display:none}.main{margin-left:0}.fgrid{grid-template-columns:1fr 1fr}}
