:root { --fg:#1a2233; --muted:#5b6578; --bg:#f4f6fa; --card:#fff; --line:#dde2ec; --brand:#14284b; --accent:#c8202f; --ok:#1c7c4d; --warn:#8a5a00; }
@media (prefers-color-scheme: dark) {
  :root { --fg:#e6e9f0; --muted:#9aa4b8; --bg:#0f141f; --card:#181f2d; --line:#2a3447; --brand:#0b1730; }
}
* { box-sizing: border-box; }
html { font-size: 15px; }
body { margin:0; background:var(--bg); color:var(--fg); font-family:-apple-system,"Apple SD Gothic Neo","Noto Sans KR","Malgun Gothic",system-ui,sans-serif; line-height:1.5; }
.top { background:var(--brand); color:#fff; display:flex; flex-wrap:wrap; gap:.5rem 1.5rem; align-items:center; justify-content:space-between; padding:.7rem 1rem; }
.top a { color:#fff; text-decoration:none; } .brand { font-weight:700; }
.top nav { display:flex; flex-wrap:wrap; gap:.5rem 1rem; align-items:center; }
.who { opacity:.8; margin-right:.5rem; }
main { max-width:1200px; margin:0 auto; padding:1rem; }
.card { background:var(--card); border:1px solid var(--line); border-radius:8px; padding:1rem 1.25rem; margin-bottom:1rem; }
.narrow { max-width:520px; margin-left:auto; margin-right:auto; }
h1 { font-size:1.35rem; margin:.2rem 0 .8rem; } h1 small { color:var(--muted); font-weight:400; font-size:.8em; } h2 { font-size:1.1rem; }
label { display:block; margin:.6rem 0; font-size:.9rem; color:var(--muted); }
input, select { display:block; width:100%; margin-top:.2rem; padding:.5rem .6rem; border:1px solid var(--line); border-radius:6px; background:var(--card); color:var(--fg); font:inherit; }
input[type=checkbox] { display:inline; width:auto; margin:0 .3rem 0 0; }
button, .button { display:inline-block; padding:.5rem 1rem; border:0; border-radius:6px; background:var(--brand); color:#fff; font:inherit; cursor:pointer; text-decoration:none; }
button:hover, .button:hover { filter:brightness(1.15); }
.button.secondary { background:transparent; color:var(--fg); border:1px solid var(--line); }
button.link { background:none; color:#fff; padding:0; text-decoration:underline; }
.card button.link { color:var(--brand); }
button.small { padding:.2rem .5rem; font-size:.8rem; }
form.inline { display:inline-flex; gap:.3rem; align-items:center; margin:0; }
form.inline select { width:auto; margin:0; padding:.2rem .3rem; }
.filters { display:grid; grid-template-columns:repeat(auto-fit,minmax(170px,1fr)); gap:.4rem .8rem; align-items:end; }
.filters fieldset { border:1px solid var(--line); border-radius:6px; margin:.6rem 0; padding:.3rem .6rem; }
.filters legend { font-size:.8rem; color:var(--muted); } .chk { display:inline-block; margin:.2rem .6rem .2rem 0; color:var(--fg); }
.table-wrap { overflow-x:auto; }
table { width:100%; border-collapse:collapse; font-size:.9rem; }
th, td { text-align:left; padding:.5rem .6rem; border-bottom:1px solid var(--line); vertical-align:top; }
th { color:var(--muted); font-weight:600; white-space:nowrap; } td.num, th.num { text-align:right; white-space:nowrap; }
td a { color:inherit; font-weight:600; } .sub { color:var(--muted); font-size:.8rem; } td.actions { white-space:nowrap; }
.badge { display:inline-block; padding:.05rem .45rem; border-radius:999px; font-size:.75rem; font-weight:600; white-space:nowrap; background:var(--line); }
.k-bid { background:#dbe7ff; color:#12326b; } .k-prespec { background:#e4f3e8; color:#14532d; } .k-plan { background:#fff0d6; color:#7a4a00; } .k-proposal_mas { background:#fbe0e3; color:#7f1220; }
.error { background:#fde8ea; color:#8a1220; border:1px solid #f3b8be; padding:.5rem .7rem; border-radius:6px; }
.warn { color:var(--warn); } .hint { color:var(--muted); font-size:.85rem; } .empty { color:var(--muted); }
.qr { max-width:240px; margin:.5rem 0; background:#fff; padding:.4rem; border-radius:6px; } .qr svg { width:100%; height:auto; display:block; }
.codes { list-style:none; columns:2; padding:0; font-size:1.05rem; } .codes li { margin:.3rem 0; }
.secret code { font-size:1.3rem; user-select:all; }
dl.meta { display:grid; grid-template-columns:max-content 1fr; gap:.3rem 1rem; } dl.meta dt { color:var(--muted); } dl.meta dd { margin:0; }
pre.raw { background:var(--bg); border:1px solid var(--line); padding:.7rem; border-radius:6px; overflow:auto; max-height:60vh; font-size:.8rem; }
code { background:var(--bg); padding:0 .25rem; border-radius:3px; }
.pager { text-align:right; }

.badge.p1 { background:#14284b; color:#fff; } .badge.p2 { background:#4f6fa8; color:#fff; } .badge.p3 { background:#c9d3e6; color:#14284b; }
.badge.opp { background:#ffe3b8; color:#7a3d00; border:1px solid #f2b66b; }
.badge.biz-servc { background:#e9defa; color:#43237a; } .badge.biz-cnstwk { background:#d9efe6; color:#13553a; }
.chip { display:inline-block; padding:0 .4rem; margin:.1rem .2rem .1rem 0; border-radius:4px; background:var(--bg); border:1px solid var(--line); font-size:.75rem; }
@media (prefers-color-scheme: dark) { .badge.opp { background:#4a3112; color:#ffd9a0; border-color:#7a5a24; } .badge.p3 { background:#2b3a55; color:#dbe5f7; } }

.badge.infer { background:#fff3cd; color:#664d03; border:1px solid #e6cf75; }
.stages { white-space:nowrap; } .stages .arrow { color:var(--muted); margin:0 .15rem; }
.stage { display:inline-block; padding:.15rem .5rem; border-radius:6px; font-size:.8rem; border:1px solid var(--line); text-decoration:none; color:var(--fg); }
.stage b { font-weight:700; } .stage.on { background:var(--card); border-color:#7d93bd; } .stage.on:hover { background:var(--bg); }
.stage.on.s-plan { border-left:4px solid #e0a43b; } .stage.on.s-prespec { border-left:4px solid #4caf72; } .stage.on.s-bid { border-left:4px solid #3f72d6; }
.stage.miss { border-style:dashed; color:var(--muted); } .stage.off { color:var(--muted); background:transparent; border-style:dotted; }
.stage .d { color:var(--muted); } .stage .st { font-weight:600; } .rev { color:#a15c00; font-weight:600; }
tr.latest { background:var(--bg); } ul.links { padding-left:1.1rem; } ul.links li { margin:.25rem 0; }
h3.sub { margin:.8rem 0 .3rem; font-size:.95rem; }

.badge.fit-no { background:#f8d7da; color:#842029; border:1px solid #e6a5ac; }
.badge.fit-review { background:#fff3cd; color:#664d03; border:1px solid #e6cf75; }
.fold { background:var(--bg); border:1px dashed var(--line); padding:.5rem .8rem; border-radius:6px; }
@media (prefers-color-scheme: dark) { .badge.fit-no { background:#4a1d22; color:#f6c0c6; border-color:#7a3a41; } .badge.fit-review, .badge.infer { background:#4a3d12; color:#f2e2a1; border-color:#7a6a24; } }

/* 사업 목록: 제목 2줄 말줄임, 기관 한 줄, 진행 단계 세로, 마감 */
table.plist td { vertical-align:top; }
td.c-title { min-width:15rem; max-width:30rem; }
a.ttl { display:-webkit-box; -webkit-line-clamp:2; line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; text-overflow:ellipsis; word-break:keep-all; overflow-wrap:anywhere; line-height:1.35; font-weight:600; color:inherit; text-decoration:none; }
a.ttl:hover { text-decoration:underline; }
.orgline { display:flex; align-items:center; gap:.4rem; min-width:0; margin-top:.15rem; }
.orgline .org { flex:1 1 auto; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:var(--muted); font-size:.8rem; }
.orgline .badge { flex:none; }
.badge.small { font-size:.68rem; padding:0 .35rem; }
.item { display:inline-block; margin:0 .25rem .15rem 0; padding:0 .4rem; border-radius:4px; background:var(--bg); border:1px solid var(--line); font-size:.78rem; font-weight:600; }
.stages .sl { font-size:.8rem; line-height:1.5; white-space:nowrap; }
.stages .sl a, .stages .sl span { color:inherit; text-decoration:none; font-weight:400; }
.stages .sl a:hover { text-decoration:underline; }
.stages .sl .arr { display:inline-block; width:1.1em; color:var(--muted); }
.stages .sl b { font-weight:700; } .stages .sl .d { color:var(--muted); } .stages .sl .st { font-weight:600; }
.stages .sl.off, .stages .sl.miss { opacity:.4; }
td.c-dl { white-space:nowrap; font-size:.85rem; } td.c-dl .tag { color:var(--muted); font-size:.72rem; }
td.c-dl.past { opacity:.45; }
