@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;600;700&family=DM+Sans:wght@400;500;600;700&display=swap');

*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
:root{
  --p:#1a56db;--pl:#e8f0fe;--pd:#1240a8;
  --green:#16a34a;--danger:#dc2626;--warn:#f59e0b;
  --g50:#f8fafc;--g100:#f1f5f9;--g200:#e2e8f0;--g300:#cbd5e1;
  --g400:#94a3b8;--g500:#64748b;--g600:#475569;
  --g700:#334155;--g800:#1e293b;--g900:#0f172a;
  --sw:220px;--hh:58px;
  --fk:'Noto Sans KR',sans-serif;--fe:'DM Sans',sans-serif;
  --sh:0 1px 3px rgba(0,0,0,.06),0 1px 2px rgba(0,0,0,.04);
  --r:10px;--rs:6px;
}
body{font-family:var(--fk);background:var(--g50);color:var(--g800);font-size:14px}
a{text-decoration:none;color:inherit}

/* ── LAYOUT ── */
.app{display:flex;min-height:100vh}
.sidebar{width:var(--sw);background:var(--g900);display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;z-index:100;overflow-y:auto}
.main{margin-left:var(--sw);flex:1;display:flex;flex-direction:column;min-height:100vh}

/* ── SIDEBAR ── */
.s-logo{padding:18px 14px;border-bottom:1px solid rgba(255,255,255,.07);display:flex;align-items:center;gap:9px}
.s-logo-icon{width:32px;height:32px;background:var(--p);border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0}
.s-logo-text{font-family:var(--fe);font-size:14px;font-weight:700;color:#fff}
.s-logo-sub{font-size:10px;color:rgba(255,255,255,.4);margin-top:1px}
.s-sec{padding:14px 10px 4px}
.s-sec-label{font-size:9px;font-weight:600;color:rgba(255,255,255,.3);letter-spacing:.8px;text-transform:uppercase;padding:0 8px;margin-bottom:4px}
.nav-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:var(--rs);cursor:pointer;transition:background .15s;margin-bottom:1px}
.nav-item:hover{background:rgba(255,255,255,.07)}
.nav-item.active{background:var(--p)}
.nav-icon{font-size:14px;width:18px;text-align:center}
.nav-label{font-size:13px;font-weight:500;color:rgba(255,255,255,.7)}
.nav-item.active .nav-label{color:#fff}
.nav-badge{margin-left:auto;background:var(--danger);color:#fff;font-size:10px;font-weight:700;padding:1px 5px;border-radius:20px;font-family:var(--fe)}
.s-bottom{margin-top:auto;padding:12px 10px;border-top:1px solid rgba(255,255,255,.07)}
.s-user{display:flex;align-items:center;gap:9px;padding:7px 9px;border-radius:var(--rs);cursor:pointer}
.s-avatar{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;color:#fff;font-weight:700;flex-shrink:0}
.s-username{font-size:13px;font-weight:500;color:rgba(255,255,255,.8)}
.s-role{font-size:10px;color:rgba(255,255,255,.4);margin-top:1px}
.s-logout{font-size:11px;color:rgba(255,255,255,.3);margin-left:auto}

/* ── HEADER ── */
.header{height:var(--hh);background:#fff;border-bottom:1px solid var(--g200);display:flex;align-items:center;padding:0 24px;gap:14px;position:sticky;top:0;z-index:10}
.h-title{font-size:15px;font-weight:600;color:var(--g900)}
.h-right{margin-left:auto;display:flex;align-items:center;gap:10px}
.h-date{font-size:12px;color:var(--g400);font-family:var(--fe)}
.h-bell{position:relative;width:32px;height:32px;background:var(--g100);border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:14px}
.h-bell-dot{position:absolute;top:5px;right:5px;width:7px;height:7px;background:var(--danger);border-radius:50%;border:2px solid #fff}

/* ── CONTENT ── */
.content{padding:24px;flex:1}
.ph{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:20px}
.pt{font-size:20px;font-weight:700;color:var(--g900)}
.ps{font-size:13px;color:var(--g500);margin-top:3px}
.pa{display:flex;gap:8px;flex-shrink:0}

/* ── KPI ── */
.kgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:18px}
.kcard{background:#fff;border-radius:var(--r);padding:16px 18px;border:1px solid var(--g200);box-shadow:var(--sh)}
.kh{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px}
.kicon{width:36px;height:36px;border-radius:var(--rs);display:flex;align-items:center;justify-content:center;font-size:16px}
.kt{font-size:11px;font-weight:600;font-family:var(--fe)}
.kt.up{color:var(--green)}.kt.dn{color:var(--danger)}
.kv{font-size:24px;font-weight:700;color:var(--g900);font-family:var(--fe);letter-spacing:-.5px}
.kl{font-size:12px;color:var(--g500);margin-top:2px}

/* ── CARD ── */
.card{background:#fff;border-radius:var(--r);border:1px solid var(--g200);box-shadow:var(--sh);overflow:hidden}
.card-h{padding:13px 16px;border-bottom:1px solid var(--g100);display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.card-title{font-size:13px;font-weight:600;color:var(--g800)}
.card-action{font-size:12px;color:var(--p);cursor:pointer;font-weight:500}
.card-b{padding:16px}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:14px}
.g31{display:grid;grid-template-columns:2fr 1fr;gap:14px;margin-bottom:14px}
.mb14{margin-bottom:14px}

/* ── TABLE ── */
.tbl-wrap{overflow-x:auto}
.tbl{width:100%;border-collapse:collapse}
.tbl th{font-size:11px;font-weight:600;color:var(--g400);text-transform:uppercase;letter-spacing:.5px;padding:9px 12px;text-align:left;border-bottom:1px solid var(--g100);background:var(--g50);white-space:nowrap}
.tbl td{font-size:13px;color:var(--g700);padding:10px 12px;border-bottom:1px solid var(--g100);vertical-align:middle}
.tbl tr:last-child td{border-bottom:none}
.tbl tbody tr:hover td{background:var(--g50)}

/* ── BADGE ── */
.badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:600}
.bs{background:#dcfce7;color:#15803d}
.bw{background:#fef3c7;color:#b45309}
.bd{background:#fee2e2;color:#b91c1c}
.bi{background:#dbeafe;color:#1d4ed8}
.bg{background:var(--g100);color:var(--g600)}

/* ── BUTTONS ── */
.btn{padding:8px 16px;border-radius:var(--rs);font-size:13px;font-weight:600;border:none;cursor:pointer;font-family:var(--fk);display:inline-flex;align-items:center;gap:6px;transition:all .15s}
.btn-p{background:var(--p);color:#fff}.btn-p:hover{background:var(--pd)}
.btn-o{background:#fff;color:var(--g700);border:1.5px solid var(--g200)}.btn-o:hover{background:var(--g50)}
.sm{padding:3px 9px;font-size:11px;border-radius:4px;border:none;cursor:pointer;font-family:var(--fk);font-weight:600}
.sm-s{background:#dcfce7;color:#15803d}
.sm-d{background:#fee2e2;color:#b91c1c}
.sm-o{background:#fff7ed;color:#c2410c}
.sm-b{background:#dbeafe;color:#1d4ed8}
.sm-g{background:var(--g100);color:var(--g600)}

/* ── SEARCH ── */
.sbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.si{padding:7px 11px;border:1.5px solid var(--g200);border-radius:var(--rs);font-size:13px;font-family:var(--fk);color:var(--g800);outline:none}
.si:focus{border-color:var(--p)}
.ss{padding:7px 10px;border:1.5px solid var(--g200);border-radius:var(--rs);font-size:13px;font-family:var(--fk);color:var(--g700);background:#fff;outline:none;cursor:pointer}

/* ── BAR CHART ── */
.cb-wrap{display:flex;flex-direction:column;gap:9px}
.cb-row{display:flex;align-items:center;gap:10px}
.cb-label{font-size:12px;color:var(--g500);width:76px;flex-shrink:0}
.cb-bg{flex:1;height:7px;background:var(--g100);border-radius:4px;overflow:hidden}
.cb-fill{height:100%;border-radius:4px;background:var(--p)}
.cb-val{font-size:12px;font-weight:600;color:var(--g700);font-family:var(--fe);width:42px;text-align:right}

/* ── APPROVAL ── */
.ap-item{display:flex;align-items:flex-start;gap:11px;padding:11px 0;border-bottom:1px solid var(--g100)}
.ap-item:last-child{border-bottom:none}
.ap-av{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;color:#fff;flex-shrink:0}
.ap-name{font-size:13px;font-weight:600;color:var(--g800)}
.ap-sub{font-size:12px;color:var(--g400);margin-top:1px}
.ap-tag{font-size:12px;color:var(--g600);margin-top:3px;padding:2px 6px;background:var(--g50);border-radius:4px;display:inline-block}
.ap-right{margin-left:auto;display:flex;flex-direction:column;align-items:flex-end;gap:5px}
.ap-time{font-size:11px;color:var(--g400)}

/* ── ACTIVITY ── */
.ac-item{display:flex;gap:9px;margin-bottom:10px}
.ac-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;margin-top:5px}
.ac-text{font-size:13px;color:var(--g700)}
.ac-time{font-size:11px;color:var(--g400);font-family:var(--fe);margin-top:1px}

/* ── MODAL ── */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);display:none;align-items:center;justify-content:center;z-index:1000}
.modal{background:#fff;border-radius:var(--r);width:820px;max-width:95vw;max-height:85vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.2)}
.modal-h{padding:16px 20px;border-bottom:1px solid var(--g200);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;background:#fff;z-index:1}
.modal-title{font-size:14px;font-weight:700;color:var(--g900)}
.modal-close{font-size:18px;cursor:pointer;color:var(--g400);line-height:1}
.modal-close:hover{color:var(--g700)}
.modal-b{padding:20px}
.modal-f{padding:13px 20px;border-top:1px solid var(--g200);display:flex;justify-content:flex-end;gap:8px;position:sticky;bottom:0;background:#fff}

/* ── FORM ── */
.fg{display:grid;grid-template-columns:1fr 1fr;gap:13px}
.fg .c2{grid-column:span 2}
.fl{display:block;font-size:11px;font-weight:600;color:var(--g500);margin-bottom:5px;text-transform:uppercase;letter-spacing:.2px}
.fi{width:100%;padding:8px 11px;border:1.5px solid var(--g200);border-radius:var(--rs);font-size:13px;font-family:var(--fk);color:var(--g800);outline:none}
.fi:focus{border-color:var(--p)}
.fsel{width:100%;padding:8px 11px;border:1.5px solid var(--g200);border-radius:var(--rs);font-size:13px;font-family:var(--fk);color:var(--g800);background:#fff;outline:none}
.frow{margin-bottom:13px}
textarea.fi{resize:vertical}

/* ── TABS ── */
.tabs{display:flex;border-bottom:2px solid var(--g200);margin-bottom:16px}
.tab{padding:8px 16px;font-size:13px;font-weight:500;color:var(--g500);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .15s}
.tab.active{color:var(--p);border-bottom-color:var(--p);font-weight:600}
.tab-pane{display:none}.tab-pane.active{display:block}

/* ── PAGINATION ── */
.pgn{display:flex;align-items:center;justify-content:space-between;padding:11px 16px;border-top:1px solid var(--g100)}
.pgn-info{font-size:12px;color:var(--g400)}
.pgn-btns{display:flex;gap:3px}
.pgn-btn{width:27px;height:27px;border-radius:var(--rs);border:1px solid var(--g200);background:#fff;font-size:12px;color:var(--g600);cursor:pointer;display:flex;align-items:center;justify-content:center}
.pgn-btn.active{background:var(--p);color:#fff;border-color:var(--p)}

/* ── TOGGLE ── */
.setting-row{display:flex;align-items:center;justify-content:space-between;padding:11px 0;border-bottom:1px solid var(--g50)}
.setting-label{font-size:13px;font-weight:500;color:var(--g700)}
.setting-desc{font-size:12px;color:var(--g400);margin-top:2px}
.toggle{width:40px;height:21px;background:var(--g300);border-radius:11px;cursor:pointer;position:relative;transition:background .2s;flex-shrink:0}
.toggle.on{background:var(--p)}
.toggle::after{content:'';position:absolute;width:15px;height:15px;background:#fff;border-radius:50%;top:3px;left:3px;transition:left .2s;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.toggle.on::after{left:22px}

/* ── MISC ── */
.noticebox{background:var(--pl);border:1px solid #bfdbfe;border-radius:var(--rs);padding:11px 14px;font-size:13px;color:var(--p);margin-bottom:14px;display:flex;align-items:center;gap:7px}
.split{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.split.single{grid-template-columns:1fr}
.detail-panel{display:none}