/* 글꼴: Noto Sans KR 서브셋(NaraGothic, OFL) — 서버 자체 호스팅, static/fonts/README.md */
@font-face { font-family:"NaraGothic"; font-weight:400; font-style:normal; font-display:swap; src:url("/static/fonts/NaraGothic-400.woff2") format("woff2"); }
@font-face { font-family:"NaraGothic"; font-weight:500; font-style:normal; font-display:swap; src:url("/static/fonts/NaraGothic-500.woff2") format("woff2"); }
@font-face { font-family:"NaraGothic"; font-weight:700; font-style:normal; font-display:swap; src:url("/static/fonts/NaraGothic-700.woff2") format("woff2"); }
* { box-sizing: border-box; }
html { font-size: 15px; }
body { margin:0; background:var(--bg); color:var(--fg); font-variant-numeric:tabular-nums; font-family:"NaraGothic","Malgun Gothic","Apple SD Gothic Neo","Noto Sans KR",sans-serif; font-size:1rem; font-weight:400; line-height:1.5; }
.top { background:var(--header); 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; } .brand-sub { font-weight:400; opacity:.8; font-size:.9em; }
.brandline { margin:0 0 .4rem; color:var(--muted); } .brandline b { color:var(--fg); font-size:1.15em; }
.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(--header); 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(--header); }
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:700; white-space:nowrap; } td.num, th.num { text-align:right; white-space:nowrap; }
td a { color:inherit; font-weight:700; } .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:700; 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; }

.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:700; } .rev { color:#a15c00; font-weight:700; }
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; }

/* 사업 목록: 제목 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:700; 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:700; }
.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:700; }
.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; }

/* 나라장터식 탭·검색 틀·공고 목록 */
.tabs { display:flex; flex-wrap:wrap; gap:.3rem; margin:0 0 .8rem; border-bottom:2px solid var(--line); }
.tab { display:inline-block; padding:.5rem 1rem; border:1px solid var(--line); border-bottom:0; border-radius:6px 6px 0 0; background:var(--bg); color:var(--fg); text-decoration:none; font-weight:700; font-size:.92rem; }
.tab.on { background:var(--card); color:var(--header); border-color:var(--header); box-shadow:0 2px 0 var(--card); margin-bottom:-2px; }
.tab.off { opacity:.45; cursor:not-allowed; } .tab small { font-weight:400; font-size:.7rem; }
.search { background:var(--bg); border:1px solid var(--line); border-radius:8px; padding:.7rem .9rem; }
.srow { display:flex; flex-wrap:wrap; align-items:center; gap:.5rem .9rem; margin:.3rem 0; }
.srow.grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(170px,1fr)); align-items:end; }
.srow label { margin:.2rem 0; } .srow input[type=date], .srow select { width:auto; margin-top:0; }
.srow.grid input, .srow.grid select { width:100%; margin-top:.2rem; }
.srow label.inl { display:flex; align-items:center; gap:.4rem; margin:0; color:var(--fg); white-space:nowrap; }
.grp { color:var(--muted); font-size:.9rem; } .grp .chk { margin-left:.5rem; }
.tilde { color:var(--muted); }
.pbtns { display:inline-flex; gap:.3rem; }
.pbtn { padding:.35rem .7rem; background:var(--card); color:var(--fg); border:1px solid var(--line); font-size:.85rem; }
.pbtn.on { background:var(--header); color:#fff; border-color:var(--header); }
.sbtns { margin-left:auto; display:inline-flex; gap:.4rem; }
.listbar { display:flex; justify-content:space-between; align-items:center; gap:.5rem; margin:.2rem 0 .6rem; }
.listbar .total strong { color:var(--accent); } .psize { display:inline-flex; gap:.3rem; align-items:center; }
.psize select { width:auto; margin:0; padding:.25rem .4rem; } button.secondary { background:transparent; color:var(--fg); border:1px solid var(--line); }
.note { background:#fff8e1; border:1px solid #ecd58a; color:#6b5300; padding:.4rem .7rem; border-radius:6px; font-size:.85rem; }
table.nlist td.c-title { min-width:18rem; max-width:46rem; } table.nlist td.c-no, table.nlist td.c-date, table.nlist td.c-dl, table.nlist td.c-biz { white-space:nowrap; font-size:.85rem; }
table.nlist td.c-org { min-width:7rem; max-width:13rem; font-size:.85rem; } table.nlist td.c-gubun { white-space:nowrap; font-size:.85rem; }
td.c-gubun.g-cancel { color:var(--accent); font-weight:700; }
table.nlist td.c-dl.past { opacity:.45; } a.plink { font-weight:400; color:var(--muted); font-size:.78rem; }

/* ── 나라장터 분위기: 배지·색 라벨 제거, 격자 표, 같은 글꼴 크기 ───────────────────────── */
.badge, .badge.opp, .badge.infer, .badge.fit-no, .badge.fit-review, .badge.p1, .badge.p2, .badge.p3,
.badge.biz-servc, .badge.biz-cnstwk, .badge.small, .k-bid, .k-prespec, .k-plan, .k-proposal_mas {
  background:none; color:inherit; border:0; padding:0; border-radius:0; font-size:inherit; font-weight:inherit; }
.item, .chip { background:none; border:0; padding:0; margin:0; font-size:inherit; font-weight:inherit; }
.rev, .stages .sl .st, .stages .sl b, .stages .sl .d { color:inherit; font-weight:400; }
.infer { color:var(--muted); font-size:.8rem; }
.stage, .stage.on, .stage.miss, .stage.off { border:0; background:none; padding:0; }
.stage.on.s-plan, .stage.on.s-prespec, .stage.on.s-bid { border:0; }
.fold, .note { background:var(--head); color:inherit; border:1px solid var(--grid); }

html { font-size:14px; }
.card table, table.nlist, table.plist { border:1px solid var(--grid); border-collapse:collapse; font-size:1rem; }
.card th, .card td { border:1px solid var(--grid); padding:.45rem .55rem; vertical-align:middle; }
.card thead th { background:var(--head); color:var(--fg); border-top:2px solid var(--blue); text-align:center; font-weight:700; }
.card td.num, .card th.num { text-align:right; } .card thead th.num { text-align:center; }
td.c-ctr { text-align:center; white-space:nowrap; } td.c-seq { color:var(--muted); }
table.nlist td.c-title, table.plist td.c-title { text-align:left; }
table.nlist td.num, table.plist td.num { text-align:right; white-space:nowrap; }
a.ttl, td a.ttl { color:var(--blue); font-weight:400; text-decoration:none; }
a.ttl:hover { text-decoration:underline; }
.plink, .plink a, a.plink { color:var(--muted); font-size:.8rem; font-weight:400; text-decoration:none; }
.c-sub { color:inherit; font-size:inherit; } .c-sub.past { opacity:.45; }
table.nlist td.c-date { line-height:1.4; }
table.nlist td.c-no, table.nlist td.c-biz, table.nlist td.c-gubun, table.nlist td.c-date { font-size:inherit; }
td.c-gubun.g-cancel { color:inherit; font-weight:400; }
table.nlist td.c-org { font-size:inherit; }

.tabs, .search, .search label, .search input, .search select, .search button, .pbtn, .listbar, .listbar select, .tab { font-size:1rem; }
.tab { font-weight:400; color:var(--fg); background:var(--head); border:1px solid var(--grid); border-bottom:0; }
.tab.on { background:var(--blue); color:#fff; border-color:var(--blue); box-shadow:none; font-weight:700; }
.tabs { border-bottom:2px solid var(--blue); }
.tab.off small { font-size:.75em; }
.search { background:var(--head); border:1px solid var(--grid); }
.search button, .button { background:var(--blue); color:#fff; font-size:1rem; }
.search button.pbtn, button.small.secondary, .button.secondary { background:var(--card); color:var(--fg); border:1px solid var(--grid); }
.pbtn.on, .pbtn.on:hover { background:var(--blue); color:#fff; border-color:var(--blue); }
.listbar .total strong { color:var(--fg); }
.search label { color:var(--fg); }
ul.changes { padding-left:1.1rem; } ul.changes li { margin:.25rem 0; }
.masbar { margin:.2rem 0 .6rem; padding:.45rem .8rem; border-radius:6px; border:1px solid var(--grid); background:var(--head); }
.masbar.warn { background:#fff3cd; border-color:#e6cf75; color:#664d03; }
.masbar.error { background:#fde8ea; border-color:#f3b8be; color:#8a1220; font-weight:700; }
a.corp { color:var(--blue); text-decoration:none; } a.corp:hover { text-decoration:underline; }
.ttl-plain { color:inherit; } details.morebidders { margin:.5rem 0; } details.morebidders summary { cursor:pointer; color:var(--blue); }

.tag { display:inline-block; border:1px solid var(--line); border-radius:10px; padding:0 .45rem; margin:.1rem .15rem .1rem 0; font-size:.8rem; background:var(--card); }
.use { color:#1f6f43; font-weight:700; font-size:.8rem; }
.tagbox { max-width:34rem; } .tagbox .chk { margin-right:.5rem; white-space:nowrap; }
.ports-edit { border-collapse:collapse; } .ports-edit th, .ports-edit td { padding:.1rem .3rem; font-size:.85rem; border:0; }

/* 제품 상세: 항목/값 두 열, 화면 폭 안에서 줄바꿈 */
table.spec-table { table-layout:fixed; width:100%; }
.spec-table col.c1 { width:26%; } .spec-table col.c2 { width:74%; }
.spec-table td, .spec-table th { overflow-wrap:anywhere; word-break:break-word; }
.spec-table tr.grp th { background:var(--bg); color:var(--fg); font-size:.85rem; border-bottom:2px solid var(--line); padding-top:.7rem; }
.spec-table td.lbl { color:var(--muted); }
.oldmark { display:inline-block; margin-left:.4rem; font-size:.68rem; font-weight:400; color:#5b5b5b; background:#eceff4; border:1px solid #b9c0cc; border-radius:8px; padding:0 .3rem; cursor:help; }
.webmark { display:inline-block; margin-left:.4rem; font-size:.68rem; font-weight:400; color:#a15c00; border:1px solid #d9b26a; border-radius:8px; padding:0 .3rem; text-decoration:none; }
.small-btn { display:inline-block; cursor:pointer; margin-left:.5rem; font-size:.72rem; color:var(--muted); border:1px solid var(--line); border-radius:6px; padding:0 .4rem; list-style:none; }
details.rowedit > summary::-webkit-details-marker { display:none; }
details.rowedit { display:inline; } details.rowedit[open] { display:block; margin-top:.3rem; }
.editbox { padding:.4rem; border:1px solid var(--line); border-radius:6px; background:var(--card); }
.editbox input.wide { width:100%; max-width:30rem; } .editbox input.reason { width:11rem; }
.editrow { margin-top:.4rem; }
.bulkbar { display:none; position:sticky; bottom:0; background:var(--card); border-top:2px solid var(--line); padding:.5rem; margin-top:.5rem; }
form.editing .bulkbar { display:block; }
.srcline { margin-top:.6rem; }
table.tpl-table { table-layout:fixed; width:100%; } table.tpl-table td, table.tpl-table th { overflow-wrap:anywhere; }
.tpl-table col.t1 { width:34%; } .tpl-table col.t2 { width:34%; } .tpl-table col.t3 { width:32%; }
.use-off { color:var(--muted); }

/* 실행할 수 없는 버튼: 회색, 클릭 불가 표시 */
button:disabled, button[disabled], .button.disabled, a.button[aria-disabled="true"] {
  background:#d9dde3 !important; color:#8a919c !important; border:1px solid #c3c9d2 !important;
  cursor:not-allowed !important; filter:none !important; box-shadow:none !important; }
button:disabled:hover { filter:none !important; }
.busy-msg { color:#a15c00; font-weight:700; }

/* 공고번호 바로가기 돋보기 버튼 */
button.iconbtn { background:none; color:#fff; padding:.15rem .3rem; border:0; line-height:0; cursor:pointer; vertical-align:middle; }
button.iconbtn:hover, button.iconbtn:focus-visible { background:rgba(255,255,255,.2); border-radius:4px; }
table.kv { width:auto; margin:.4rem 0 1rem; } table.kv th { text-align:left; padding-right:1.2rem; font-weight:700; }

/* 상단 세션 표시: 이름·IP·남은 시간·연장 */
.top .ip { opacity:.75; font-size:.85rem; } .top .timer { font-variant-numeric:tabular-nums; font-weight:700; min-width:3.2em; display:inline-block; }
button.extbtn { background:#fff; color:var(--header); padding:.1rem .55rem; font-size:.85rem; border-radius:3px; }
.idlewarn { background:#fff3cd; color:#533f03; border-bottom:1px solid #e0c36c; padding:.45rem 1rem; display:flex; gap:1rem; align-items:center; justify-content:center; }
.idlewarn[hidden], #idle-dirty[hidden] { display:none; }
.mailalert { background:var(--alert-bg); color:var(--neg); border-bottom:1px solid var(--alert-bd); padding:.45rem 1rem; display:flex; flex-wrap:wrap; gap:.3rem .6rem; align-items:baseline; }
.mailalert .hint { color:inherit; opacity:.8; overflow-wrap:anywhere; }

/* 교육청 무선망: 교육청 × 연도 표 */
table.edutable th, table.edutable td { vertical-align:top; }
table.edutable th.edurow { text-align:left; white-space:nowrap; position:sticky; left:0; background:var(--head); }
td.edu-cell { min-width:5.5rem; }
td.edu-cell details[open] { min-width:22rem; }
ul.edulist { list-style:none; margin:.4rem 0 0; padding:0; text-align:left; font-weight:400; }
ul.edulist > li { margin:0 0 .7rem; padding-bottom:.5rem; border-bottom:1px dotted var(--grid); }
.edustages a.badge { margin-right:.25rem; text-decoration:none; }
.edudocs { margin-top:.2rem; font-size:.9rem; } .edudocs .doc { font-weight:700; }
.eduaward { margin-top:.2rem; font-size:.9rem; } tr.edutotal td, tr.edutotal th { font-weight:700; text-align:center; }

/* 관심 사업 별표, 교육청 무선망·주요 사업 배지 */
form.starform { display:inline; margin:0 .25rem 0 0; }
button.star { background:none; border:0; padding:0 .1rem; color:var(--muted); font-size:1.05rem; line-height:1; cursor:pointer; }
button.star.on { color:#e6a100; } button.star:hover, button.star:focus-visible { color:#e6a100; }
.badge.edu { background:#e3f0ff; color:#17458f; } .badge.major { background:#ffe3e3; color:#9b1c1c; font-weight:700; }
.eduopts { margin:.4rem 0 .8rem; } .eduopts .chk { margin-right:1rem; }
.eduamount { font-size:.9rem; color:var(--muted); }

/* 국산 장비 요구 등급 배지 */
.badge.dom-req { background:#ffe3e3; color:#9b1c1c; font-weight:700; }
.badge.dom-bonus { background:#fff1d6; color:#8a5a00; font-weight:700; }
.badge.dom-none { background:var(--line-soft); color:var(--muted); font-weight:400; }   /* 국산 요구: 없음 — 회색(판정과 충돌하는 초록 아님) */
.badge.dom-unk { background:var(--line); color:var(--muted); font-weight:400; }
.badge.dom-weak { background:#ececec; color:#555; font-weight:400; border:1px dashed #999; }
.badge.src-ref { background:#f1f1f1; color:#555; font-weight:400; border:1px dashed #8a8a8a; }   /* 경쟁사 spec ③ 제3자 웹 — 참고(판정에 안 씀) */
.domline { margin:.5rem 0; padding:.4rem .6rem; border:1px solid var(--grid); border-radius:4px; }
/* 교육청 비교표 */
table.cmptable td.num { text-align:right; white-space:nowrap; }
table.cmptable td.cmp-title { min-width:16rem; max-width:26rem; }
.badge.kind-nia { background:#e1ebfb; color:#14407a; } .badge.kind-own { background:#eef0f4; color:#444; font-weight:400; }
.badge.fit-ok { background:#dff5e6; color:#1c6b3c; } .badge.fit-fail { background:#fde2e2; color:#8a1c1c; } .badge.fit-unknown { background:var(--line); color:var(--muted); font-weight:400; }
/* 교육청 사업 분류 탭 */
.cattabs { display:flex; flex-wrap:wrap; gap:.35rem; margin:.5rem 0 .75rem; }
.cattabs a { padding:.3rem .8rem; border:1px solid var(--line); border-radius:999px; text-decoration:none; color:var(--fg); background:var(--card); font-size:.9rem; }
.cattabs a .n { color:var(--muted); font-size:.8rem; margin-left:.15rem; }
.cattabs a.on { background:var(--header); color:#fff; border-color:var(--header); font-weight:700; }
.cattabs a.on .n { color:#dbe5f7; }
.badge.cat-ap { background:#e1ebfb; color:#14407a; } .badge.cat-poe { background:#fde9d9; color:#8a3d00; }
.badge.cat-switch { background:#e9defa; color:#43237a; } .badge.cat-notebook { background:#dff5e6; color:#1c6b3c; }
.badge.cat-tablet { background:#fff1d6; color:#8a5a00; }
.badge.kind-support { background:#e6f0fb; color:#14407a; font-weight:700; border:1px solid #9bb8e0; }
/* Spec 비교 표: 근본 불일치 제품은 회색, 미달·불명 칸은 강조 */
th.dim, td.dim { color:var(--muted); background:#f1f1f1; }
tr.dim td { color:var(--muted); }   /* ② 단가 사례: 다른 수량대 줄 */
td.gap:not(.dim) { background:#fff6e5; }
tr.held td, p.held { color:var(--muted); background:#f1f1f1; }

/* 신호등(제출서류 레지스트리·No-bid) */
.sig { display: inline-block; width: .7em; height: .7em; border-radius: 50%; background: #bbb; vertical-align: baseline; }
.sig.ok { background: #2e9e5b; }
.sig.warn { background: #e0a526; }
.sig.bad { background: #d6453d; }
.sig.na, .sig.missing, .sig.none { background: #bbb; }
details.cell > summary { cursor: pointer; list-style: none; }
details.cell > summary::-webkit-details-marker { display: none; }
details.cell[open] > summary { font-weight: 700; }
.rival { background:#fff0c2; color:#6b3b00; font-weight:700; padding:0 .3em; border-radius:3px; box-shadow:inset 0 0 0 1px #f2b66b; }
.tabs.sub-tabs { margin-top:.25rem; }
.tab.off { opacity:.45; pointer-events:none; cursor:not-allowed; }
th.sortable a { color:inherit; text-decoration:none; white-space:nowrap; }
th.sortable a:hover { text-decoration:underline; }
tr.pick { cursor:pointer; } tr.pick:hover { background:rgba(79,111,168,.12); } tr.pick.on { background:rgba(79,111,168,.2); }


/* ── 화면 기준(2026-10-19, docs/ui-plan.md) ───────────────────────── */
a { color:var(--link); }
td.num, th.num, .num { text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
.neg { color:var(--neg); }
.dash { color:var(--muted); }
/* 판정 배지(vb) — 위 "나라장터 분위기" 의 .badge 초기화와 섞이지 않게 따로 둔다 */
.vb { display:inline-block; padding:.05rem .5rem; border-radius:999px; font-size:.8rem; font-weight:700; white-space:nowrap; line-height:1.5; border:1px solid transparent; }
.vb-entry { background:var(--vb-entry-bg); color:var(--vb-entry-fg); }
.vb-check { background:var(--vb-check-bg); color:var(--vb-check-fg); border-color:var(--vb-check-bd); }
.vb-price { background:var(--vb-price-bg); color:var(--vb-price-fg); border-color:var(--vb-price-bd); }
.vb-spec { background:var(--vb-spec-bg); color:var(--vb-spec-fg); border-color:var(--vb-spec-bd); }
.vb-new { background:var(--surface); color:var(--vb-new-fg); border:1px dashed var(--vb-new-bd); }
.vb-nocard { background:var(--surface); color:var(--vb-nocard-fg); border:1px dashed var(--vb-nocard-bd); }
.vb-b2b { background:var(--surface); color:var(--vb-b2b-fg); border:1px solid var(--vb-b2b-bd); } /* 공공와이파이 임차운영 등 통신사 영업 단서(2026-10-20) */
.vb-gov { background:var(--surface); color:var(--vb-gov-fg); border:1px solid var(--vb-gov-bd); } /* 관급자재(공사에 딸린 구매) 단서(2026-10-20) */
.vb-na { background:none; color:var(--muted); font-weight:400; padding-left:0; padding-right:0; }
.vb-why { color:var(--muted); font-size:.75rem; margin-left:.25rem; }
/* 마감 배지(dd) */
.dd { display:inline-block; padding:0 .45rem; border-radius:4px; font-size:.78rem; font-weight:700; white-space:nowrap; border:1px solid transparent; }
.dd-today { background:var(--dd-today-bg); color:#fff; }
.dd-soon { background:var(--dd-soon-bg); color:var(--dd-soon-fg); border-color:var(--dd-soon-bd); }
.dd-later { background:var(--dd-later-bg); color:var(--dd-later-fg); }
.dd-past { color:var(--muted); text-decoration:line-through; font-weight:400; }
/* 계산 기준 보기(긴 설명 접기) */
details.calc { display:inline-block; margin-left:.6rem; font-size:.85rem; font-weight:400; vertical-align:middle; }
details.calc > summary { cursor:pointer; color:var(--link); list-style:none; }
details.calc > summary::-webkit-details-marker { display:none; }
details.calc[open] { display:block; margin:.4rem 0 .8rem; padding:.6rem .8rem; background:var(--line-soft); border:1px solid var(--line); border-radius:6px; color:var(--ink); }
/* 머리줄 메뉴 6묶음 */
.top { gap:.4rem 1rem; }
.mainnav { display:flex; flex-wrap:wrap; align-items:center; gap:.2rem .3rem; flex:1 1 auto; }
.mainnav > .mi, .mainnav > details.mg > summary { color:#fff; text-decoration:none; padding:.35rem .6rem; border-bottom:3px solid transparent; cursor:pointer; list-style:none; display:inline-block; }
.mainnav > details.mg > summary::-webkit-details-marker { display:none; }
.mainnav > .mi.on, .mainnav > details.mg.on > summary { border-bottom-color:var(--brand); font-weight:700; }
.mainnav details.mg { position:relative; }
.mainnav details.mg > .sub-menu { position:absolute; top:100%; left:0; z-index:20; min-width:11rem; background:var(--surface); border:1px solid var(--line); border-radius:6px; box-shadow:0 6px 18px rgba(14,31,61,.15); padding:.3rem 0; }
.mainnav details.mg > .sub-menu a, .mainnav details.mg > .sub-menu span { display:block; padding:.4rem .9rem; color:var(--ink); text-decoration:none; white-space:nowrap; }
.mainnav details.mg > .sub-menu a:hover { background:var(--line-soft); }
.mainnav details.mg > .sub-menu a.on { color:var(--link); font-weight:700; }
.mainnav details.mg > .sub-menu span.soon { color:var(--muted); cursor:default; }
.toolnav { display:flex; flex-wrap:wrap; align-items:center; gap:.3rem .8rem; }
.toolnav details.acct { position:relative; }
.toolnav details.acct > summary { cursor:pointer; list-style:none; color:#fff; }
.toolnav details.acct > summary::-webkit-details-marker { display:none; }
.toolnav details.acct > .sub-menu { position:absolute; right:0; top:120%; z-index:20; min-width:9rem; background:var(--surface); border:1px solid var(--line); border-radius:6px; padding:.3rem 0; box-shadow:0 6px 18px rgba(14,31,61,.15); }
.toolnav details.acct > .sub-menu a, .toolnav details.acct > .sub-menu button.link { display:block; width:100%; text-align:left; padding:.4rem .9rem; color:var(--ink); text-decoration:none; background:none; }
.navtoggle { display:none; background:none; border:1px solid rgba(255,255,255,.5); color:#fff; padding:.25rem .6rem; }
@media (max-width:720px) {
  .navtoggle { display:inline-block; }
  .top { align-items:flex-start; }
  .top .mainnav, .top .toolnav { display:none; width:100%; flex-direction:column; align-items:stretch; }
  .top.open .mainnav, .top.open .toolnav { display:flex; }
  .mainnav details.mg > .sub-menu, .toolnav details.acct > .sub-menu { position:static; box-shadow:none; }
  main { padding:.6rem; }
}
.brand { display:inline-flex; align-items:center; gap:.5rem; color:#fff; font-weight:700; }
.brand .logo { width:.75rem; height:.75rem; background:var(--brand); border-radius:2px; display:inline-block; }
.toolnav a { color:#fff; text-decoration:none; } .toolnav a.on { text-decoration:underline; text-decoration-color:var(--brand); text-underline-offset:6px; }
.toolnav form.goto input { background:rgba(255,255,255,.1); border:1px solid rgba(255,255,255,.25); color:#fff; padding:.3rem .5rem; margin:0; width:12rem; }
.toolnav form.goto input::placeholder { color:rgba(255,255,255,.65); }
/* 제목 옆 "계산 기준 보기" */
.titlebar { display:flex; flex-wrap:wrap; align-items:baseline; gap:0 .2rem; }
.titlebar > h1, .titlebar > h2 { margin-right:.2rem; }
.titlebar > details.calc[open] { flex-basis:100%; margin-left:0; }
/* 휴대폰 폭: 입력칸·선택칸이 화면 밖으로 나가지 않게 */
textarea, select, input, pre { max-width:100%; }
textarea { box-sizing:border-box; }
pre { white-space:pre-wrap; overflow-wrap:anywhere; }
form.inline { flex-wrap:wrap; max-width:100%; }
form.inline label { max-width:100%; }

/* ── 화면 정비 2단계(2026-10-19): 홈·숫자 카드·판정 근거·휴대폰·인쇄 ── */
.kpis { display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:.8rem; margin:.6rem 0 1rem; }
.kpi { display:flex; flex-direction:column; gap:.15rem; background:var(--surface); border:1px solid var(--line); border-radius:8px; padding:.5rem .9rem; color:var(--ink); text-decoration:none; min-height:44px; }
.kpi:hover { border-color:var(--link); }
/* 숫자 카드(2026-10-20 시안): 라벨 위, 숫자·단위 한 줄 */
.kpi-l { font-size:.85rem; color:var(--muted); }
.kpi-v { display:flex; align-items:baseline; gap:.2rem; }
.kpi-n { font-size:1.5rem; font-weight:700; line-height:1.15; font-variant-numeric:tabular-nums; }
.kpi-u { font-size:.85rem; color:var(--muted); }
.home-grid { display:grid; grid-template-columns:minmax(0,2fr) minmax(0,1fr); grid-template-rows:auto 1fr;
  grid-template-areas:"main side" "big side"; gap:1rem; align-items:start; }
.home-main { grid-area:main; } .home-side { grid-area:side; } .home-big { grid-area:big; }   /* 새 대형 건은 왼쪽 열 마감 표 아래(2026-10-20) */
.home-grid > .card { margin:0; }
.home-side { display:grid; gap:1rem; align-content:start; min-width:0; }
.home-side .card { margin:0; }
/* 마감 칸: 배지 한 줄, 날짜·시각 한 줄 */
.home-table td.c-date { white-space:nowrap; line-height:1.35; }
.home-table td.c-date .dl-at { font-size:.85rem; font-variant-numeric:tabular-nums; }
table.entry-table td div.sub { margin-top:.1rem; }
.home .card h2 { margin-top:0; }
.home .card h2 + .seg, .home .card h2 ~ h2 { margin-top:1rem; }
.biglist li { margin:.45rem 0; }
.databasis { margin-top:1rem; }
.seg { position:relative; }
.seg > input[type=radio] { position:absolute; opacity:0; width:1px; height:1px; }
.seg > label { display:inline-flex; align-items:center; padding:.3rem .9rem; border:1px solid var(--line); border-radius:999px; cursor:pointer; margin:0 .25rem .5rem 0; min-height:36px; }
.seg > input:checked + label { background:var(--header); color:#fff; border-color:var(--header); }
.seg > input:focus-visible + label { outline:2px solid var(--link); }
.seg-panel { display:none; }
#edu-ap:checked ~ .seg-ap, #edu-switch:checked ~ .seg-switch { display:block; }
.bar { display:grid; grid-template-columns:4.2rem minmax(0,1fr) 5.2rem; gap:.5rem; align-items:center; color:var(--ink); text-decoration:none; min-height:36px; }
.bar-track { background:var(--line-soft); border-radius:4px; height:.7rem; overflow:hidden; }
.bar-fill { display:block; height:100%; background:var(--link); width:0; }
.bar-fill.w0 { width:0%; }
.bar-fill.w5 { width:5%; }
.bar-fill.w10 { width:10%; }
.bar-fill.w15 { width:15%; }
.bar-fill.w20 { width:20%; }
.bar-fill.w25 { width:25%; }
.bar-fill.w30 { width:30%; }
.bar-fill.w35 { width:35%; }
.bar-fill.w40 { width:40%; }
.bar-fill.w45 { width:45%; }
.bar-fill.w50 { width:50%; }
.bar-fill.w55 { width:55%; }
.bar-fill.w60 { width:60%; }
.bar-fill.w65 { width:65%; }
.bar-fill.w70 { width:70%; }
.bar-fill.w75 { width:75%; }
.bar-fill.w80 { width:80%; }
.bar-fill.w85 { width:85%; }
.bar-fill.w90 { width:90%; }
.bar-fill.w95 { width:95%; }
.bar-fill.w100 { width:100%; }
.bar-v { text-align:right; font-variant-numeric:tabular-nums; }
/* 판정 근거(배지를 누르면 펼침) */
details.why > summary { list-style:none; cursor:pointer; display:inline-block; }
details.why > summary::-webkit-details-marker { display:none; }
details.why[open] > summary { margin-bottom:.3rem; }
.why-body { padding:.5rem .7rem; background:var(--line-soft); border:1px solid var(--line); border-radius:6px; font-size:.85rem; min-width:15rem; text-align:left; white-space:normal; }
.why-body > div { margin:.15rem 0; }
.why-body ul.plain { margin:.15rem 0 .15rem .2rem; }
tr.opened > td { background:#FFF8E6; }
a.vlink { text-decoration:none; }
details.more > summary { cursor:pointer; color:var(--link); margin:.4rem 0; min-height:32px; }
.srow label.grow input { min-width:16rem; }
.bundle > details > summary { cursor:pointer; }
/* 휴대폰(640px 이하): 공고 목록·홈 공고 표는 카드형, 다른 표는 상자 안 가로 스크롤 + 첫 칸 고정, 누르는 곳 44px 이상 */
@media (max-width:640px) {
  .kpis { grid-template-columns:repeat(2, minmax(0,1fr)); }
  .home-grid { grid-template-columns:minmax(0,1fr); grid-template-rows:none; grid-template-areas:"main" "side" "big"; }
  table.nlist thead, table.home-table thead { display:none; }
  table.nlist, table.nlist tbody, table.nlist tr, table.nlist td,
  table.home-table, table.home-table tbody, table.home-table tr, table.home-table td { display:block; width:auto; }
  table.nlist tr, table.home-table tr { border:1px solid var(--line); border-radius:8px; margin:0 0 .6rem; padding:.55rem .75rem; background:var(--surface); }
  table.nlist td, table.home-table td { border:none; padding:.15rem 0; text-align:left; }
  table.nlist td:not([data-label]) { display:none; }
  table.nlist td[data-label]::before, table.home-table td[data-label]::before { content:attr(data-label); display:inline-block; min-width:5.2em; margin-right:.3rem; color:var(--muted); font-size:.8rem; }
  table.nlist td.c-title::before, table.home-table td.c-title::before, table.nlist td.c-seq { display:none; }
  table.nlist td.c-title, table.home-table td.c-title { font-weight:700; }
  table.nlist td.num, table.home-table td.num { text-align:left; }
  .table-wrap { overflow-x:auto; -webkit-overflow-scrolling:touch; }
  .table-wrap table:not(.nlist):not(.home-table) th:first-child,
  .table-wrap table:not(.nlist):not(.home-table) td:first-child { position:sticky; left:0; z-index:1; background:var(--surface); box-shadow:1px 0 0 var(--line); }
  .table-wrap table:not(.nlist):not(.home-table) thead th:first-child { background:var(--line-soft); }
  a.button, button, .tab, .pbtn, select, .mainnav a, .mainnav summary, .toolnav a, .toolnav summary, details > summary, .kpi, a.vlink { min-height:44px; }
  a.button, button, .tab, .pbtn { display:inline-flex; align-items:center; justify-content:center; }
  label.chk { display:inline-flex; align-items:center; min-height:44px; }
  .why-body { min-width:0; }
}
/* 인쇄: 머리줄·검색 틀은 빼고, 접힌 내용은 펼친 채로(app.js 가 인쇄 직전에 연다) */
@media print {
  .top, .navtoggle, form.search, .sbtns, form.inline, .pager { display:none !important; }
  body { background:#fff; }
  main { padding:0; max-width:none; }
  .card { border:none; box-shadow:none; padding:0; margin:0 0 1rem; }
  .table-wrap { overflow:visible; }
  a { color:inherit; text-decoration:none; }
  .kpi { border:1px solid #999; }
  tr, li { break-inside:avoid; }
}
.biglist { list-style:none; padding-left:0; }
@media (min-width:641px) { details.why[open] .why-body { min-width:24rem; } }

/* ── 화면 정비 3단계(2026-10-19): 기간 입력 한 줄 ── */
.filters .period { grid-column:span 2; }
.period { display:flex; flex-wrap:nowrap; align-items:center; gap:.35rem; min-width:0; }
.period-label { white-space:nowrap; }
.period input[type=date] { flex:1 1 0; min-width:0; }
@media (max-width:640px) { .filters .period { grid-column:1 / -1; } }

/* 시장 규모 월별 누적 막대(SVG, 색은 tokens.css 채널 색) */
.chart-wrap { overflow-x:auto; max-width:100%; }
svg.stack { display:block; width:100%; max-width:900px; height:auto; font-size:10px; }
svg.stack .grid { stroke:var(--line); stroke-width:1; }
svg.stack .axis { fill:var(--muted); font-variant-numeric:tabular-nums; }
.ch-mas_prop { fill:var(--ch-mas_prop); background:var(--ch-mas_prop); }
.ch-mas3 { fill:var(--ch-mas3); background:var(--ch-mas3); }
.ch-pps_bid { fill:var(--ch-pps_bid); background:var(--ch-pps_bid); }
.ch-excellent_other { fill:var(--ch-excellent_other); background:var(--ch-excellent_other); }
.ch-self { fill:var(--ch-self); background:var(--ch-self); }
.legend { list-style:none; display:flex; flex-wrap:wrap; gap:.3rem 1rem; padding:0; margin:.4rem 0 .8rem; font-size:.85rem; color:var(--muted); }
.legend .sw { display:inline-block; width:.8rem; height:.8rem; border-radius:2px; margin-right:.35rem; vertical-align:-1px; }
details.more-table > summary { cursor:pointer; color:var(--link); margin:.3rem 0; }

/* 교육청 집행: 남은 예상 막대, 월별 누적 곡선(색은 변수) */
td.c-remain { min-width:8rem; white-space:nowrap; }
.cellbar { display:inline-block; width:3rem; height:.6rem; background:var(--line-soft); border-radius:3px; overflow:hidden; vertical-align:middle; margin-right:.4rem; }
.cellbar .bar-fill { height:100%; }
svg.curve { display:block; width:100%; max-width:640px; font-size:10px; }
svg.curve polyline { fill:none; stroke-width:2; }
svg.curve .axis { fill:var(--muted); }
.curve-prev { stroke:var(--ch-self); background:var(--ch-self); }
.curve-cur { stroke:var(--link); background:var(--link); }

/* 대형 계약 등급 표(등급마다 대형 블록·일반 두 줄) */
table.grades tbody { border-top:2px solid var(--line); }
table.grades th.c-grade { text-align:left; vertical-align:top; font-weight:400; min-width:9rem; }
table.grades tbody.on { background:var(--line-soft); }
table.grades td.c-range { white-space:nowrap; }

/* 경쟁사 */
table.companies tr.foreign td { color:var(--muted); background:var(--line-soft); }
table.companies tr.sep td { background:var(--bg); color:var(--muted); font-size:.85rem; font-weight:700; }
details.equip > summary { cursor:pointer; color:var(--link); white-space:nowrap; }
table.mini { font-size:.82rem; margin:.3rem 0; }
table.mini th, table.mini td { padding:.2rem .4rem; }
.pager { display:flex; gap:1rem; justify-content:center; margin:.8rem 0; }

/* 필터 한 줄 칸(이름·입력·단위가 한 줄, 화면 정비 3단계) */
.fld { display:flex; flex-wrap:nowrap; align-items:center; gap:.3rem; min-width:0; margin:.6rem 0; font-size:.9rem; color:var(--muted); }
.fld input { flex:1 1 0; min-width:3.5rem; margin:0; }
.fld-label, .fld .unit, .period .tilde, .fld .tilde { white-space:nowrap; }
.filters .span2 { grid-column:span 2; }
.period { margin:.6rem 0; font-size:.9rem; color:var(--muted); }
.period input[type=date] { margin:0; }
@media (max-width:640px) { .filters .span2 { grid-column:1 / -1; } }
table.companies td.c-src { max-width:12rem; overflow-wrap:anywhere; font-size:.85rem; }
table.companies td.c-role { min-width:8.5rem; } table.companies td.c-nat { min-width:6.5rem; }

/* ── 2026-10-20: 공고 목록 — 업무·구분·공고번호는 공고명 아래 작은 줄 ── */
.nmeta { font-size:.8rem; color:var(--muted); margin-top:.15rem; }
.nmeta .c-no { font-variant-numeric:tabular-nums; }
.nmeta a { color:var(--muted); }
@media (max-width:640px) {
  .home-table td.c-date .dl-badge, .home-table td.c-date .dl-at { display:inline-block; margin-right:.3rem; }
}
.spec-verdict { display:flex; flex-wrap:wrap; align-items:flex-start; gap:.4rem; margin:.6rem 0 .1rem; }
.spec-ref { margin:0 0 .4rem; }
.spec-verdict details.why { display:inline-block; }

/* ── 2026-10-20: 제외된 공고 접기 ── */
details.excluded { margin-top:1rem; border-top:1px solid var(--line); padding-top:.6rem; }
details.excluded > summary { cursor:pointer; color:var(--muted); }
.exlist li { margin:.5rem 0; }

/* ── 2026-10-20 휴대폰 화면 점검(삼성 인터넷 캡처 13장) ── */
/* 한글 줄바꿈: 낱말 중간에서 끊지 않는다("트라이밴/드"·"전북테크/노파크"), 긴 영문·숫자만 칸 안에서 끊는다 */
body { word-break:keep-all; overflow-wrap:break-word; }
.nw { white-space:nowrap; }                     /* "Wi-Fi 6"·날짜처럼 한 덩어리로 둘 말 */
/* 브라우저의 맨 위로(^) 버튼이 마지막 글을 가리지 않게 */
main { padding-bottom:80px; }
/* 머리줄 세션 "연장": 다른 머리줄 단추와 같은 모양(흰 네모 아님) */
.top button.extbtn { background:transparent; color:#fff; border:1px solid rgba(255,255,255,.45); border-radius:4px; padding:.15rem .6rem; font-size:.85rem; min-height:0; }
.top button.extbtn:hover { background:rgba(255,255,255,.12); }
.idlewarn button.extbtn { background:var(--header); color:#fff; border:none; border-radius:4px; padding:.25rem .8rem; }
/* 판정 배지 묶음은 값 칸 안에서 줄바꿈(둘째 배지가 칸 왼쪽 끝으로 떨어지지 않게) — 아래 휴대폰 칸은 이름 칸을 띄우고 값만 흐르게 */
a.vlink { display:inline-flex; flex-wrap:wrap; gap:.25rem; align-items:center; }
@media (max-width:640px) {
  table.nlist td[data-label], table.home-table td[data-label] { position:relative; padding-left:5.6em; min-height:1.4em; }
  table.nlist td[data-label]::before, table.home-table td[data-label]::before { position:absolute; left:0; top:.2rem; min-width:0; width:5.2em; }
  table.nlist td.c-title, table.home-table td.c-title { padding-left:0; }
  .tabs { flex-wrap:nowrap; overflow-x:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none; }
  .tabs::-webkit-scrollbar { display:none; }
  .tabs .tab { flex:0 0 auto; white-space:nowrap; }
}
/* 목록형 표의 휴대폰 카드형(600px 이하): 제목 줄 전체, 나머지는 두 칸 격자(왼쪽 값 · 오른쪽 값) */
@media (max-width:600px) {
  .table-wrap > table.mcards { min-width:0; }
  table.mcards, table.mcards tbody { display:block; width:auto; }
  table.mcards thead { display:none; }
  table.mcards tr { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,auto); gap:.2rem .7rem; align-items:start;
                    border:1px solid var(--line); border-radius:8px; margin:0 0 .6rem; padding:.55rem .75rem; background:var(--surface); }
  table.mcards td { display:block; border:none !important; padding:0 !important; text-align:left; position:static !important; box-shadow:none !important; background:none !important; white-space:normal !important; min-width:0 !important; max-width:none !important; }
  table.mcards td.mc-title, table.mcards td.mc-full { grid-column:1 / -1; }
  table.mcards td.mc-title { font-weight:700; order:-1; }
  table.mcards td.mc-title .sub { font-weight:400; }
  table.mcards td.mc-right { text-align:right; }
  table.mcards td.mc-hide { display:none; }
  table.mcards td[data-label]:not([data-label=""])::before { content:attr(data-label) " "; color:var(--muted); font-size:.8rem; font-weight:400; margin-right:.25rem; }
}
/* 월별 추이: 화면 폭에 맞춤 · 휴대폰은 최근 6개월(글자 크게) · 막대를 누르면 값 상자 */
.chart-m { display:none; }
svg.stack .hit { fill:transparent; }
svg.stack .bar-g { cursor:pointer; outline:none; }
svg.stack .bar-g:focus rect:not(.hit), svg.stack .bar-g.on rect:not(.hit) { opacity:.8; }
.chart-tip { position:absolute; z-index:30; max-width:18rem; background:var(--surface); color:var(--ink); border:1px solid var(--line);
             border-radius:6px; padding:.4rem .6rem; font-size:.85rem; box-shadow:0 6px 18px rgba(14,31,61,.15); }
.chart-tip[hidden] { display:none; }
.tch { display:none; }
@media (hover:none), (pointer:coarse) { .hov { display:none; } .tch { display:inline; } }
@media (max-width:600px) {
  .chart-full { display:none; }
  .chart-m { display:block; }
  .chart-m svg.stack { font-size:14px; }
}
/* 공고 목록 검색 틀: 휴대폰은 검색창·조회만, 나머지는 "조건 n개 적용 ▾" 로 접기(체크박스 토글, 스크립트 없음) */
.mc-toggle { position:absolute; opacity:0; width:1px; height:1px; pointer-events:none; }
.mc-label { display:none; }
@media (max-width:600px) {
  .search .srow.s-main { flex-wrap:nowrap; }
  .search .srow.s-main label.grow { flex:1 1 auto; min-width:0; }
  .search .srow.s-main label.grow input { min-width:0; width:100%; }
  .search .srow.s-main .sbtns .button.secondary { display:none; }
  .mc-label { display:inline-flex; align-items:center; min-height:44px; padding:0 .2rem; color:var(--link); cursor:pointer; }
  .mc-toggle:focus-visible + .mc-label { outline:2px solid var(--link); }
  .mc-body { display:none; }
  .mc-toggle:checked ~ .mc-body { display:block; }
}
.m-only { display:none !important; }
@media (max-width:600px) { .m-only { display:inline-flex !important; } }
.m-only-block { display:none; }
@media (max-width:600px) { .m-only-block { display:block; } }
/* 좁은 칸의 글자 단위 꺾임 방지(2026-10-20 390px 점검): 근거·시도·교육청 칸은 최소 폭 */
td.c-why { min-width:10rem; }
table.spend td:first-child, table.spend th:first-child { min-width:5.5rem; }
td.edu-cell { min-width:7rem; }

/* ① 단가 화면(2026-10-20) */
.price-grid2 { display:grid; grid-template-columns:repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap:1rem; }
.plan-cut { margin-top:.3rem; white-space:nowrap; color:var(--neg); }
.price-table tr.sel td { background:var(--line-soft); }
.pbar-cell { min-width:6rem; width:30%; }
.pbar { display:inline-block; height:.6rem; background:var(--accent); border-radius:2px; vertical-align:middle; }

/* ── 2026-10-21 B4: 공고·사업 상세 '결과' 한 묶음(_award_result.html) ── */
.aw-rival { background:#fff0c2; color:#6b3b00; font-weight:700; padding:0 .3em; border-radius:3px; box-shadow:inset 0 0 0 1px #f2b66b; font-size:.8rem; }
.aw-why { color:var(--muted); font-size:.85rem; }
table.aw-result td.c-why { min-width:11rem; }
table.aw-result td.c-title { min-width:12rem; }
table.aw-result td.c-link { min-width:9rem; }
table.aw-result td.num .sub { white-space:normal; }
p.aw-state { margin:.4rem 0; }
details.aw-more { margin:.4rem 0 .8rem; }
details.aw-more[open] > summary { margin-bottom:.4rem; }
@media (max-width:640px) {
  table.aw-result td.c-why, table.aw-result td.c-title, table.aw-result td.c-link { min-width:0; }
}
