:root {
  --bg:#f3f6fa; --s1:#ffffff; --s2:#f7f9fc; --s3:#eef3f8;
  --b1:#d7e0ea; --b2:#b8c7da;
  --acc:#005bac; --acc2:#003a70; --grn:#1f8c5a; --ylw:#c2852e;
  --red:#cf4b43; --cyn:#2b87b8; --prp:#6c7ea4;
  --txt:#18283c; --dim:#52657d; --muted:#7d8ea3;
  --radius:12px;
  --shadow:0 16px 36px rgba(17, 44, 79, .08);
}
*{margin:0;padding:0;box-sizing:border-box;}
body{background:
  linear-gradient(180deg, rgba(0,91,172,.08), transparent 180px),
  linear-gradient(135deg, #f8fbfe, #eef3f8 60%, #f7f9fc);
color:var(--txt);font-family:'Noto Sans KR',sans-serif;font-size:13px;min-height:100vh;}

.hdr{background:linear-gradient(90deg,#ffffff,#f5f8fc 55%, #edf3fa);border-bottom:1px solid var(--b1);padding:16px 28px;display:flex;align-items:center;gap:14px;position:sticky;top:0;z-index:200;box-shadow:0 6px 18px rgba(18,41,72,.06);}
.hdr::before{content:'';position:absolute;left:0;top:0;bottom:0;width:6px;background:linear-gradient(180deg,var(--acc),var(--acc2));}
.hdr-ico{width:42px;height:42px;background:linear-gradient(145deg,var(--acc),var(--acc2));border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;box-shadow:0 12px 20px rgba(0,91,172,.18);color:#fff;}
.hdr h1{font-size:18px;font-weight:800;letter-spacing:-.4px;font-family:'Titillium Web','Noto Sans KR',sans-serif;}
.hdr .sub{font-size:10px;color:var(--muted);margin-top:1px;}
.hdr-right{margin-left:auto;display:flex;gap:8px;align-items:center;}
.saved-badge{font-size:10px;color:var(--grn);font-family:'JetBrains Mono',monospace;opacity:0;transition:opacity .3s;}
.export-btn{background:#fff;border:1px solid var(--b2);border-radius:999px;padding:7px 15px;font-size:11px;font-weight:700;color:var(--dim);cursor:pointer;font-family:'Noto Sans KR',sans-serif;transition:all .2s;box-shadow:0 4px 10px rgba(18,41,72,.04);}
.export-btn:hover{border-color:var(--acc);color:var(--acc);}
.undo-btn,.redo-btn{background:#fff;border:1px solid var(--b2);border-radius:999px;padding:7px 12px;font-size:11px;font-weight:700;color:var(--dim);cursor:pointer;font-family:'Noto Sans KR',sans-serif;transition:all .2s;}
.undo-btn:hover:not(:disabled),.redo-btn:hover:not(:disabled){border-color:var(--acc2);color:var(--acc2);background:#f5f9ff;}
.undo-btn:disabled,.redo-btn:disabled{opacity:.3;cursor:not-allowed;}

/* ── 관리자 모드 ── */
.admin-only{display:none!important;}
body.is-admin .admin-only{display:inline-flex!important;}
.admin-badge{font-size:10px;color:var(--acc2);font-family:'JetBrains Mono',monospace;background:rgba(0,91,172,.08);border:1px solid rgba(0,91,172,.18);border-radius:999px;padding:4px 9px;align-items:center;}
.admin-btn{background:#fff;border:1px solid var(--b2);border-radius:999px;padding:7px 11px;font-size:13px;color:var(--muted);cursor:pointer;transition:all .2s;}
.admin-btn:hover{border-color:var(--ylw);color:var(--ylw);}
.admin-btn.on{border-color:var(--acc);color:var(--acc);background:rgba(0,91,172,.08);}
.github-btn{background:linear-gradient(135deg,var(--acc),var(--acc2));border:1px solid rgba(0,58,112,.15);border-radius:999px;padding:7px 15px;font-size:11px;font-weight:700;color:#fff;cursor:pointer;font-family:'Noto Sans KR',sans-serif;transition:all .2s;box-shadow:0 12px 20px rgba(0,91,172,.16);}
.github-btn:hover{filter:brightness(1.03);transform:translateY(-1px);}
.github-btn:disabled{opacity:.5;cursor:not-allowed;}
.admin-modal-box{background:#fff;border:1px solid var(--b1);border-radius:18px;padding:28px;width:360px;max-width:90vw;box-shadow:var(--shadow);}
.admin-modal-box h3{font-size:15px;font-weight:700;margin-bottom:18px;}
.admin-modal-box input{width:100%;background:var(--s2);border:1px solid var(--b2);border-radius:10px;padding:10px 12px;font-size:13px;color:var(--txt);font-family:'Noto Sans KR',sans-serif;margin-bottom:12px;}
.admin-modal-box input:focus{outline:none;border-color:var(--acc);}
.admin-modal-box .row{display:flex;gap:8px;justify-content:flex-end;}
.admin-modal-box .btn-ok{background:linear-gradient(135deg,var(--acc),var(--acc2));border:none;border-radius:10px;padding:9px 20px;font-size:13px;font-weight:700;color:#fff;cursor:pointer;}
.admin-modal-box .btn-cancel{background:#fff;border:1px solid var(--b2);border-radius:10px;padding:9px 16px;font-size:13px;color:var(--dim);cursor:pointer;}
.admin-modal-box .btn-logout{background:#fff;border:1px solid rgba(207,75,67,.28);border-radius:10px;padding:9px 16px;font-size:13px;color:var(--red);cursor:pointer;}
.admin-modal-box .hint{font-size:11px;color:var(--muted);margin-bottom:14px;line-height:1.5;}
.admin-modal-box .token-val{font-size:10px;color:var(--acc2);font-family:'JetBrains Mono',monospace;word-break:break-all;background:var(--s2);border-radius:8px;padding:6px 10px;margin-bottom:12px;}

.nav{display:flex;padding:0 28px;background:rgba(255,255,255,.88);border-bottom:1px solid var(--b1);overflow-x:auto;gap:8px;backdrop-filter:blur(10px);}
.nav-tab{padding:13px 18px;font-size:12px;font-weight:700;color:var(--muted);cursor:pointer;border-bottom:3px solid transparent;white-space:nowrap;transition:all .2s;letter-spacing:.1px;}
.nav-tab:hover{color:var(--acc2);}
.nav-tab.active{color:var(--acc);border-bottom-color:var(--acc);background:linear-gradient(180deg, rgba(0,91,172,.06), rgba(0,91,172,0));}

.wrap{padding:24px 28px;max-width:1440px;}
.page{display:none;animation:fi .25s ease;}
.page.active{display:block;}
@keyframes fi{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}

.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:10px;margin-bottom:18px;}
.kpi{background:linear-gradient(180deg,#ffffff,#f9fbfe);border:1px solid var(--b1);border-radius:var(--radius);padding:16px;position:relative;overflow:hidden;transition:transform .2s,border-color .2s,box-shadow .2s;box-shadow:var(--shadow);}
.kpi:hover{transform:translateY(-2px);border-color:var(--b2);box-shadow:0 18px 32px rgba(18,41,72,.1);}
.kpi::before{content:'';position:absolute;top:0;left:0;bottom:0;width:5px;}
.kpi.blue::before{background:linear-gradient(180deg,var(--acc),var(--acc2));}
.kpi.green::before{background:linear-gradient(180deg,var(--grn),#1f6f4c);}
.kpi.yellow::before{background:linear-gradient(180deg,var(--ylw),#a87026);}
.kpi.red::before{background:linear-gradient(180deg,var(--red),#ab3d38);}
.kpi.cyan::before{background:linear-gradient(180deg,var(--cyn),var(--acc));}
.kpi-lbl{font-size:9px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;}
.kpi-val{font-size:26px;font-weight:800;font-family:'Titillium Web','JetBrains Mono',monospace;letter-spacing:-.8px;}
.kpi.blue .kpi-val{color:var(--acc);}
.kpi.green .kpi-val{color:var(--grn);}
.kpi.yellow .kpi-val{color:var(--ylw);}
.kpi.red .kpi-val{color:var(--red);}
.kpi.cyan .kpi-val{color:var(--cyn);}
.kpi-sub{font-size:10px;color:var(--muted);margin-top:3px;}

.card{background:linear-gradient(180deg,#ffffff,#f9fbfd);border:1px solid var(--b1);border-radius:var(--radius);overflow:hidden;margin-bottom:18px;box-shadow:var(--shadow);}
.card-hdr{padding:14px 18px;border-bottom:1px solid var(--b1);display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;background:linear-gradient(180deg,#ffffff,#f4f8fc);}
.card-title{font-size:12px;font-weight:700;color:var(--txt);}
.card-body{padding:16px;}

.g2{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
@media(max-width:860px){.g2{grid-template-columns:1fr;}}

.tbl-wrap{overflow-x:auto;}
table{width:100%;border-collapse:collapse;}
th{font-size:10px;font-weight:700;color:#5d7088;text-transform:uppercase;letter-spacing:.4px;padding:10px 10px;text-align:left;border-bottom:1px solid var(--b1);background:#f1f5f9;white-space:nowrap;}
td{padding:9px 10px;font-size:12px;border-bottom:1px solid #e8eef5;color:var(--dim);vertical-align:middle;background:rgba(255,255,255,.72);}
tr:last-child td{border-bottom:none;}
tr:hover td{background:#f5f9fd;}
td.nc{font-weight:700;color:var(--txt);}

.editable{cursor:pointer;border-radius:5px;padding:2px 5px;transition:background .15s;position:relative;display:inline-block;min-width:20px;}
.editable:hover{background:#edf4fb;}
.cell-input{background:#fff;border:1.5px solid var(--acc);border-radius:7px;color:var(--txt);font-family:'Noto Sans KR',sans-serif;font-size:12px;padding:4px 7px;width:100%;min-width:60px;max-width:180px;outline:none;box-shadow:0 0 0 4px rgba(0,91,172,.08);}

.tag{display:inline-block;padding:2px 7px;border-radius:20px;font-size:10px;font-weight:600;font-family:'JetBrains Mono',monospace;white-space:nowrap;}
.t-blue{background:rgba(0,91,172,.10);color:var(--acc);}
.t-green{background:rgba(31,140,90,.11);color:var(--grn);}
.t-yellow{background:rgba(194,133,46,.12);color:var(--ylw);}
.t-red{background:rgba(207,75,67,.11);color:var(--red);}
.t-cyan{background:rgba(43,135,184,.12);color:var(--cyn);}
.t-gray{background:#edf2f7;color:var(--muted);}

.bar-row{display:flex;align-items:center;gap:8px;margin-bottom:7px;}
.bar-lbl{width:52px;font-size:11px;font-weight:600;color:var(--txt);flex-shrink:0;text-align:right;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.bar-track{flex:1;background:#eef3f8;border-radius:999px;height:19px;overflow:hidden;}
.bar-fill{height:100%;border-radius:4px;display:flex;align-items:center;padding-left:7px;font-size:10px;font-weight:700;font-family:'JetBrains Mono',monospace;color:white;min-width:2px;transition:width .6s cubic-bezier(.16,1,.3,1);}
.bar-val{width:32px;font-size:10px;font-family:'JetBrains Mono',monospace;color:var(--dim);text-align:right;flex-shrink:0;}

.hm-wrap{overflow-x:auto;padding-bottom:4px;}
.hm-date-lbl{width:18px;font-size:7px;color:var(--muted);text-align:center;font-family:'JetBrains Mono',monospace;writing-mode:vertical-rl;transform:rotate(180deg);height:34px;overflow:hidden;}
.hm-name-cell{width:60px;font-size:11px;font-weight:600;color:var(--txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:0;}
.hm-cell{width:18px;height:18px;border-radius:3px;font-size:8px;display:flex;align-items:center;justify-content:center;font-weight:700;cursor:pointer;transition:transform .1s,filter .1s;flex-shrink:0;}
.hm-cell:hover{transform:scale(1.45);z-index:20;position:relative;filter:brightness(1.35);}
.hm-off{background:#e8eef5;}
.hm-full{background:var(--acc);color:white;}
.hm-half{background:var(--cyn);color:white;}

.month-tabs{display:flex;gap:6px;flex-wrap:wrap;}
.month-btn{background:#fff;border:1px solid var(--b1);border-radius:999px;padding:7px 13px;font-size:11px;color:var(--muted);cursor:pointer;font-family:'Noto Sans KR',sans-serif;transition:all .2s;box-shadow:0 4px 8px rgba(18,41,72,.04);}
.month-btn:hover{border-color:var(--b2);color:var(--acc2);}
.month-btn.active{background:linear-gradient(135deg,rgba(0,91,172,.12),rgba(0,58,112,.08));border-color:var(--acc);color:var(--acc);font-weight:700;}

.pg{display:grid;grid-template-columns:repeat(auto-fill,minmax(205px,1fr));gap:10px;}
.pc{background:linear-gradient(180deg,#ffffff,#f7fafc);border:1px solid var(--b1);border-radius:var(--radius);padding:14px;transition:border-color .2s, transform .2s;box-shadow:var(--shadow);}
.pc:hover{border-color:var(--b2);}
.pc-name{font-size:14px;font-weight:700;margin-bottom:10px;display:flex;align-items:center;gap:4px;}
.pc-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin-bottom:8px;}
.pc-sv{font-size:16px;font-weight:900;font-family:'JetBrains Mono',monospace;text-align:center;line-height:1.2;}
.pc-sl{font-size:8px;color:var(--muted);text-align:center;margin-top:1px;}
.pc-note{font-size:10px;color:var(--muted);background:var(--s1);border-radius:6px;padding:5px 7px;line-height:1.5;word-break:keep-all;}

.trend-chart{display:flex;align-items:flex-end;gap:5px;height:100px;}
.trend-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;}
.trend-bar{width:100%;border-radius:3px 3px 0 0;min-height:2px;transition:height .5s;}
.trend-lbl{font-size:8px;color:var(--muted);font-family:'JetBrains Mono',monospace;}

/* MODAL */
.modal-bg{position:fixed;inset:0;background:rgba(17,41,72,.26);z-index:500;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(8px);animation:fi .2s ease;}
.modal{background:#fff;border:1px solid var(--b2);border-radius:18px;padding:24px;width:380px;max-width:95vw;box-shadow:0 24px 54px rgba(17,41,72,.18);}
.modal h3{font-size:15px;font-weight:700;margin-bottom:18px;}
.modal label{font-size:11px;color:var(--muted);display:block;margin-bottom:4px;margin-top:12px;}
.modal input{width:100%;background:var(--s2);border:1px solid var(--b2);border-radius:10px;padding:8px 12px;color:var(--txt);font-family:'Noto Sans KR',sans-serif;font-size:13px;outline:none;}
.modal input:focus{border-color:var(--acc);}
.modal-btns{display:flex;gap:8px;margin-top:20px;justify-content:flex-end;}
.btn{border:none;border-radius:999px;padding:8px 16px;font-size:12px;font-weight:700;cursor:pointer;font-family:'Noto Sans KR',sans-serif;transition:opacity .2s, transform .2s;}
.btn:hover{opacity:.85;}
.btn-primary{background:linear-gradient(135deg,var(--acc),var(--acc2));color:white;box-shadow:0 14px 24px rgba(0,91,172,.18);}
.btn-danger{background:linear-gradient(135deg,var(--red),#bf5e4b);color:white;}
.btn-ghost{background:#fff;border:1px solid var(--b2);color:var(--dim);}
.btn-add{background:#fff;border:1px solid rgba(0,91,172,.26);border-radius:999px;padding:6px 13px;font-size:11px;font-weight:700;color:var(--acc);cursor:pointer;font-family:'Noto Sans KR',sans-serif;transition:all .2s;box-shadow:0 5px 12px rgba(18,41,72,.04);}
.btn-add:hover{background:#eef5fc;}
.btn-del{background:#fff;border:1px solid rgba(207,75,67,.24);border-radius:999px;padding:4px 8px;font-size:10px;font-weight:700;color:var(--red);cursor:pointer;font-family:'Noto Sans KR',sans-serif;transition:all .2s;}
.btn-del:hover{background:#fff4f3;}

.toast{position:fixed;bottom:22px;right:22px;background:#fff;border:1px solid var(--b2);border-radius:14px;padding:10px 16px;font-size:12px;color:var(--txt);z-index:999;box-shadow:0 18px 34px rgba(17,41,72,.16);animation:fi .3s ease;display:none;}

.hm-exempt-row { opacity: 0.42; }
.hm-exempt-name { color: var(--muted) !important; text-decoration: line-through; }
.hm-cell-exempt { background: repeating-linear-gradient(45deg,#edf2f7,#edf2f7 3px,#d8e1eb 3px,#d8e1eb 6px) !important; cursor: not-allowed !important; }
.exempt-badge { display:inline-flex;align-items:center;gap:4px;background:rgba(194,133,46,.12);border:1px solid rgba(194,133,46,.28);border-radius:20px;padding:2px 8px;font-size:10px;font-weight:600;color:var(--ylw); }
.exempt-badge-on { background:rgba(31,140,90,.12);border-color:rgba(31,140,90,.3);color:var(--grn); }
.toggle-exempt { background:#fff;border:1px solid rgba(194,133,46,.28);border-radius:999px;padding:4px 10px;font-size:10px;font-weight:700;color:var(--ylw);cursor:pointer;font-family:'Noto Sans KR',sans-serif;transition:all .2s;white-space:nowrap; }
.toggle-exempt:hover { background:#fff7ed; }
.toggle-exempt.active { background:#edf8f2;border-color:rgba(31,140,90,.28);color:var(--grn); }
tr.exempt-tr td { color: var(--muted) !important; }
tr.exempt-tr td.nc { color: var(--muted) !important; text-decoration: line-through; }

/* EXPORT CARDS */
.exp-card{background:#fff;border:1px solid var(--b2);border-radius:14px;padding:14px 8px;cursor:pointer;font-family:'Noto Sans KR',sans-serif;transition:all .2s;text-align:center;display:flex;flex-direction:column;align-items:center;gap:4px;box-shadow:0 8px 16px rgba(17,41,72,.05);}
.exp-card:hover{border-color:var(--acc);background:#f7fbff;transform:translateY(-2px);}
.exp-icon{font-size:13px;font-weight:900;font-family:'JetBrains Mono',monospace;color:var(--acc);background:rgba(0,91,172,.1);border-radius:8px;padding:4px 8px;min-width:44px;}
.exp-label{font-size:12px;font-weight:700;color:var(--txt);}
.exp-sub{font-size:9px;color:var(--muted);}

::-webkit-scrollbar{width:5px;height:5px;}
::-webkit-scrollbar-track{background:#eef3f8;}
::-webkit-scrollbar-thumb{background:#c5d2e0;border-radius:3px;}
