:root{font-family:"Malgun Gothic","Segoe UI",sans-serif;color:#203a35;background:#f4f7f5;font-size:13px;
  --green:#13785b;--dark:#123e32;--line:#dce6e0;--muted:#71847b;--warn:#a5631d;--warnbg:#fff4e8;--err:#b3261e;--errbg:#fdeceb;--cost:#8a4b16;--costbg:#fbf1e8;--bill:#13785b;--billbg:#eaf5ef}
*{box-sizing:border-box}body{margin:0}
.app-header{height:68px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 28px;gap:18px}
.brand{font-weight:800;font-size:28px;display:flex;align-items:center;gap:14px;color:var(--green)}
.brand span{font-size:15px;color:#203a35}.brand small{display:block;font-size:9px;letter-spacing:2px;color:#6f847c;margin-top:4px}
.mode{font-size:11px;padding:5px 10px;border-radius:14px}.mode.test{background:var(--warnbg);color:var(--warn)}.mode.access{background:var(--billbg);color:var(--green)}
.who{margin-left:auto;display:flex;align-items:center;gap:8px}.role{font-size:11px;color:var(--muted)}
.version{border:1px solid var(--line);padding:5px 10px;border-radius:20px;color:#83958d;font-size:11px}
.page-tabs{display:flex;gap:4px;padding:0 28px;background:#fff;border-bottom:1px solid var(--line)}
.page-tabs a{padding:13px 16px;color:#58776a;text-decoration:none;font-weight:700;border-bottom:3px solid transparent}
.page-tabs a.active{color:var(--green);border-bottom-color:var(--green)}
main{padding:22px 28px 60px}
#status{margin:14px 28px 0;padding:11px 15px;border-radius:8px;background:#eaf3ed;line-height:1.7;display:none;white-space:pre-line}
#status.show{display:block}#status.error{background:var(--errbg);color:var(--err)}#status.warn{background:var(--warnbg);color:var(--warn)}
h1{font-size:22px;margin:0 0 6px}h2{font-size:15px;margin:0 0 10px}h3{font-size:13px;margin:16px 0 8px}
.muted{color:var(--muted);font-size:12px;line-height:1.7}.tiny{font-size:11px;line-height:1.7;color:var(--muted)}
input,select,textarea,button{font:inherit}
input,select,textarea{border:1px solid #cddbd2;border-radius:6px;padding:6px 8px;background:#fff;color:#203a35;min-width:0}
input:focus,select:focus,textarea:focus{outline:2px solid #9fd0b9;border-color:var(--green)}
textarea{width:100%}
button{border:1px solid #cddbd2;border-radius:7px;background:#fff;color:#355348;padding:8px 12px;cursor:pointer;font-size:12px;font-weight:700}
button:hover{background:#edf5f0}button:disabled{opacity:.45;cursor:default}
.primary{background:var(--green);border-color:var(--green);color:#fff}.primary:hover{background:#0a6047}
.danger{color:var(--err);border-color:#efc7c4}.link{border:0;background:none;padding:4px 6px;color:var(--muted)}
.split{display:grid;grid-template-columns:250px minmax(0,1fr);gap:18px;align-items:start}
.panel{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px}
.list{display:flex;flex-direction:column;gap:6px;max-height:calc(100vh - 230px);overflow:auto}
.list .item{border:1px solid var(--line);border-radius:9px;padding:10px 12px;cursor:pointer;background:#fff}
.list .item:hover{background:#f3f9f5}.list .item.active{border-color:var(--green);background:#f0f8f3}
.list .item b{display:block;font-size:13px}.list .item small{color:var(--muted);font-size:11px}
.badge{display:inline-block;font-size:10px;padding:2px 7px;border-radius:10px;font-weight:700;margin-left:4px}
.badge.draft{background:#eef1ee;color:#5b6f66}.badge.issued{background:var(--billbg);color:var(--green)}
.badge.expired{background:var(--errbg);color:var(--err)}.badge.archived{background:#eee;color:#888}
.title-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.form-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px 12px;margin:12px 0}
.form-grid label{display:flex;flex-direction:column;gap:4px;font-size:11px;font-weight:700;color:#58776a}
.form-grid .w2{grid-column:span 2}.form-grid .w3{grid-column:span 3}.form-grid .w6{grid-column:span 6}
.attach-section{margin:14px 0}.attach-section h2{margin-bottom:7px}
.file-drop{position:relative;border:2px dashed #a8c8b8;border-radius:11px;background:#f6fbf8;min-height:116px;padding:18px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:#58776a;transition:.15s}
.file-drop.dragging{border-color:var(--green);background:#e6f5ec;box-shadow:inset 0 0 0 2px #b9dec9}
.file-drop input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}
.file-drop button{position:relative;z-index:1;margin-top:3px}.file-drop span{font-size:11px;color:var(--muted)}
.attach-list{list-style:none;margin:8px 0 0;padding:0;border:1px solid var(--line);border-radius:9px;overflow:hidden}
.attach-list li{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid #edf2ee}
.attach-list li:last-child{border-bottom:0}.attach-list b,.attach-list small{display:block}.attach-list small{color:var(--muted);margin-top:2px}
.stats{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin:14px 0}
.stats>div{background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.stats span{display:block;color:#82918a;font-size:11px;margin-bottom:8px}.stats b{font-size:19px;letter-spacing:-.5px}
.stats small{display:block;color:var(--muted);font-size:10px;margin-top:4px}
.stats .s-cost{background:var(--costbg);border-color:#efd9c4}.stats .s-cost b{color:var(--cost)}
.stats .s-bill{background:var(--billbg);border-color:#c5e3d2}.stats .s-bill b{color:var(--green)}
.stats .grand{background:var(--dark);color:#fff;border-color:var(--dark)}.stats .grand span,.stats .grand small{color:#a9c8b8}
.neg{color:var(--err)!important}
.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:10px;background:#fff}
table.grid{border-collapse:collapse;width:100%;min-width:1060px}
.grid th{background:#f3f7f4;font-size:11px;color:#58776a;text-align:left;padding:8px 6px;border-bottom:1px solid var(--line);white-space:nowrap;position:sticky;top:0}
.grid td{padding:5px 6px;border-bottom:1px solid #edf2ee;vertical-align:middle}
.grid td.num,.grid th.num{text-align:right;white-space:nowrap}
.grid input,.grid select{width:100%;padding:5px 6px;font-size:12px}
.grid input.n{text-align:right}
.grid .c-cost{background:#fdf8f3}.grid .c-bill{background:#f5fbf7}
.grid tr.detail td{background:#fafcfb;padding:10px 12px}
.grid tr.has-error>td:first-child{box-shadow:inset 3px 0 var(--err)}.grid tr.has-warn>td:first-child{box-shadow:inset 3px 0 #e2a24b}
.state{font-size:11px;font-weight:700;white-space:nowrap;cursor:pointer}.state.ok{color:var(--green)}.state.err{color:var(--err)}.state.warn{color:var(--warn)}
.detail-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px 14px}
.detail-grid label{display:flex;flex-direction:column;gap:3px;font-size:11px;font-weight:700;color:#58776a}
.msgs{margin:6px 0 0;padding-left:18px;font-size:11px;line-height:1.7}.msgs .e{color:var(--err)}.msgs .w{color:var(--warn)}.msgs .i{color:var(--muted)}
.costinfo{font-size:11px;color:var(--muted);margin-top:3px;line-height:1.5}
.blockers{border:1px solid #efc7c4;background:var(--errbg);color:var(--err);border-radius:9px;padding:10px 14px;margin:12px 0;font-size:12px}
.blockers ul{margin:6px 0 0;padding-left:18px;line-height:1.7}
.ok-box{border:1px solid #c5e3d2;background:var(--billbg);color:var(--green);border-radius:9px;padding:10px 14px;margin:12px 0;font-size:12px;font-weight:700}
.empty{padding:40px;text-align:center;color:var(--muted)}
.setup{border:1px dashed var(--warn);background:var(--warnbg);color:var(--warn);border-radius:10px;padding:14px;margin-bottom:14px;line-height:1.7}
dialog{border:1px solid var(--line);border-radius:12px;padding:20px;max-width:720px;width:92vw}
dialog::backdrop{background:rgba(18,62,50,.35)}
.roles label{margin-right:12px;font-size:12px}

/* ---------- 인쇄 ---------- */
#print{display:none}
@media print{
  @page{size:A4;margin:12mm}
  body>*:not(#print){display:none!important}
  #print{display:block}
  :root,body{background:#fff;font-size:10.5pt}
}
.doc{color:#111;font-family:"Malgun Gothic",sans-serif}
.doc .doc-title{text-align:center;font-size:20pt;font-weight:800;letter-spacing:6px;border-bottom:3px solid #1f3864;padding-bottom:6px;color:#1f3864}
.doc .doc-co{text-align:center;font-size:8.5pt;color:#555;margin:6px 0 12px}
.doc .doc-meta{display:grid;grid-template-columns:1fr 1fr;gap:2px 18px;font-size:9.5pt;margin-bottom:10px}
.doc .doc-meta div{display:flex;justify-content:space-between;border-bottom:1px solid #e5e5e5;padding:3px 0}
.doc .doc-meta span{color:#666}
.doc table{width:100%;border-collapse:collapse;font-size:9.5pt}
.doc th{background:#eef2f8;border:1px solid #c9d1de;padding:5px;text-align:center}
.doc td{border:1px solid #c9d1de;padding:5px}.doc td.r{text-align:right}.doc td.c{text-align:center}
.doc .doc-tot{text-align:right;margin-top:8px;font-size:10pt;line-height:1.8}
.doc .doc-tot b.g{font-size:13pt;color:#1f3864}
.doc .doc-note{font-size:8.5pt;color:#555;border-top:1px solid #ddd;margin-top:12px;padding-top:8px;line-height:1.7;white-space:pre-line}
.doc .doc-foot{font-size:8pt;color:#888;margin-top:10px;text-align:right}
.doc .draft-mark{border:2px solid #b3261e;color:#b3261e;display:inline-block;padding:2px 10px;font-weight:800;margin-bottom:6px}
.doc .internal-mark{border:2px solid #8a4b16;color:#8a4b16;display:inline-block;padding:2px 10px;font-weight:800;margin-bottom:6px}
@media(max-width:1000px){.split{grid-template-columns:1fr}.form-grid{grid-template-columns:repeat(2,1fr)}.stats{grid-template-columns:repeat(2,1fr)}.form-grid .w3,.form-grid .w6{grid-column:span 2}}
/* 인라인 style 대신 사용하는 보조 클래스 (CSP style-src 'self' 호환) */
table.grid.compact{min-width:0}.panel.narrow{max-width:980px}.title-row.sec{margin:10px 0}
input.cb{width:auto}.mt6{margin-top:6px}.ackline{display:block;margin-top:8px;font-size:12px}.nowrap{white-space:nowrap}
.grid td.w215{min-width:215px}.grid td.w105{min-width:105px}.grid td.w108{min-width:108px}.grid td.w76{min-width:76px}.grid td.w84{min-width:84px}.grid td.w80{min-width:80px}
