@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700;900&display=swap');

:root{
  --ink:#1a1a1a; --sub:#6c6c6c; --sub2:#949494; --line:#e0e1e5; --line-soft:#eeeef1;
  --bg:#f4f5f7; --panel:#ffffff; --panel-soft:#f8f9fb;
  --accent:#1c8fed; --accent-dark:#135eba; --accent-bg:#eaf4fd;
  --price:#f14738; --danger:#ff0303; --danger-bg:#fdeceb;
  --warn:#c9820a; --warn-bg:#fdf3e2; --tab-bg:#f1f1f1;
  --r-lg:16px; --r-md:10px; --r-sm:7px; --r-pill:999px;
  /* 카드가 종이처럼 살짝 떠 보이게 하는 아주 약한 그림자 */
  --shadow-sm:0 1px 2px rgba(16,24,40,.04), 0 1px 3px rgba(16,24,40,.06);
  --shadow-md:0 4px 12px rgba(16,24,40,.07), 0 1px 3px rgba(16,24,40,.05);
  /* 포커스: 1px 아웃라인 대신 부드러운 링 */
  --ring:0 0 0 3px rgba(28,143,237,.16);
}
*{box-sizing:border-box}
body{margin:0;font-family:'Noto Sans KR',-apple-system,"Malgun Gothic","Apple SD Gothic Neo",sans-serif;background:var(--bg);color:var(--ink);line-height:1.55;font-size:14px}
/* 견적 작성 화면(index)만 흰 배경 — 다른 목록·설정 화면은 회색 위 흰 카드 대비를 유지한다 */
.page-white{background:#fff}
a{color:var(--accent);text-decoration:none}
button{font-family:inherit;cursor:pointer}

/* ── site header (compuzone 스타일: 흰 배경 + 로고/검색/유틸 + 하단 네비바) ── */
/* ── 상단 띠배너 ──
   검은 띠가 가로를 채우고 가운데에 이미지가 원본 크기로 놓인다.
   높이는 --top-banner-h (업로드된 이미지 높이) 로 인라인 지정된다. */
.top-banner{position:relative;display:flex;align-items:center;justify-content:center;
  min-height:var(--top-banner-h,50px);background:#000;border-radius:0 0 14px 14px;overflow:hidden}
.top-banner-inner{display:flex;align-items:center;justify-content:center;max-width:100%}
.top-banner-inner a{display:block;line-height:0}
/* 원본 크기(--top-banner-w)로 놓되, 화면이 좁으면 닫기 버튼 자리(좌우 42px)를 빼고 줄인다.
   height:auto 라 비율이 유지되고, 줄어든 만큼 띠도 낮아져 검은 여백만 남지 않는다. */
.top-banner img{display:block;width:var(--top-banner-w,auto);max-width:calc(100% - 84px);height:auto}
.top-banner-close{position:absolute;top:0;right:0;height:100%;width:42px;border:0;background:none;
  color:#fff;opacity:.65;font-size:20px;line-height:1;cursor:pointer}
.top-banner-close:hover{opacity:1}
/* 아주 좁은 화면에서는 띠가 너무 얇아져 닫기 버튼을 누를 수 없다 — 최소 높이를 준다 */
@media (max-width:700px){.top-banner{min-height:34px}.top-banner-close{width:32px;font-size:17px}}

/* ── 광고 배너 (통짜 이미지 한 장) ──
   권장 1272×100. 화면이 좁으면 비율을 유지한 채 줄어든다. */
/* .page-wrap 규칙이 뒤에 와서 margin 을 덮으므로 클래스 두 개로 특정도를 올린다.
   섹션 간격은 카드끼리의 간격(18px)과 같게 맞춘다. */
.page-wrap.ad-wrap{margin-top:18px;margin-bottom:18px}
.ad-banner{line-height:0;border-radius:var(--r-md);overflow:hidden;background:var(--panel-soft)}
.ad-banner a{display:block;line-height:0}
.ad-banner img{display:block;width:100%;height:auto;max-width:100%}

.site-header{background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}
.site-header-top{display:flex;align-items:center;gap:24px;max-width:1320px;margin:0 auto;padding:16px 24px}
/* ── 로고 (모픽 · 모두의 ITPICK) ──
   마크 + 워드마크 + 풀네임 한 줄. 세 곳(헤더·푸터·로그인)이 같은 마크업을 쓰고
   크기만 변형으로 다르게 한다 — 모양이 갈라지면 같은 브랜드로 안 보인다. */
.logo{display:inline-flex;align-items:center;gap:9px;flex-shrink:0;
  color:var(--accent);letter-spacing:-.5px;line-height:1}
.logo-mark{width:1.35em;height:1.35em;flex-shrink:0;border-radius:.38em}
.logo-word{font-weight:900;color:var(--ink)}
.logo-sub{font-size:.5em;font-weight:700;letter-spacing:.2px;color:var(--sub2);
  padding-left:9px;border-left:1px solid var(--line);white-space:nowrap}

.logo-header{font-size:22px}
.logo-header .logo-word{color:var(--ink)}
.logo-header:hover .logo-word{color:var(--accent)}
/* 좁아지면 풀네임을 접는다 — 워드마크만 남아도 브랜드는 전달된다 */
@media (max-width:820px){.logo-header .logo-sub{display:none}}

.logo-footer{font-size:16px}
.logo-auth{font-size:20px;margin-bottom:28px}
.site-search{flex:1;max-width:520px;display:flex;border:2px solid var(--accent);border-radius:24px;overflow:hidden}
.site-search input{flex:1;border:0;padding:10px 16px;font-size:13px;outline:none;color:var(--ink)}
.site-search button{border:0;background:#fff;color:var(--accent);padding:0 18px;font-size:15px}
.site-header-util{display:flex;align-items:center;gap:16px;margin-left:auto;flex-shrink:0}
.util-icon{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;background:var(--panel-soft);font-size:15px}
.util-icon:hover{background:var(--accent-bg)}
.util-link{font-size:13px;color:var(--sub);font-weight:500}
.util-link:hover{color:var(--accent)}
.util-link.active{color:var(--accent);font-weight:700}
.util-btn{font-size:13px;font-weight:700;color:#fff;background:var(--accent);padding:8px 16px;border-radius:20px;white-space:nowrap}
.util-btn:hover{background:var(--accent-dark);color:#fff}
.util-user{font-size:13px;color:var(--sub);white-space:nowrap}
.util-user b{color:var(--ink);font-weight:700}
@media (max-width:700px){.util-user{display:none}}

/* mypage */
.mypage-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
@media (max-width:700px){.mypage-summary{grid-template-columns:1fr}}
.mypage-stat{background:var(--panel-soft);border:1px solid var(--line-soft);border-radius:var(--r-md);padding:14px 16px}
.mypage-stat-label{display:block;font-size:11.5px;color:var(--sub2);margin-bottom:4px}
.mypage-stat-value{display:block;font-size:18px;font-weight:900;color:var(--ink)}
.mypage-stat-value.accent{color:var(--price)}

.site-nav{display:flex;gap:6px;max-width:1320px;margin:0 auto;padding:0 24px}
.site-nav a{padding:12px 14px;font-size:14px;font-weight:700;color:var(--sub);border-bottom:2px solid transparent}
.site-nav a:hover{color:var(--accent)}
.site-nav a.active{color:var(--accent);border-bottom-color:var(--accent)}

/* ── carousel banner — 화면 전체 폭, 슬라이드 388x480, 간격 10px ── */
/* 아래 여백은 .page-wrap 의 margin-top(16px) 과 병합되어 큰 값이 이긴다.
   그래서 21px 로 두어야 실제로 21px 이 보인다. */
.carousel{position:relative;width:100%;margin:15px 0 21px;padding:0;overflow:hidden}
.car-stage{position:relative}
.car-viewport{overflow:hidden;height:480px}
.car-track{display:flex;gap:10px;height:100%;transition:transform .4s ease}
.car-slide{flex:0 0 388px;width:388px;height:480px;border-radius:12px;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end;padding:26px 24px;box-sizing:border-box}
/* 관리자가 올린 이미지 슬라이드 — 이미지가 카드를 꽉 채운다 */
.car-slide-image{padding:0;position:relative;background:var(--panel-soft)}
.car-slide-image img{width:100%;height:100%;object-fit:cover;display:block}
.car-slide-link{display:block;width:100%;height:100%}
.car-slide-caption{position:absolute;left:0;right:0;bottom:0;padding:22px 24px;color:#fff;
  background:linear-gradient(transparent,rgba(0,0,0,.72))}
.car-slide-caption strong{display:block;font-size:19px;font-weight:900;letter-spacing:-.4px;line-height:1.35}
.car-slide-caption span{display:block;margin-top:6px;font-size:13px;font-weight:400;
  line-height:1.5;color:rgba(255,255,255,.88)}
@media (max-width:700px){.car-slide-caption{padding:16px 18px}
  .car-slide-caption strong{font-size:16px}.car-slide-caption span{font-size:12px}}
.car-slide h3{margin:0 0 8px;font-size:22px;font-weight:900;color:#fff;letter-spacing:-.4px;line-height:1.3}
.car-slide p{margin:0;font-size:13px;color:rgba(255,255,255,.88);line-height:1.5}
.car-arrow{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:50%;border:0;background:rgba(255,255,255,.9);box-shadow:0 2px 8px rgba(0,0,0,.15);font-size:20px;color:var(--ink);z-index:2;display:flex;align-items:center;justify-content:center}
.car-arrow.prev{left:16px}
.car-arrow.next{right:16px}
.car-arrow:hover{background:#fff}
.car-dots{display:flex;justify-content:center;align-items:center;gap:8px;margin-top:14px}
.car-dot{width:8px;height:8px;padding:0;border:0;border-radius:50%;background:var(--line);
  cursor:pointer;transition:width .25s,background .25s,border-radius .25s}
.car-dot:hover{background:var(--sub2)}
.car-dot.on{width:26px;border-radius:4px;background:var(--accent)}
@media (max-width:700px){.car-viewport,.car-slide{height:360px}.car-slide{flex-basis:280px;width:280px}.car-slide h3{font-size:18px}}

.page-wrap{max-width:1320px;margin:16px auto 0;padding:0 16px}
.layout{display:grid;grid-template-columns:1fr 1fr;gap:18px;max-width:1320px;margin:0 auto 18px;padding:0 16px}
@media (max-width:980px){.layout{grid-template-columns:1fr}}

.card{background:var(--panel);border:1px solid var(--line-soft);border-radius:var(--r-lg);
  padding:22px 24px;margin-bottom:18px;box-shadow:var(--shadow-sm)}
@media (max-width:700px){.card{padding:18px 16px}}
.card h2{display:flex;align-items:center;flex-wrap:wrap;gap:6px;
  font-size:15.5px;margin:0 0 16px;font-weight:800;color:var(--ink);letter-spacing:-.3px}
/* 제목 앞 강조 바 — 섹션 시작점을 눈으로 잡아준다 */
.card h2::before{content:'';flex-shrink:0;width:3px;height:15px;border-radius:2px;background:var(--accent)}
.card h2 .hint{font-size:12px;color:var(--sub2);font-weight:400;margin-left:0}

/* 견적 용도 토글 — 카드 제목 옆의 작은 세그먼트 컨트롤 */
.purpose-toggle{display:inline-flex;gap:2px;padding:2px;background:var(--tab-bg);border-radius:var(--r-pill)}
.purpose-opt{padding:4px 12px;border-radius:var(--r-pill);font-size:12px;font-weight:600;
  color:var(--sub);cursor:pointer;transition:background .15s, color .15s;white-space:nowrap}
.purpose-opt:hover{color:var(--accent-dark)}
.purpose-opt.on{background:#fff;color:var(--accent-dark);box-shadow:var(--shadow-sm)}
.purpose-opt input{position:absolute;opacity:0;width:0;height:0}

.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px 14px}
.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px 14px}
/* 좁은 화면에서 3열은 가로로 넘친다 — 2열 → 1열로 접는다 */
@media (max-width:820px){.grid3{grid-template-columns:1fr 1fr}}
@media (max-width:560px){.grid2,.grid3{grid-template-columns:1fr}}
.field label{display:block;font-size:12px;color:var(--sub);margin-bottom:5px;font-weight:500}
.field input,.field select{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-sm);
  font-size:13px;background:#fff;color:var(--ink);transition:border-color .15s, box-shadow .15s}
.field input::placeholder{color:#b9bbc2}
.field input:hover,.field select:hover{border-color:#c9cbd2}
.field input:focus,.field select:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}

/* 사업유형 그리드 — compuzone 온라인견적 카테고리 카드 참고 */
/* 사업유형 — 한 칸씩 떨어진 타일. 표처럼 보이던 실선 격자를 없앴다. */
.domain-grid{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}
/* 6열 그리드로 두면 마지막 줄이 3개만 남아도 앞줄과 폭이 맞는다 (flex 라면 늘어나 버린다) */
.domain-grid-row{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}
@media (max-width:980px){.domain-grid-row{grid-template-columns:repeat(4,1fr)}}
@media (max-width:700px){.domain-grid-row{grid-template-columns:repeat(2,1fr)}}
.domain-cell{padding:13px 12px;font-size:13.5px;font-weight:500;color:var(--sub);
  cursor:pointer;text-align:center;background:#fff;border:1px solid var(--line);border-radius:var(--r-md);
  transition:border-color .15s, background .15s, color .15s, transform .15s, box-shadow .15s}
.domain-cell:hover{background:var(--accent-bg);border-color:#a9d5f7;color:var(--accent-dark);transform:translateY(-1px)}
.domain-cell.active{background:linear-gradient(180deg,#2f9bf0,var(--accent));border-color:var(--accent-dark);
  color:#fff;font-weight:700;box-shadow:0 3px 10px rgba(28,143,237,.32);transform:translateY(-1px)}
.domain-cell.disabled{color:#bfc1c8;cursor:not-allowed;background:var(--panel-soft);border-style:dashed}
.domain-cell.disabled:hover{background:var(--panel-soft);border-color:var(--line);color:#bfc1c8;transform:none}

.preset-row{display:flex;gap:8px;align-items:center;margin-bottom:14px;flex-wrap:wrap}
.preset-row select{padding:9px 12px;border:1px solid var(--line);border-radius:var(--r-sm);font-size:13px;background:#fff}
.preset-row select:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}
.btn{padding:9px 18px;border:1px solid var(--line);border-radius:var(--r-pill);background:#fff;
  font-size:13px;font-weight:600;color:var(--ink);transition:border-color .15s, color .15s, background .15s, box-shadow .15s}
.btn:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-bg)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:700;
  box-shadow:0 2px 8px rgba(28,143,237,.28)}
.btn.primary:hover{background:var(--accent-dark);border-color:var(--accent-dark);color:#fff;
  box-shadow:0 3px 12px rgba(19,94,186,.34)}
.btn.danger{color:var(--price);border-color:#f6bdb7}
.btn.danger:hover{background:var(--danger-bg);border-color:var(--price);color:var(--price)}

.slot-warn{background:var(--danger-bg);color:var(--price);border-radius:var(--r-md);
  border-left:3px solid var(--price);padding:10px 14px;font-size:12px;margin-bottom:12px;font-weight:500}

.category-block{margin-bottom:20px}
/* 카테고리는 밑줄 대신 칩으로 — 목록의 구분점이 부드러워진다 */
.category-block h3{display:inline-block;font-size:12px;margin:0 0 8px;padding:5px 12px;
  color:var(--accent-dark);font-weight:700;background:var(--accent-bg);border-radius:var(--r-pill);letter-spacing:-.2px}
/* 품목 행 — 아래 구분선으로 품목끼리 나누고, hover/선택 시엔 그 선이 테두리로 이어진다.
   (테두리 4면을 미리 잡아두고 아래쪽만 색을 주는 방식 — 상태가 바뀔 때 높이가 흔들리지 않는다) */
.item-row{display:grid;grid-template-columns:1fr 170px;gap:12px;align-items:start;
  padding:13px 14px;border:1px solid transparent;border-bottom-color:var(--line);
  border-radius:var(--r-md);transition:background .15s, border-color .15s, box-shadow .15s}
.item-row:last-child{border-bottom-color:transparent}
.item-row:hover{background:var(--panel-soft);border-color:var(--line)}
.item-row.selected{background:var(--accent-bg);border-color:#bcdcf8;box-shadow:inset 3px 0 0 var(--accent)}
.item-name{font-weight:700;font-size:13.5px;color:var(--ink)}
.item-desc{font-size:12px;color:var(--sub);margin-top:3px;line-height:1.5}
.item-meta{font-size:11px;color:var(--sub2);margin-top:4px}
.badge{display:inline-block;font-size:10px;padding:2px 8px;border-radius:var(--r-pill);
  background:var(--tab-bg);color:var(--sub);margin-right:6px;font-weight:700;vertical-align:1px}
.item-input-col{display:flex;flex-direction:column;gap:6px;align-items:flex-end}
.item-input-col input{width:100%;padding:7px 9px;border:1px solid var(--line);border-radius:var(--r-sm);
  font-size:12px;text-align:right;transition:border-color .15s, box-shadow .15s}
.item-input-col input:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}
.item-price{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-bottom:2px;width:100%}
.item-price-text{text-align:right;min-width:0}
.item-add-btn{flex-shrink:0;padding:7px 14px;border:1px solid var(--accent);border-radius:var(--r-pill);
  background:#fff;color:var(--accent);font-size:12px;font-weight:700;cursor:pointer;white-space:nowrap;
  transition:background .15s, color .15s, border-color .15s, box-shadow .15s}
.item-add-btn:hover{background:var(--accent);color:#fff;box-shadow:0 2px 8px rgba(28,143,237,.28)}
.item-add-btn.on{background:var(--accent);border-color:var(--accent);color:#fff}
.item-add-btn.on:hover{background:var(--price);border-color:var(--price);box-shadow:0 2px 8px rgba(241,71,56,.28)}
.item-price-label{display:block;font-size:11px;color:var(--sub2)}
.item-price-value{display:block;font-size:15.5px;font-weight:900;color:var(--price);letter-spacing:-.3px}
.item-price-value small{font-size:11px;font-weight:700;margin-left:1px}
.requires-warn{color:var(--price);font-size:11px;margin-top:4px}

.manday-edit{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
/* 단가를 직접 입력한 M/D 품목 — 투입일수는 금액에 쓰이지 않으므로 흐리게 */
.item-row.overridden .manday-edit{opacity:.45}
.item-row.overridden .item-price-label::after{content:' · 직접입력';color:var(--accent-dark);font-weight:700}
.manday-edit-box{display:flex;align-items:center;gap:5px;background:#fff;border:1px solid var(--line);
  border-radius:var(--r-pill);padding:4px 10px 4px 12px;font-size:11px;color:var(--sub);font-weight:500}
.manday-edit-box input{width:42px;padding:2px 5px;border:1px solid var(--line);border-radius:5px;
  font-size:11px;text-align:right;transition:border-color .15s, box-shadow .15s}
.manday-edit-box input:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}

.summary-list{max-height:320px;overflow:auto;border:1px solid var(--line-soft);border-radius:var(--r-md);
  background:var(--panel-soft)}
.summary-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:11px 13px;
  font-size:12px;border-bottom:1px solid var(--line-soft);background:#fff}
.summary-item:last-child{border-bottom:0}
.summary-item-info{min-width:0}
.summary-item-name{font-weight:700;font-size:13px;color:var(--ink)}
.summary-item-desc{font-size:11px;color:var(--sub2);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.summary-item-right{display:flex;align-items:center;gap:10px;flex-shrink:0}
.summary-item-price{font-size:12px;font-weight:700;color:var(--ink);white-space:nowrap}
.qty-stepper{display:flex;align-items:center;border:1px solid var(--line);border-radius:var(--r-pill);overflow:hidden}
.qty-stepper button{width:24px;height:24px;border:0;background:var(--panel-soft);color:var(--sub);
  font-size:13px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s, color .15s}
.qty-stepper button:hover{background:var(--accent-bg);color:var(--accent)}
.qty-stepper span{min-width:26px;text-align:center;font-size:12px;font-weight:600}
.summary-item-del{border:0;background:none;color:var(--sub2);font-size:18px;line-height:1;padding:0 2px}
.summary-item-del:hover{color:var(--price)}

/* 계산 카드는 따라다니되, 화면보다 길면 카드 안에서 스크롤되게 한다.
   그러지 않으면 카드 아래쪽(공급가액·부가세·합계·저장)이 페이지 맨 끝까지
   내려가야만 보인다 — 품목이 많을수록 심해진다. */
.calc-panel{position:sticky;top:78px}
@media (min-width:981px){
  .calc-panel{max-height:calc(100vh - 96px);overflow-y:auto;overscroll-behavior:contain}
}
.calc-row{display:flex;justify-content:space-between;padding:9px 2px;font-size:13px;
  border-bottom:1px solid var(--line-soft);color:var(--sub)}
.calc-row .num{font-weight:700;color:var(--ink)}
/* 합계는 선으로 가르지 않고 블록으로 띄운다 */
.calc-row.total{font-size:19px;font-weight:900;border-bottom:0;margin-top:12px;padding:14px 16px;
  color:var(--price);background:linear-gradient(180deg,#fff6f5,#fdeceb);border:1px solid #f8cec9;
  border-radius:var(--r-md);letter-spacing:-.4px}
.calc-row.total .num{color:var(--price)}
.mode-badge{display:inline-block;padding:3px 11px;border-radius:var(--r-pill);font-size:11px;font-weight:700}
.mode-badge.원가{background:var(--accent-bg);color:var(--accent)}
.mode-badge.역산{background:#fde9e8;color:var(--price)}

.manpower-table{width:100%;font-size:12px;border-collapse:collapse;margin-top:6px}
.manpower-table th,.manpower-table td{padding:6px 4px;border-bottom:1px solid var(--line-soft);text-align:right}
.manpower-table th{color:var(--sub);font-weight:700}
.manpower-table th:first-child,.manpower-table td:first-child{text-align:left}
.manpower-table input{width:50px;padding:5px 6px;border:1px solid var(--line);border-radius:6px;
  text-align:right;font-size:12px;transition:border-color .15s, box-shadow .15s}
.manpower-table input:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}

.warning-box{background:var(--warn-bg);color:var(--warn);border-radius:var(--r-md);
  border-left:3px solid var(--warn);padding:10px 14px;font-size:12px;margin-top:12px;line-height:1.6}
.warning-box div{margin-bottom:4px}
.amount-text{font-size:12px;color:var(--sub);margin-top:8px}
.save-bar{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap}
.save-status{font-size:12px;color:var(--accent);margin-top:8px;min-height:16px;font-weight:500}
.save-status.warn{color:var(--warn)}
.save-status.error{color:var(--price)}

/* ── 타견적 (내 견적 기반 비교 견적서) ── */
.rival-note{margin:0 0 14px;padding:11px 14px;background:var(--warn-bg);border-left:3px solid var(--warn);
  border-radius:var(--r-md);font-size:12px;color:var(--warn);line-height:1.7}
.rival-note b{font-weight:800}
.rival-note a{color:var(--warn);text-decoration:underline}
.rival-list{display:grid;gap:12px;margin-bottom:16px}
.rival-row{display:grid;grid-template-columns:78px 1fr 230px;gap:14px;align-items:start;
  padding:14px 16px;border:1px solid var(--line);border-radius:var(--r-md);background:#fff}
.rival-add{display:grid;grid-template-columns:104px 1fr;gap:14px;align-items:start;
  padding:14px 16px;border:1px dashed var(--line);border-radius:var(--r-md);background:var(--panel-soft)}
@media (max-width:900px){.rival-row,.rival-add{grid-template-columns:1fr}}
.rival-no{font-size:12.5px;font-weight:800;color:var(--accent-dark);background:var(--accent-bg);
  border-radius:var(--r-pill);padding:5px 0;text-align:center;white-space:nowrap}
.rival-no.new{background:var(--tab-bg);color:var(--sub)}
.rival-main{min-width:0}
.rival-title{font-size:14.5px;font-weight:800;letter-spacing:-.3px}
.rival-pct{display:inline-block;margin-left:6px;padding:2px 9px;border-radius:var(--r-pill);
  background:#fdeceb;color:var(--price);font-size:11px;font-weight:700;vertical-align:2px}
.rival-sub{margin-top:4px;font-size:11.5px;color:var(--sub2)}
.rival-edit{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.rival-edit input{flex:1;min-width:120px;padding:7px 10px;border:1px solid var(--line);
  border-radius:var(--r-sm);font-size:12.5px;transition:border-color .15s, box-shadow .15s}
.rival-edit input:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}
.rival-fields{display:grid;grid-template-columns:repeat(2,1fr);gap:10px 12px}
.rival-fields .field-wide{grid-column:1 / -1}
.rival-side{display:flex;flex-direction:column;gap:8px;align-items:flex-end}
.rival-amount{font-size:19px;font-weight:900;color:var(--price);letter-spacing:-.5px}
.rival-amount small{font-size:11px;font-weight:700;margin-left:2px}
.rival-diff{width:100%;text-align:right;padding:9px 12px;border-radius:var(--r-md);
  border:1px solid var(--line-soft);background:var(--panel-soft)}
.rival-diff-label{display:block;font-size:10.5px;color:var(--sub2)}
.rival-diff-value{display:block;font-size:14px;font-weight:900;letter-spacing:-.3px;margin-top:2px}
.rival-diff-pct{display:block;font-size:11px;font-weight:700;margin-top:1px}
.rival-diff.up{background:#fdeceb;border-color:#f8cec9}
.rival-diff.up .rival-diff-value,.rival-diff.up .rival-diff-pct{color:var(--price)}
.rival-diff.down{background:var(--accent-bg);border-color:#bcdcf8}
.rival-diff.down .rival-diff-value,.rival-diff.down .rival-diff-pct{color:var(--accent-dark)}
.rival-actions{display:flex;align-items:center;gap:10px}
.rival-full{margin:0;font-size:12.5px;color:var(--price)}

/* 비교 견적서 생성 중 덮개 — 폼 POST 가 돌아올 때까지 무엇이 진행되는지 보여준다 */
body.rgen-open{overflow:hidden}
.rgen{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
  background:rgba(17,17,17,.46);backdrop-filter:blur(3px);animation:rgen-in .18s ease-out}
@keyframes rgen-in{from{opacity:0}to{opacity:1}}
.rgen-box{width:min(320px,86vw);padding:30px 26px 26px;border-radius:var(--r-lg);
  background:#fff;box-shadow:0 18px 50px rgba(16,24,40,.22);text-align:center}
/* 문서가 한 줄씩 채워지는 모습 */
.rgen-doc{position:relative;width:86px;height:110px;margin:0 auto 20px;border-radius:6px;
  background:#fff;border:1px solid var(--line);box-shadow:0 2px 10px rgba(16,24,40,.08);
  padding:14px 12px 0;text-align:left}
.rgen-line{display:block;height:6px;margin-bottom:7px;border-radius:3px;background:var(--line-soft);
  transform-origin:left center;animation:rgen-fill 2.8s ease-in-out infinite}
.rgen-line:nth-child(1){width:100%}
.rgen-line:nth-child(2){width:78%;animation-delay:.35s}
.rgen-line:nth-child(3){width:88%;animation-delay:.7s}
.rgen-line:nth-child(4){width:56%;animation-delay:1.05s}
@keyframes rgen-fill{
  0%{transform:scaleX(.1);background:var(--line-soft)}
  35%{transform:scaleX(1);background:var(--accent)}
  70%{transform:scaleX(1);background:var(--accent)}
  100%{transform:scaleX(1);background:var(--line-soft)}
}
/* 마지막에 도장처럼 찍히는 원 (실제 직인은 찍지 않는다 — 진행 표시용 장식이다) */
.rgen-stamp{position:absolute;right:-6px;bottom:-6px;width:34px;height:34px;border-radius:50%;
  border:3px solid var(--price);opacity:0;animation:rgen-stamp 2.8s ease-in-out infinite}
@keyframes rgen-stamp{
  0%,55%{opacity:0;transform:scale(1.5) rotate(-12deg)}
  70%{opacity:.9;transform:scale(1) rotate(-12deg)}
  92%{opacity:.9}
  100%{opacity:0}
}
.rgen-title{font-size:15px;font-weight:800;color:var(--ink);letter-spacing:-.3px}
.rgen-step{margin-top:6px;font-size:12.5px;color:var(--sub);min-height:18px}
.rgen-bar{margin-top:16px;height:4px;border-radius:2px;background:var(--line-soft);overflow:hidden}
.rgen-bar i{display:block;width:40%;height:100%;border-radius:2px;background:var(--accent);
  animation:rgen-slide 1.15s ease-in-out infinite}
@keyframes rgen-slide{0%{transform:translateX(-105%)}100%{transform:translateX(255%)}}
/* 움직임을 줄이는 설정에서는 애니메이션을 멈추고 상태만 보여준다 */
.rgen-still,.rgen-still *{animation:none!important}
.rgen-still .rgen-line{background:var(--accent);transform:none}
.rgen-still .rgen-bar i{width:100%}
@media (prefers-reduced-motion:reduce){
  .rgen,.rgen *{animation:none!important}
  .rgen .rgen-line{background:var(--accent);transform:none}
  .rgen .rgen-bar i{width:100%}
}

/* 비교 견적서 — 내 견적서(print)와 다른 양식 */
.rp-body{max-width:900px;margin:0 auto;padding:34px 38px;background:#fff;color:#111}
.rp-notice{padding:12px 16px;border:1px dashed var(--warn);border-radius:var(--r-md);
  background:var(--warn-bg);color:var(--warn);font-size:12px;line-height:1.75;margin-bottom:26px}
/* 머리글 — 제목 아래에 정보 목록을 두고, 라벨·값이 각각 같은 좌측 끝선에 맞춰 떨어진다 */
.rp-head{padding-bottom:20px;border-bottom:3px solid #111;margin-bottom:22px}
.rp-kicker{display:inline-block;padding:3px 11px;border-radius:var(--r-pill);
  background:#111;color:#fff;font-size:11px;font-weight:700;letter-spacing:1px}
.rp-title h1{margin:10px 0 0;font-size:30px;font-weight:900;letter-spacing:6px}
.rp-meta{display:grid;grid-template-columns:1fr 1fr;gap:7px 40px;margin:20px 0 0;font-size:12.5px}
@media (max-width:700px){.rp-meta{grid-template-columns:1fr}}
.rp-meta > div{display:grid;grid-template-columns:88px 1fr;align-items:baseline;gap:10px}
.rp-meta dt{color:#777;font-weight:500}
.rp-meta dd{margin:0;font-weight:700;text-align:left}

/* 항목표 — 바깥 테두리 + 머리글 아래 두꺼운 선 + 행마다 연한 구분선 */
.rp-items{width:100%;border-collapse:collapse;font-size:12.5px;border:1px solid #111}
.rp-items thead th{padding:10px 12px;background:#f6f6f7;
  border-bottom:2px solid #111;color:#444;font-weight:700;
  text-align:left;font-size:11.5px;letter-spacing:.3px}
.rp-items tbody td{padding:11px 12px;border-bottom:1px solid #e3e3e5;vertical-align:top}
.rp-items tbody tr:last-child td{border-bottom:0}
/* 숫자 칸은 왼쪽에 아주 연한 세로선을 둬 열이 눈에 잡히게 한다 */
.rp-items .rp-n,.rp-items .rp-c{border-left:1px solid #eeeef0}
.rp-items .rp-c{text-align:center}
.rp-items .rp-n{text-align:right;font-variant-numeric:tabular-nums}
.rp-items thead .rp-n,.rp-items thead .rp-c{border-left:1px solid #dcdcde}
.rp-cat{color:#888;font-size:11.5px;font-weight:700}
.rp-name{display:block;font-weight:700}
.rp-desc{display:block;margin-top:2px;color:#777;font-size:11.5px}
.rp-sum{margin-top:20px;border-top:2px solid #111;padding-top:14px}
.rp-sum-row{display:flex;justify-content:space-between;padding:6px 2px;font-size:13px;color:#555}
.rp-sum-row b{color:#111;font-weight:700;font-variant-numeric:tabular-nums}
.rp-sum-row.total{margin-top:8px;padding:13px 16px;background:#111;border-radius:var(--r-md);
  color:#fff;font-size:16px;font-weight:900}
.rp-sum-row.total b{color:#fff}
.rp-sum-text{margin-top:8px;text-align:right;font-size:12px;color:#777}
.rp-compare{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:22px}
.rp-compare > div{padding:12px 14px;border:1px solid #e6e6e6;border-radius:var(--r-md);text-align:center}
.rp-compare span{display:block;font-size:11px;color:#888}
.rp-compare b{display:block;margin-top:4px;font-size:14px;font-weight:900}
.rp-compare .up{background:#fdeceb;border-color:#f8cec9}
.rp-compare .up b{color:var(--price)}
.rp-compare .down{background:var(--accent-bg);border-color:#bcdcf8}
.rp-compare .down b{color:var(--accent-dark)}
.rp-memo{margin-top:20px;padding:12px 14px;background:#f7f7f8;border-radius:var(--r-md);font-size:12.5px}
.rp-foot{margin:26px 0 0;padding-top:14px;border-top:1px solid #e6e6e6;
  font-size:11.5px;color:#999;line-height:1.7}
@media print{.rp-notice{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .rp-sum-row.total{-webkit-print-color-adjust:exact;print-color-adjust:exact}}

/* ── 견적 상담 (요청 · 제안 · 협의) ── */
.rfq-guide{margin:0;font-size:13px;color:var(--sub);line-height:1.7}
.rfq-back{margin:18px 0 32px;font-size:13px}

.rfq-list{display:grid;gap:10px}
.rfq-card{display:block;padding:16px 18px;border:1px solid var(--line);border-radius:var(--r-md);
  background:#fff;color:var(--ink);transition:border-color .15s, box-shadow .15s, transform .15s}
.rfq-card:hover{border-color:var(--accent);box-shadow:var(--shadow-md);transform:translateY(-1px);color:var(--ink)}
.rfq-card-top{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.rfq-card-title{font-size:15px;font-weight:800;letter-spacing:-.3px;margin-bottom:6px}
.rfq-card-meta{display:flex;flex-wrap:wrap;gap:14px;font-size:12px;color:var(--sub)}
.rfq-card-meta b{color:var(--ink);font-weight:700}
.rfq-card-meta .rfq-date{margin-left:auto;color:var(--sub2)}
.rfq-mine{font-size:11px;font-weight:700;color:var(--accent-dark);background:var(--accent-bg);
  padding:2px 9px;border-radius:var(--r-pill)}

.rfq-status{display:inline-block;padding:3px 10px;border-radius:var(--r-pill);
  font-size:11px;font-weight:700;letter-spacing:0}
.rfq-status.open{background:var(--accent-bg);color:var(--accent-dark)}
.rfq-status.selected{background:#e6f7f0;color:#0f6e56}
.rfq-status.closed{background:var(--tab-bg);color:var(--sub)}

.rfq-info{width:100%;border-collapse:collapse;font-size:13px}
.rfq-info td{padding:9px 4px;border-bottom:1px solid var(--line-soft);vertical-align:top}
.rfq-info td.k{width:110px;color:var(--sub);font-weight:600}
.rfq-lines{margin-top:16px;padding:14px 16px;background:var(--panel-soft);border-radius:var(--r-md)}
.rfq-lines-title{font-size:12.5px;font-weight:700;color:var(--sub);margin-bottom:8px}
.rfq-lines ul{margin:0;padding:0;list-style:none;display:grid;gap:6px}
.rfq-lines li{font-size:12.5px;color:var(--ink)}
.rfq-lines li em{font-style:normal;color:var(--sub2);margin-left:4px}

/* 제안 한 건 */
.bid{border:1px solid var(--line);border-radius:var(--r-md);padding:16px 18px;margin-bottom:12px}
.bid.selected{border-color:#8fd8bd;background:#f4fcf8;box-shadow:inset 3px 0 0 #0f6e56}
.bid.withdrawn{opacity:.6}
.bid-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap}
.bid-vendor b{font-size:14.5px;font-weight:800}
.bid-contact{font-size:11.5px;color:var(--sub2);margin-top:3px}
.bid-amount{text-align:right;white-space:nowrap}
.bid-amount-value{font-size:20px;font-weight:900;color:var(--price);letter-spacing:-.5px}
.bid-amount-value small{font-size:12px;font-weight:700;margin-left:2px}
.bid-days{display:block;font-size:11.5px;color:var(--sub2);margin-top:2px}
.bid-badge{display:inline-block;margin-left:6px;padding:2px 9px;border-radius:var(--r-pill);
  font-size:10.5px;font-weight:700;vertical-align:2px}
.bid-badge.active{background:var(--accent-bg);color:var(--accent-dark)}
.bid-badge.selected{background:#e6f7f0;color:#0f6e56}
.bid-badge.rejected{background:var(--tab-bg);color:var(--sub2)}
.bid-badge.withdrawn{background:var(--danger-bg);color:var(--price)}
.bid-message{margin-top:12px;padding:12px 14px;background:var(--panel-soft);
  border-radius:var(--r-sm);font-size:12.5px;line-height:1.65;color:var(--ink)}

/* 협의 스레드 */
.thread{margin-top:14px;border-top:1px solid var(--line-soft);padding-top:12px}
.thread-empty{margin:0 0 10px;font-size:12px;color:var(--sub2)}
.thread-msg{margin-bottom:10px;max-width:78%}
.thread-msg .thread-meta{display:flex;gap:8px;align-items:baseline;font-size:11px;color:var(--sub2);margin-bottom:3px}
.thread-msg .thread-meta b{color:var(--sub);font-weight:700}
.thread-msg .thread-body{padding:9px 13px;border-radius:var(--r-md);font-size:12.5px;line-height:1.6}
.thread-msg.owner .thread-body{background:var(--accent-bg);color:var(--accent-dark)}
.thread-msg.vendor{margin-left:auto}
.thread-msg.vendor .thread-meta{justify-content:flex-end}
.thread-msg.vendor .thread-body{background:var(--panel-soft);border:1px solid var(--line-soft)}
/* system 은 금액 수정·선정 결과 같은 사실 기록이라 가운데 한 줄로 둔다 */
.thread-msg.system{max-width:100%;margin:12px 0;text-align:center}
.thread-msg.system .thread-meta{display:none}
.thread-msg.system .thread-body{display:inline-block;background:transparent;color:var(--sub2);
  font-size:11.5px;border:1px dashed var(--line);padding:5px 12px}
.thread-form{display:flex;gap:8px;margin-top:10px}
.thread-form textarea{flex:1;padding:9px 12px;border:1px solid var(--line);border-radius:var(--r-sm);
  font-family:inherit;font-size:12.5px;resize:vertical;transition:border-color .15s, box-shadow .15s}
.thread-form textarea:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}
.thread-form button{flex-shrink:0;align-self:flex-start}

/* 요청 폼의 여러 줄 입력 */
.field textarea{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-sm);
  font-family:inherit;font-size:13px;color:var(--ink);resize:vertical;
  transition:border-color .15s, box-shadow .15s}
.field textarea:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}
.field input:disabled,.field textarea:disabled{background:var(--panel-soft);color:var(--sub2)}

.link-accent{border:0;background:none;padding:0;font:inherit;font-size:13px;color:var(--accent);cursor:pointer}
.link-accent:hover{text-decoration:underline}
.util-tag{display:inline-block;margin-left:3px;padding:1px 7px;border-radius:var(--r-pill);
  background:var(--accent-bg);color:var(--accent-dark);font-size:10.5px;font-weight:700}

/* 가입 화면 — 발주자 / 업체 선택 */
.auth-type{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:20px}
.auth-type-opt{display:block;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);
  cursor:pointer;transition:border-color .15s, background .15s}
.auth-type-opt.on{border-color:var(--accent);background:var(--accent-bg)}
.auth-type-opt input{margin-right:6px;accent-color:var(--accent)}
.auth-type-opt b{font-size:13.5px;font-weight:800}
.auth-type-opt span{display:block;margin-top:4px;font-size:11.5px;color:var(--sub);line-height:1.5}

/* ── 게시판 (구매상담 · 역제안) ── */
.board-tabs{display:flex;gap:8px;margin-bottom:16px}
.board-tab{display:flex;align-items:center;gap:7px;padding:10px 20px;border:1px solid var(--line);
  border-radius:var(--r-pill);background:#fff;color:var(--sub);font-size:13.5px;font-weight:600;
  transition:border-color .15s, background .15s, color .15s}
.board-tab:hover{border-color:var(--accent);color:var(--accent-dark);background:var(--accent-bg)}
.board-tab.on{background:var(--accent);border-color:var(--accent);color:#fff;
  box-shadow:0 2px 8px rgba(28,143,237,.28)}
.board-tab span{font-size:11.5px;font-weight:700;padding:1px 8px;border-radius:var(--r-pill);
  background:var(--tab-bg);color:var(--sub)}
.board-tab.on span{background:rgba(255,255,255,.24);color:#fff}
/* 카드 제목 오른쪽의 전체보기 링크 */
.board-more{margin-left:auto;font-size:12px;font-weight:600;color:var(--accent)}
.board-more:hover{text-decoration:underline}
.board-search{display:flex;gap:8px;margin-bottom:14px}
.board-search input{flex:1;max-width:320px;padding:9px 12px;border:1px solid var(--line);
  border-radius:var(--r-sm);font-size:13px;transition:border-color .15s, box-shadow .15s}
.board-search input:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}

.post-list{display:grid}
.post-row{display:flex;align-items:center;gap:12px;padding:13px 6px;color:var(--ink);
  border-bottom:1px solid var(--line-soft);transition:background .15s}
.post-row:last-child{border-bottom:0}
.post-row:hover{background:var(--panel-soft);color:var(--ink)}
.post-row-main{min-width:0;flex:1}
.post-row-title{font-size:13.5px;font-weight:700;letter-spacing:-.2px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.post-row-meta{margin-top:4px;font-size:11.5px;color:var(--sub2)}
.post-row-meta b{color:var(--sub);font-weight:700}
.post-row-amount{flex-shrink:0;font-size:14px;font-weight:900;color:var(--price);white-space:nowrap}
.post-row-amount small{font-size:11px;font-weight:700;margin-left:1px}
/* 메인에 얹는 미리보기는 한 줄을 좁게 */
.post-list.compact .post-row{padding:11px 4px}
.post-list.compact .post-row-title{font-size:13px}
.post-replies{display:inline-block;margin-left:6px;padding:0 7px;border-radius:var(--r-pill);
  background:var(--accent-bg);color:var(--accent-dark);font-size:10.5px;font-weight:700;vertical-align:1px}

.post-badge{display:inline-block;padding:2px 9px;border-radius:var(--r-pill);
  font-size:10.5px;font-weight:700;margin-right:5px;vertical-align:1px}
.post-badge.consult{background:var(--accent-bg);color:var(--accent-dark)}
/* reverse 게시판은 없앴다 — 지난 글이 남아 있을 때를 위해 스타일만 둔다 */
.post-badge.reverse{background:#f1ecfd;color:#5b3aa0}
.post-badge.done{background:#e6f7f0;color:#0f6e56}
.post-badge.match{background:var(--accent-bg);color:var(--accent-dark)}
/* 견적상담 행 오른쪽의 제안 건수 */
.post-row-bids{flex-shrink:0;text-align:right;white-space:nowrap;line-height:1.2}
.post-row-bids b{font-size:16px;font-weight:900;color:var(--accent)}
.post-row-bids small{display:block;font-size:10.5px;color:var(--sub2);font-weight:600}

.post-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}
.post-title{margin:8px 0 6px;font-size:19px;font-weight:800;letter-spacing:-.4px;color:var(--ink)}
.post-meta{font-size:12px;color:var(--sub2)}
.post-meta b{color:var(--sub);font-weight:700}
.post-amount{text-align:right;white-space:nowrap}
.post-amount-label{display:block;font-size:11px;color:var(--sub2)}
.post-amount-value{font-size:21px;font-weight:900;color:var(--price);letter-spacing:-.5px}
.post-amount-value small{font-size:12px;font-weight:700;margin-left:2px}
.post-body{margin-top:16px;padding-top:16px;border-top:1px solid var(--line-soft);
  font-size:13.5px;line-height:1.75;color:var(--ink)}

.reply{padding:13px 0;border-bottom:1px solid var(--line-soft)}
.reply:last-of-type{border-bottom:0}
.reply.vendor{padding-left:12px;border-left:3px solid var(--accent-bg)}
.reply-meta{display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--sub2);margin-bottom:5px}
.reply-meta b{color:var(--sub);font-weight:700}
.reply-body{font-size:13px;line-height:1.7}

/* ── 알림 ── */
.util-notify{position:relative}
.util-badge{display:inline-block;min-width:17px;margin-left:4px;padding:0 5px;border-radius:var(--r-pill);
  background:var(--price);color:#fff;font-size:10.5px;font-weight:800;line-height:17px;text-align:center;
  vertical-align:1px}
.notify-list{display:grid}
.notify-row{display:flex;align-items:center;gap:12px;padding:13px 8px;color:var(--ink);
  border-bottom:1px solid var(--line-soft);transition:background .15s}
.notify-row:last-child{border-bottom:0}
.notify-row:hover{background:var(--panel-soft);color:var(--ink)}
/* 안 읽은 알림은 왼쪽에 색 띠 + 진한 글씨 */
.notify-row.unread{background:var(--accent-bg);box-shadow:inset 3px 0 0 var(--accent)}
.notify-row.unread .notify-title{font-weight:700}
.notify-icon{flex-shrink:0;width:26px;text-align:center;font-size:15px}
.notify-main{min-width:0;flex:1}
.notify-kind{display:block;font-size:10.5px;font-weight:700;color:var(--sub2)}
.notify-title{display:block;margin-top:2px;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.notify-time{flex-shrink:0;font-size:11px;color:var(--sub2);white-space:nowrap}

/* ── 회원목록 ── */
.member-tabs{margin-bottom:14px}

/* 시인성 — 푸른 머리글 + 바깥 테두리 + 행·열 구분선.
   행 왼쪽에는 역할별 색 띠를 둬서 사용자/업체/관리자가 한눈에 갈린다.

   표 스타일을 여기서 처음부터 정의한다. 예전에는 admin.php 의 인라인 <style> 에 있는
   .admin-table 에 얹어 썼는데, 그 스타일은 이 페이지에 실리지 않아 width:100% 가 빠지고
   표가 카드 폭을 다 쓰지 못했다 (979px / 1240px). */
.member-table-wrap{border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden}
.member-table{width:100%;border-collapse:collapse;font-size:12.5px}
/* 머리글 — 카드 폭을 좌우 끝까지 채운다. 래퍼가 모서리를 잘라 흰 틈이 남지 않는다. */
.member-table thead th{background:var(--accent);color:#fff;font-weight:700;
  padding:11px 10px;text-align:left;font-size:11.5px;letter-spacing:.2px;
  border-bottom:2px solid var(--accent-dark);
  border-left:1px solid rgba(255,255,255,.22);white-space:nowrap}
.member-table thead th:first-child{border-left:0}
.member-table tbody td{vertical-align:middle;border-bottom:1px solid var(--line);
  border-left:1px solid var(--line-soft);padding:9px 10px}
/* 배지·날짜·연락처는 줄바꿈되면 칸이 두 줄로 늘어나 표가 어수선해진다 */
.member-table .member-nowrap{white-space:nowrap}
.member-table tbody td:first-child{border-left:0}
.member-table tbody tr:last-child td{border-bottom:0}
.member-table tbody tr:hover td{background:var(--accent-bg)}
/* 역할 띠 — 첫 칸 왼쪽 안쪽 그림자로 그려 테두리 두께가 변하지 않는다 */
.member-row td:first-child{box-shadow:inset 3px 0 0 var(--line)}
.member-row.user td:first-child{box-shadow:inset 3px 0 0 var(--accent)}
.member-row.vendor td:first-child{box-shadow:inset 3px 0 0 #7b5bc4}
.member-row.admin td:first-child{box-shadow:inset 3px 0 0 #111}
.member-role{display:inline-block;padding:2px 9px;border-radius:var(--r-pill);font-size:11px;font-weight:700;white-space:nowrap}
.member-role.user{background:var(--accent-bg);color:var(--accent-dark)}
.member-role.vendor{background:#f1ecfd;color:#5b3aa0}
.member-role.admin{background:#111;color:#fff}
.member-name{font-weight:700}
.member-company{display:block;margin-top:2px;font-size:11px;color:var(--sub2)}
.member-flag{display:inline-block;margin-left:5px;padding:1px 7px;border-radius:var(--r-pill);
  background:var(--danger-bg);color:var(--price);font-size:10px;font-weight:700}
.member-act{font-size:11.5px;color:var(--sub2)}
.member-act b{color:var(--ink);font-weight:700}
.member-dash{color:var(--sub2)}
.member-optin{display:inline-block;padding:1px 7px;border-radius:var(--r-pill);
  background:var(--panel-soft);color:var(--sub);font-size:10.5px;font-weight:700}
.member-off td{background:#fbfbfc;color:var(--sub2)}
.member-off.user td:first-child,.member-off.vendor td:first-child{box-shadow:inset 3px 0 0 var(--line)}
.member-foot{margin:14px 0 0;font-size:11.5px;color:var(--sub2);line-height:1.8}
.member-foot code{background:var(--panel-soft);padding:1px 5px;border-radius:3px;font-size:11px}

/* quotes list */
table.list{width:100%;border-collapse:collapse;font-size:13px}
table.list th,table.list td{padding:10px 12px;border-bottom:1px solid var(--line);text-align:left}
table.list th{color:var(--sub);font-weight:700;font-size:12px;background:var(--panel-soft)}
table.list tr:hover{background:var(--panel-soft)}
/* 표 안에서 링크처럼 보이는 삭제 버튼 — form 이라 링크로 만들 수 없다(GET 삭제 금지) */
.inline-form{display:inline}
.link-danger{border:0;background:none;padding:0;font:inherit;font-size:13px;color:var(--price);cursor:pointer}
.link-danger:hover{text-decoration:underline}
/* 목록 안의 '복제' 처럼 위험하지 않은 폼 버튼 — 링크와 같아 보이게 한다 */
.link-plain{border:0;background:none;padding:0;font:inherit;font-size:13px;color:var(--accent);cursor:pointer}
.link-plain:hover{text-decoration:underline}

/* print */
.print-body{max-width:900px;margin:0 auto;padding:30px;background:#fff;color:#111}
.print-title{text-align:center;font-size:26px;font-weight:900;letter-spacing:8px;margin:10px 0 24px}
.print-head-table{width:100%;border-collapse:collapse;font-size:13px;margin-bottom:18px}
.print-head-table td{border:1px solid #333;padding:6px 10px}
.print-head-table td.k{background:#f3f2ee;font-weight:700;width:110px}
.print-amount-box{border:2px solid var(--accent);border-radius:var(--r-md);padding:12px 16px;font-size:15px;font-weight:700;text-align:center;margin-bottom:18px;color:var(--accent-dark)}
.print-items{width:100%;border-collapse:collapse;font-size:12px;margin-bottom:16px}
.print-items th,.print-items td{border:1px solid #888;padding:5px 7px}
.print-items th{background:#f3f2ee}
.print-items td.num{text-align:right}
.print-cat-row td{background:#fafaf8;font-weight:700}
.print-totals{width:320px;margin-left:auto;border-collapse:collapse;font-size:13px;margin-bottom:18px}
.print-totals td{padding:5px 8px;border-bottom:1px solid #ddd}
.print-totals tr.grand td{border-top:2px solid #111;border-bottom:0;font-weight:900;font-size:15px;color:var(--price)}
.print-terms{font-size:12px;margin-bottom:16px}
.print-terms table{width:100%;border-collapse:collapse}
.print-terms td{border:1px solid #ccc;padding:5px 8px}
.print-terms td.k{width:120px;background:#f8f8f6;font-weight:600}
.print-stamp-wrap{display:flex;justify-content:flex-end;margin:24px 0}
.print-stamp{font-size:14px;line-height:1.9;text-align:right}
/* 도장은 "(인)" 글자 위에 겹쳐 찍는다 — 인쇄물에서 날인 위치가 자연스럽게 맞는다 */
.print-seal{position:relative;display:inline-block;margin-left:2px}
.print-seal img{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:64px;height:64px;object-fit:contain;opacity:.88;pointer-events:none}
.print-actions{max-width:900px;margin:14px auto;text-align:right}
/* 도장·표 배경이 인쇄에서 빠지지 않게 색 보정을 끈다 */
@media print{.print-actions{display:none}body{background:#fff}
  .print-seal img{-webkit-print-color-adjust:exact;print-color-adjust:exact}}

/* 마이페이지 — 발신 정보 */
.field-wide{grid-column:1 / -1}
.sender-notice{background:var(--accent-bg);color:var(--accent-dark);border-radius:var(--r-sm);padding:9px 12px;font-size:12.5px;font-weight:600;margin-bottom:12px}
.sender-error{background:var(--danger-bg);color:var(--price);border-radius:var(--r-sm);padding:9px 12px;font-size:12.5px;font-weight:600;margin-bottom:12px}
.sender-stamp-row{display:grid;grid-template-columns:1fr 190px;gap:16px;align-items:start;margin-top:14px}
@media (max-width:700px){.sender-stamp-row{grid-template-columns:1fr}}
.sender-stamp-file label{display:block;font-size:12px;color:var(--sub);margin-bottom:6px}
.sender-stamp-file label .hint{font-size:11px;color:var(--sub2);margin-left:4px}
.sender-stamp-file input[type=file]{width:100%;padding:7px 9px;border:1px dashed var(--line);border-radius:var(--r-sm);font-size:12.5px;background:var(--panel-soft)}
.sender-stamp-help{margin:7px 0 0;font-size:11.5px;color:var(--sub2);line-height:1.7}
.sender-stamp-preview{display:flex;flex-direction:column;align-items:center;gap:6px;
  border:1px solid var(--line-soft);border-radius:var(--r-md);padding:12px;background:var(--panel-soft)}
.sender-stamp-label{font-size:11px;color:var(--sub2)}
.sender-stamp-preview img{width:84px;height:84px;object-fit:contain}
.sender-stamp-name{font-size:11px;color:var(--sub);word-break:break-all;text-align:center}
.sender-stamp-empty{font-size:12px;color:var(--sub2);padding:24px 0;font-weight:700}
.sender-actions{display:flex;gap:8px;margin-top:14px}
/* 저장 중 오버레이 — 화면 가운데 도는 아이콘 */
.save-overlay{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.55)}
.save-overlay[hidden]{display:none}
.save-overlay-box{display:flex;align-items:center;gap:12px;padding:16px 22px;border-radius:var(--r-md);
  background:var(--panel);box-shadow:var(--shadow-md);font-weight:700;color:var(--ink)}
.save-spinner{width:26px;height:26px;border-radius:50%;border:3px solid var(--accent-bg);
  border-top-color:var(--accent);animation:save-spin .8s linear infinite}
@keyframes save-spin{to{transform:rotate(360deg)}}

/* ── 회원가입 / 로그인 2단 레이아웃 ── */
.auth-body{margin:0;background:var(--bg)}
.auth-split{display:grid;grid-template-columns:1fr 1fr;min-height:100vh;max-width:1240px;margin:0 auto}
@media (max-width:900px){.auth-split{grid-template-columns:1fr}}

.auth-aside{display:flex;flex-direction:column;justify-content:center;padding:56px 48px}
@media (max-width:900px){.auth-aside{padding:40px 24px 8px}}

.auth-aside h1{margin:0 0 32px;font-size:30px;font-weight:900;line-height:1.4;letter-spacing:-.8px;color:var(--ink)}
@media (max-width:900px){.auth-aside h1{font-size:23px}}

.auth-stats{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.auth-stat{background:var(--panel);border:1px solid var(--line-soft);border-radius:12px;padding:18px 20px}
.auth-stat strong{display:block;font-size:27px;font-weight:900;letter-spacing:-1px;color:var(--ink);line-height:1.2}
.auth-stat strong em{font-style:normal;font-size:17px;margin-left:2px;color:var(--accent)}
.auth-stat span{display:block;margin-top:4px;font-size:12.5px;color:var(--sub)}

.auth-aside-line{height:1px;background:var(--line);margin:30px 0 18px}
.auth-aside-note{margin:0;font-size:12.5px;color:var(--sub2);line-height:1.7}
.auth-aside-note b{display:block;color:var(--sub);font-weight:700}

.auth-main{display:flex;align-items:center;justify-content:center;padding:40px 24px}
.auth-card{width:100%;max-width:440px;background:var(--panel);border:1px solid var(--line-soft);
  border-radius:16px;padding:36px 34px;box-shadow:0 4px 24px rgba(0,0,0,.05)}
@media (max-width:900px){.auth-card{padding:28px 22px}}
.auth-card h2{margin:0 0 26px;font-size:21px;font-weight:800;color:var(--ink)}
/* 입력칸 라벨 — placeholder 만 두면 스크린리더가 무슨 칸인지 알 수 없다 */
.auth-label{display:block;margin-bottom:6px;font-size:12.5px;font-weight:600;color:var(--sub)}

.auth-errors{background:var(--danger-bg);border-radius:8px;padding:12px 14px;margin-bottom:18px;
  font-size:12.5px;color:var(--price);line-height:1.7}

.auth-field{margin-bottom:14px}
.auth-field input{width:100%;padding:15px 16px;border:1px solid var(--line);border-radius:8px;
  font-size:14px;color:var(--ink);background:#fff;font-family:inherit}
.auth-field input::placeholder{color:var(--sub2)}
.auth-field input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg)}
.auth-help{margin:7px 2px 0;font-size:12px;color:var(--sub2)}

.auth-pw{position:relative}
.auth-pw input{padding-right:48px}
.auth-eye{position:absolute;top:50%;right:6px;transform:translateY(-50%);width:36px;height:36px;
  border:0;background:none;font-size:15px;opacity:.35;border-radius:50%;line-height:1}
.auth-eye:hover{opacity:.7;background:var(--panel-soft)}
.auth-eye.on{opacity:.95}

.auth-agree{margin:22px 0 20px}
.auth-agree-all{display:flex;align-items:center;gap:10px;padding-bottom:14px;
  border-bottom:1px solid var(--line-soft);font-size:14px;font-weight:700;color:var(--ink);cursor:pointer}
.auth-agree-row{display:flex;align-items:flex-start;gap:10px;padding-top:13px;
  font-size:13px;color:var(--sub);cursor:pointer;line-height:1.5}
.auth-agree input[type=checkbox]{width:18px;height:18px;flex-shrink:0;accent-color:var(--accent);margin:0}
.auth-agree-row input[type=checkbox]{margin-top:1px}
.auth-agree-row b{font-weight:700}
.auth-agree-row b.req{color:var(--accent)}
.auth-agree-row b.opt{color:var(--sub2)}
.auth-agree-row em{display:block;margin-top:3px;font-style:normal;font-size:11.5px;color:var(--sub2)}

.auth-submit{width:100%;padding:16px;border:0;border-radius:8px;background:var(--accent);
  color:#fff;font-size:15px;font-weight:700;font-family:inherit}
.auth-submit:hover{background:var(--accent-dark)}
.auth-alt{margin:18px 0 0;text-align:center;font-size:13px;color:var(--sub)}

/* ── 공통 푸터 ── */
/* ── 푸터 위 링크 바 ──
   위아래 구분선만 있는 얇은 띠. 배경을 주지 않아 흰 화면(index)과 회색 화면 모두에서
   같은 모양으로 보인다. 아래 푸터가 자기 border-top 을 갖지 않는 이유는
   이 띠의 아래 선과 겹쳐 2px 로 보이기 때문이다. */
.site-links{margin-top:44px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.site-links-inner{max-width:1272px;margin:0 auto;padding:15px 16px;
  display:flex;flex-wrap:wrap;gap:8px 22px;align-items:center}
.site-links a{font-size:12.5px;color:var(--sub);font-weight:500}
.site-links a:hover{color:var(--accent)}
/* 약관·개인정보처리방침 — 법정 고지 항목이라 다른 메뉴보다 눈에 들어와야 한다 */
.site-links a.strong{color:var(--ink);font-weight:700}
.site-links a.strong:hover{color:var(--accent)}
/* 아직 페이지가 없는 항목 — 링크처럼 보이면 눌러 보고 실망한다 */
.site-links .soon{font-size:12.5px;color:var(--sub2);font-weight:500;cursor:default}

.site-footer{background:#fbfbfc}
.site-footer-inner{max-width:1272px;margin:0 auto;padding:20px 16px 34px}
.site-footer-brand{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px}
.site-footer-tag{margin-left:8px;font-size:12px;font-weight:500;color:var(--sub2);letter-spacing:0}
/* ── 사업자 정보 (전자상거래법 표시 항목) ──
   항목 사이 구분선은 CSS 로 넣는다 (글자로 '|' 를 박으면 줄바꿈 위치를 통제할 수 없다).
   다만 구분선이 항목 앞에 붙기 때문에, 줄이 바뀌면 새 줄 맨 앞에 막대만 덩그러니 남는다.
   CSS 로는 '줄의 첫 항목'을 골라낼 수 없으므로, 줄바꿈이 생기는 좁은 폭에서는
   구분선을 끄고 간격으로만 구분한다. */
.site-footer-biz{margin:10px 0 0;font-size:11.5px;line-height:2;color:var(--sub2)}
.site-footer-biz span{display:inline-block}
.site-footer-biz span + span::before{content:'';display:inline-block;width:1px;height:9px;
  margin:0 10px;background:var(--line);vertical-align:-1px}
.site-footer-biz .biz-name{font-weight:700;color:var(--sub)}
.site-footer-biz i{font-style:normal}
.site-footer-biz a{color:var(--sub2)}
.site-footer-biz a:hover{color:var(--accent);text-decoration:underline}
@media (max-width:1000px){
  .site-footer-biz span + span::before{display:none}
  .site-footer-biz span{margin-right:16px}
}

.site-footer-note{margin:10px 0 0;font-size:12px;color:var(--sub2)}

/* ── 약관·개인정보 처리방침 문서 ── */
.card.doc{max-width:900px;margin:0 auto}
.card.doc h3{margin:26px 0 8px;font-size:14.5px;font-weight:700;color:var(--ink)}
.card.doc h3:first-of-type{margin-top:18px}
.card.doc p,.card.doc li{font-size:13px;color:#3a3a3a;line-height:1.85}
.card.doc ul,.card.doc ol{margin:6px 0;padding-left:20px}
.card.doc li{margin:3px 0}
.card.doc code{background:var(--panel-soft);border:1px solid var(--line-soft);border-radius:4px;
  padding:1px 5px;font-size:12px}
.doc-date{margin:0 0 4px;font-size:12px;color:var(--sub2)}
.doc-table{width:100%;border-collapse:collapse;margin:10px 0 6px;font-size:12.5px}
.doc-table th,.doc-table td{border:1px solid var(--line);padding:8px 10px;text-align:left;
  vertical-align:top;line-height:1.7}
.doc-table thead th{background:var(--panel-soft);font-weight:700;white-space:nowrap}
.doc-table tbody th{background:var(--panel-soft);font-weight:600;white-space:nowrap;width:120px}
.doc-note{color:var(--sub);font-size:12px !important;line-height:1.75}
.doc-foot{margin-top:28px;padding-top:16px;border-top:1px solid var(--line)}
.doc-foot p{margin:4px 0}

/* ── 계정 관리 (비밀번호 변경 · 탈퇴) ── */
.acct-h3{margin:4px 0 12px;font-size:14px;font-weight:700}
.acct-h3.danger{margin-top:30px;padding-top:20px;border-top:1px solid var(--line);color:var(--price)}
.acct-warn{background:var(--danger-bg);border-radius:var(--r-sm);padding:12px 14px;margin-bottom:14px}
.acct-warn p{margin:0 0 6px;font-size:12.5px;line-height:1.75;color:#5a3230}
.acct-warn p:last-child{margin-bottom:0}
.acct-warn ul{margin:0 0 8px;padding-left:18px}
.acct-warn li{font-size:12.5px;line-height:1.75;color:#5a3230}

.auth-notice{background:var(--accent-bg);color:var(--accent-dark);border-radius:var(--r-sm);
  padding:10px 12px;font-size:12.5px;font-weight:600;margin-bottom:14px}

/* ── 업체 프로필 (vendor.php) ── */
.vp-head{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;flex-wrap:wrap}
.vp-name{margin:0 0 4px;font-size:19px;font-weight:900;letter-spacing:-.5px}
.vp-sub{font-size:12.5px;color:var(--sub)}
.vp-warn{color:var(--warn);font-weight:700}
.vp-rating{text-align:right;flex:0 0 auto}
.vp-stars{color:#f5a623;font-size:18px;letter-spacing:2px;line-height:1}
.vp-stars.none{color:var(--line)}
.vp-stars.small{font-size:13px;letter-spacing:1px}
.vp-score{margin-top:3px;font-size:12px;color:var(--sub)}
.vp-score b{font-size:17px;color:var(--ink)}

.vp-stat-row{display:flex;flex-wrap:wrap;gap:10px;margin:16px 0 0;padding:12px 0;
  border-top:1px solid var(--line-soft);border-bottom:1px solid var(--line-soft)}
.vp-stat{flex:1 1 90px;text-align:center;font-size:12px;color:var(--sub)}
.vp-stat span{display:block;margin-bottom:2px;color:var(--sub2)}
.vp-stat b{font-size:17px;font-weight:800;color:var(--ink);margin-right:1px}

.vp-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin-top:14px}
.vp-region{font-size:12px;color:var(--sub)}
.vp-home{font-size:12px;font-weight:600}
.vp-h3{margin:22px 0 8px;font-size:14px;font-weight:700}
.vp-text{font-size:13px;line-height:1.85;color:#3a3a3a}

.vp-aspects{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px 20px;
  margin-bottom:18px}
.vp-aspect{position:relative;padding-bottom:10px;font-size:12.5px;color:var(--sub)}
.vp-aspect b{float:right;color:var(--ink);font-weight:800}
.vp-aspect i{position:absolute;left:0;bottom:0;height:4px;border-radius:2px;background:#f5a623;
  display:block;z-index:1}
/* 회색 트랙은 ::after 로 깔고 z-index 로 노란 막대 아래에 둔다 (DOM 순서상 뒤에 오므로) */
.vp-aspect::after{content:'';position:absolute;left:0;bottom:0;width:100%;height:4px;
  border-radius:2px;background:var(--line-soft);z-index:0}

.vp-review{padding:14px 0;border-top:1px solid var(--line-soft)}
.vp-review-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px}
.vp-review-head b{font-weight:800}
.vp-review-who{color:var(--sub);font-weight:600}
.vp-review-date{color:var(--sub2);margin-left:auto}
.vp-review-rfq{margin-top:4px;font-size:12px;color:var(--sub2)}
.vp-review-body{margin-top:6px;font-size:13px;line-height:1.8;color:#3a3a3a}

/* ── 제안 카드의 평점 배지 ── */
.bid-rating{display:inline-flex;align-items:center;gap:3px;margin-left:6px;padding:1px 7px;
  border:1px solid var(--line);border-radius:var(--r-pill);font-size:11px;color:#f5a623;
  letter-spacing:1px;vertical-align:middle}
.bid-rating b{color:var(--ink);font-weight:800;letter-spacing:0}
.bid-rating span{color:var(--sub2);letter-spacing:0}
.bid-rating.none{color:var(--sub2);letter-spacing:0}
.bid-vendor b a{color:inherit}
.bid-vendor b a:hover{color:var(--accent)}

/* ── 평가 입력 (rfq_view) ──
   별은 라디오 5개다. 오른쪽→왼쪽 순서로 렌더해 CSS 형제 선택자로 '누른 것까지 채우기' 를 만든다. */
.review-box{margin-top:14px;padding:14px;background:var(--panel-soft);
  border:1px solid var(--line);border-radius:var(--r-md)}
.review-box-title{font-size:13px;font-weight:700;margin-bottom:10px}
.review-box-title .hint{display:block;margin-top:2px;font-weight:400}
.review-aspects{display:flex;flex-wrap:wrap;gap:10px 26px;margin-bottom:12px}
.review-aspect{font-size:12.5px;color:var(--sub)}
.review-aspect > span{display:block;margin-bottom:2px}
.review-stars{display:inline-flex;flex-direction:row-reverse}
.review-stars input{position:absolute;opacity:0;width:0;height:0}
.review-stars label{font-size:22px;line-height:1;color:var(--line);cursor:pointer;padding:0 1px}
.review-stars input:checked ~ label,
.review-stars label:hover,
.review-stars label:hover ~ label{color:#f5a623}
.review-stars input:focus-visible + label{outline:2px solid var(--accent);border-radius:3px}

/* ── 페이지 이동 줄 ── */
.pager{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin-top:18px;padding-top:14px;
  border-top:1px solid var(--line-soft)}
.pager-num,.pager-arrow{display:inline-flex;align-items:center;justify-content:center;
  min-width:30px;height:30px;padding:0 8px;border:1px solid var(--line);border-radius:var(--r-sm);
  font-size:12.5px;font-weight:600;color:var(--sub);background:#fff}
.pager-num:hover,.pager-arrow:hover{border-color:var(--accent);color:var(--accent)}
.pager-num.on{background:var(--accent);border-color:var(--accent);color:#fff}
.pager-num.on:hover{color:#fff}
.pager-arrow.off{color:var(--sub2);background:var(--panel-soft);border-color:var(--line-soft);
  cursor:default}
.pager-arrow.off:hover{border-color:var(--line-soft);color:var(--sub2)}
.pager-gap{padding:0 2px;color:var(--sub2);font-size:12px}
.pager-count{margin-left:auto;font-size:12px;color:var(--sub2)}

/* ── 오류 화면 ── */
.err-card{max-width:520px;margin:40px auto;text-align:center;padding:38px 26px}
.err-code{font-size:48px;font-weight:900;letter-spacing:-2px;color:var(--line);line-height:1}
.err-head{margin:6px 0 8px;font-size:19px;font-weight:800;letter-spacing:-.5px}
.err-body{margin:0 auto;max-width:380px;font-size:13px;line-height:1.8;color:var(--sub)}
.err-links{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin-top:22px}

/* ══════════════ 회사소개 (company.php) ══════════════
   섹션마다 배경을 가로로 꽉 채우고, 안쪽만 1272px 로 묶는다.
   다른 화면의 .page-wrap > .card 구조를 쓰지 않는 유일한 페이지다. */
.cp-inner{max-width:1272px;margin:0 auto;padding:0 16px}
/* 한글은 자간을 벌리면 글자가 흩어져 보인다 — uppercase 도 한글엔 효과가 없어 뺐다 */
.cp-eyebrow{margin:0 0 10px;font-size:12px;font-weight:700;letter-spacing:.6px;
  color:rgba(255,255,255,.62)}
.cp-eyebrow.dark{color:var(--accent)}
.cp-h1{margin:0;font-size:46px;font-weight:900;letter-spacing:-1.6px;line-height:1.22;color:#fff}
.cp-h1 em{font-style:normal;color:#ffd166}
.cp-h2{margin:0 0 34px;font-size:29px;font-weight:900;letter-spacing:-1px;line-height:1.3;
  color:var(--ink)}
.cp-h2.light{color:#fff}

/* ── 1. 히어로 — 화면을 꽉 채우고 가운데 정렬 ──
   높이에서 120px 을 빼는 이유: 위에 띠배너(50)와 고정 헤더(70)가 그만큼 화면을 먹는다.
   이걸 빼지 않으면 맨 아래 스크롤 신호가 화면 밖으로 밀려 잘린다.
   띠배너를 닫은 사용자는 50px 만큼 여유가 생기는데, 그 편이 잘리는 것보다 낫다.
   svh 는 모바일 주소창이 접힐 때 높이가 튀는 것을 막는다 (vh 는 예비값). */
.cp-hero{position:relative;background:linear-gradient(150deg,#0b2545 0%,#135eba 55%,#1c8fed 100%);
  color:#fff;text-align:center;padding:70px 0 96px;
  min-height:calc(100vh - 120px);min-height:calc(100svh - 120px);
  display:flex;flex-direction:column;justify-content:center}
.cp-hero .cp-eyebrow{color:rgba(255,255,255,.55)}
.cp-tagline{max-width:760px;margin:26px auto 0;font-size:21px;font-weight:700;
  letter-spacing:-.6px;line-height:1.55;color:#fff}
.cp-lead{max-width:660px;margin:18px auto 0;font-size:15px;line-height:1.95;
  color:rgba(255,255,255,.82)}
.cp-stats{display:flex;flex-wrap:wrap;justify-content:center;gap:14px;margin:44px 0 0}
.cp-stat{flex:1 1 150px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.18);
  border-radius:var(--r-md);padding:20px 22px}
.cp-stat b{display:block;font-size:34px;font-weight:900;letter-spacing:-1.4px;line-height:1}
.cp-stat b i{font-style:normal;font-size:17px;font-weight:700;margin-left:2px}
.cp-stat span{display:block;margin-top:8px;font-size:12.5px;color:rgba(255,255,255,.76)}
.cp-source{max-width:760px;margin:20px auto 0;font-size:12px;line-height:1.7;
  color:rgba(255,255,255,.55)}
.cp-cta{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-top:36px}

/* 아래로 내려보라는 신호 — 얇은 선이 위아래로 오가는 최소한의 움직임 */
.cp-scroll{position:absolute;left:50%;bottom:26px;width:22px;height:34px;margin-left:-11px;
  border:1px solid rgba(255,255,255,.45);border-radius:11px}
.cp-scroll span{position:absolute;left:50%;top:8px;width:2px;height:7px;margin-left:-1px;
  border-radius:1px;background:rgba(255,255,255,.85);animation:cpScroll 1.8s ease-in-out infinite}
@keyframes cpScroll{0%,100%{transform:translateY(0);opacity:1}
  60%{transform:translateY(10px);opacity:.2}}
@media (prefers-reduced-motion:reduce){.cp-scroll span{animation:none}}
.btn.lg{padding:13px 26px;font-size:14.5px;font-weight:700}
.btn.ghost{background:transparent;border-color:rgba(255,255,255,.5);color:#fff}
.btn.ghost:hover{background:rgba(255,255,255,.12);border-color:#fff;color:#fff}

/* ── 2. 왜 만들었나 ── */
.cp-why{background:var(--panel);padding:78px 0}
.cp-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.cp-card{position:relative;background:var(--panel-soft);border:1px solid var(--line);
  border-radius:var(--r-lg);padding:30px 26px 28px}
.cp-card-num{display:block;font-size:13px;font-weight:900;letter-spacing:1px;color:var(--accent)}
.cp-card h3{margin:12px 0 10px;font-size:17px;font-weight:800;letter-spacing:-.5px;
  line-height:1.4;color:var(--ink)}
.cp-card p{margin:0;font-size:13.5px;line-height:1.95;color:#4a4a4a}
.cp-card p b{font-weight:700;color:var(--ink)}

/* ── 3. 어떻게 동작하나 ── */
.cp-how{background:#12203a;padding:78px 0 70px}
.cp-steps{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin:0;padding:0;
  list-style:none;counter-reset:none}
.cp-steps li{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.13);
  border-radius:var(--r-lg);padding:26px 22px 24px}
.cp-step-n{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;
  border-radius:50%;background:var(--accent);color:#fff;font-size:15px;font-weight:900}
.cp-steps h3{margin:14px 0 9px;font-size:16px;font-weight:800;letter-spacing:-.4px;color:#fff}
.cp-steps p{margin:0 0 14px;font-size:13px;line-height:1.9;color:rgba(255,255,255,.74)}
.cp-steps a{font-size:12.5px;font-weight:700;color:#7dc4f7}
.cp-steps a:hover{color:#fff}
.cp-domains{margin:34px 0 0;padding-top:24px;border-top:1px solid rgba(255,255,255,.14);
  font-size:13px;line-height:2;color:rgba(255,255,255,.6)}
.cp-domains b{font-weight:600;color:rgba(255,255,255,.92)}

/* ── 4. 회사 정보 ── */
.cp-biz{background:var(--bg);padding:74px 0 82px}
.cp-biz-grid{display:grid;grid-template-columns:1.35fr 1fr;gap:22px;align-items:start}
.cp-biz-table{width:100%;border-collapse:collapse;background:var(--panel);
  border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;font-size:13.5px}
.cp-biz-table th,.cp-biz-table td{padding:14px 18px;text-align:left;
  border-bottom:1px solid var(--line-soft);line-height:1.7}
.cp-biz-table tr:last-child th,.cp-biz-table tr:last-child td{border-bottom:0}
.cp-biz-table th{width:170px;background:var(--panel-soft);font-weight:700;color:var(--sub);
  white-space:nowrap}
.cp-empty{color:var(--sub2)}

.cp-contact{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:26px 24px}
.cp-contact h3{margin:0 0 10px;font-size:16px;font-weight:800;letter-spacing:-.4px}
.cp-contact p{margin:0;font-size:13px;line-height:1.9;color:var(--sub)}
.cp-mail{display:inline-block;margin:16px 0 4px;font-size:16px;font-weight:800;
  color:var(--accent);word-break:break-all}
.cp-mail:hover{text-decoration:underline}
.cp-contact-links{display:flex;gap:14px;margin:16px 0 0;padding-top:16px;
  border-top:1px solid var(--line-soft)}
.cp-contact-links a{font-size:12.5px;font-weight:600;color:var(--sub)}
.cp-contact-links a:hover{color:var(--accent)}
.cp-disclaimer{margin-top:14px !important;font-size:12px !important;color:var(--sub2) !important}

@media (max-width:1000px){
  .cp-cards{grid-template-columns:1fr 1fr}
  .cp-steps{grid-template-columns:1fr 1fr}
  .cp-biz-grid{grid-template-columns:1fr}
}
@media (max-width:640px){
  /* 좁은 화면에서는 띠배너가 34px 로 줄어든다 */
  .cp-hero{padding:48px 0 80px;
    min-height:calc(100vh - 104px);min-height:calc(100svh - 104px)}
  .cp-h1{font-size:33px;letter-spacing:-1.2px}
  .cp-tagline{font-size:17px;margin-top:20px}
  .cp-h2{font-size:23px}
  .cp-why,.cp-how,.cp-biz{padding:52px 0}
  .cp-cards,.cp-steps{grid-template-columns:1fr}
  .cp-biz-table th{width:120px;padding:12px 14px}
  .cp-biz-table td{padding:12px 14px}
}

/* ══════════════ 항상 보이는 합계 바 (견적 작성 화면) ══════════════
   품목이 많아지면 '실시간 계산' 카드가 화면 밖으로 밀린다. 총액은 작성 내내
   눈에 있어야 하는 숫자라 따로 띄운다. 카드의 합계 줄이 보이는 동안에는 감춘다. */
.total-bar{position:fixed;left:0;right:0;bottom:0;z-index:30;
  background:rgba(255,255,255,.97);backdrop-filter:blur(6px);
  border-top:1px solid var(--line);box-shadow:0 -2px 14px rgba(16,24,40,.08)}
.total-bar[hidden]{display:none}
.total-bar-inner{max-width:1320px;margin:0 auto;padding:11px 16px;
  display:flex;align-items:center;gap:16px}

.tb-left{display:flex;align-items:center;gap:8px;flex-shrink:0}
.tb-count{font-size:12.5px;font-weight:700;color:var(--sub)}
.tb-mid{display:flex;gap:16px;margin-left:4px}
.tb-sub{font-size:12.5px;color:var(--sub2);white-space:nowrap}
.tb-sub b{font-weight:700;color:var(--sub)}

.tb-right{display:flex;align-items:baseline;gap:8px;margin-left:auto}
.tb-total-label{font-size:12.5px;font-weight:700;color:var(--sub)}
.tb-total{font-size:24px;font-weight:900;letter-spacing:-.8px;color:var(--price);
  font-variant-numeric:tabular-nums}
.tb-won{font-size:13px;font-weight:700;color:var(--price);margin-right:6px}
.tb-right .btn{align-self:center}

/* 바가 떠 있는 동안에는 그만큼 아래를 비워 둔다 — 푸터·마지막 카드가 가리면 안 된다 */
body.has-total-bar{padding-bottom:64px}

@media (max-width:820px){
  .tb-mid{display:none}          /* 좁으면 합계 하나만 남긴다 */
  .tb-count{display:none}
  .tb-total{font-size:20px}
  .tb-detail{display:none}
  .total-bar-inner{padding:9px 12px;gap:10px}
  body.has-total-bar{padding-bottom:56px}
}

/* ═══════════════ FP 산정 (fp.php · fp_print.php) ═══════════════ */
.fp-page .card{margin-bottom:16px}
.fp-sum-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:10px}
.fp-sum-cell{background:var(--accent-bg);border-radius:var(--r-sm);padding:10px 12px;display:flex;flex-direction:column;gap:4px}
.fp-sum-cell span{font-size:12px;color:var(--sub)}
.fp-sum-cell b{font-size:20px}
.fp-sum-cell small{font-size:12px;font-weight:600;margin-left:2px}
.fp-fx-row{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.fp-fx{border:1px solid var(--line);border-radius:var(--r-pill);padding:3px 10px;font-size:12px;display:flex;gap:6px}
.fp-fx span{color:var(--sub)}
.fp-sum-table{width:100%;border-collapse:collapse;font-size:14px}
.fp-sum-table td{padding:7px 4px;border-bottom:1px solid var(--line)}
.fp-sum-table td:last-child{text-align:right;font-variant-numeric:tabular-nums}
.fp-sum-table small{color:var(--sub)}
.fp-sum-table tr.grand td{border-top:2px solid #111;border-bottom:0;font-weight:900;font-size:16px;color:var(--price)}
.fp-mix{display:flex;flex-wrap:wrap;gap:12px;margin-top:10px;font-size:12px;color:var(--sub)}
.fp-mix b{color:var(--ink)}
.fp-factors{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:8px}
.fp-factors select{width:100%}
.fp-tools{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:10px}
.fp-tools select{flex:1;min-width:240px;padding:7px 9px}
.fp-paste textarea{width:100%;font-family:ui-monospace,Consolas,monospace;font-size:12px;padding:8px;border:1px solid var(--line);border-radius:var(--r-sm)}
.fp-table-wrap{overflow-x:auto}
.fp-table{min-width:980px}
.fp-table input,.fp-table select,.fp-exp-table input{width:100%;padding:4px 6px;border:1px solid var(--line);border-radius:5px;font-size:13px}
.fp-table td{padding:3px 4px}
.fp-table td.num,.fp-w{text-align:right;font-variant-numeric:tabular-nums}
@media (max-width:720px){.fp-sum-grid{grid-template-columns:1fr}.fp-factors{grid-template-columns:1fr}}

.fp-print h3{font-size:14px;margin:18px 0 6px;display:flex;justify-content:space-between}
.fp-print h3 span{font-weight:400;font-size:12px;color:#555}
.fp-print-title{font-size:20px;letter-spacing:1px}
.fp-print-src{text-align:right;font-size:12px;color:#555;margin:-14px 0 10px}
.fp-print tr.fp-grand td{font-weight:900;background:#f3f2ee}
.fp-print tr.fp-sub td{font-weight:700;background:#fafaf8}
.fp-print-rows{font-size:11px}
.fp-print-memo{font-size:12px;border:1px solid #ccc;padding:8px;margin-top:10px}
.fp-page-break{height:24px}
@media print{.fp-page-break{break-after:page;height:0}}

/* FP 산정 — 견적에서 변환 */
.fp-conv-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.fp-conv-list{margin:0;padding-left:18px;font-size:13px;line-height:1.8}
.fp-conv-list small,.fp-conv-ex small,.fp-conv h3 small{color:var(--sub);font-weight:400}
.fp-conv-skip{font-size:13px;color:var(--sub)}
.fp-conv-ex td{font-size:13px;vertical-align:middle}
.fp-compare{margin-top:14px;border:1px solid var(--line);border-radius:var(--r-sm);padding:10px 12px;background:var(--panel-soft)}
.fp-compare-head{font-weight:700;font-size:13px;margin-bottom:4px}
.fp-compare-ratio td{font-weight:800}
.fp-compare-note{font-size:12px;color:var(--sub);margin:6px 0 0}
@media (max-width:720px){.fp-conv-grid{grid-template-columns:1fr}}
.fp-conv-ex .btn{white-space:nowrap;padding:5px 10px;font-size:12px}

/* 공용 표 — 원래 admin.php 인라인 <style> 에만 있어서 다른 화면(FP 산정 등)에서는 스타일 없이 그려졌다.
   admin.php 의 정의와 같은 값이다. */
.admin-table{width:100%;border-collapse:collapse;font-size:12.5px}
.admin-table th{background:var(--panel-soft);color:var(--sub);font-weight:700;font-size:11px;padding:7px 6px;border-bottom:1px solid var(--line);text-align:left}
.admin-table td{padding:6px;border-bottom:1px solid var(--line-soft);vertical-align:middle}
.fp-list td{vertical-align:middle}

/* 품목 산출 근거 (M/D) — 직군 × 일수 × 단가 */
.item-basis{font-size:11.5px;color:var(--sub);margin-top:4px;line-height:1.5}
.item-row.overridden .item-basis{color:var(--accent-dark)}
/* 견적서 부록 — 산출 근거 */
.print-basis{margin-top:22px;font-size:12px}
.print-basis h3{font-size:14px;margin:0 0 8px;border-bottom:2px solid #111;padding-bottom:4px}
.print-basis h4{font-size:12.5px;margin:12px 0 4px}
.print-basis p{margin:2px 0;color:#333}
.print-basis .print-items td,.print-basis .print-items th{font-size:11px}

/* 규모·기간 줄 (사업유형 카드 아래) */
.scope-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:14px}
.scope-row select,.scope-row input{width:100%}
@media (max-width:720px){.scope-row{grid-template-columns:1fr}}

/* ── 견적 가이드 (guide.php) */
.card.doc.guide{max-width:880px;margin:0 auto}
.guide-crumb{margin:0 0 6px;font-size:12px;color:var(--sub2)}
.guide-crumb a{color:inherit}
.guide-list{list-style:none;padding:0 !important;margin:8px 0 4px}
.guide-list li{display:flex;flex-direction:column;gap:2px;padding:10px 0;border-bottom:1px solid var(--line-soft)}
.guide-list li:last-child{border-bottom:0}
.guide-list li a{color:var(--ink);text-decoration:none}
.guide-list li a:hover b{color:var(--accent-dark);text-decoration:underline}
.guide-list li span{font-size:12.5px;color:var(--sub)}
.guide-src{font-size:12px !important;color:var(--sub2) !important;margin:2px 0 8px}
.guide-sum tr.sum td,.doc-table tr.sum td{font-weight:700;background:var(--panel-soft)}
.doc-table caption{caption-side:top;text-align:left;font-size:12.5px;font-weight:700;color:var(--ink);padding:0 0 6px}
.guide-cta{margin:16px 0 4px}
.guide-cta .btn{text-decoration:none;display:inline-block}
.guide-note{margin:24px 0 8px;padding:12px 14px;border:1px solid var(--line-soft);background:var(--panel-soft);border-radius:8px;font-size:12.5px;color:var(--sub);line-height:1.7}
.guide-back{margin-top:18px}

/* 좁은 화면 — 머리글 링크가 화면 밖으로 밀리지 않게 줄바꿈, 문서 표는 표 안에서 가로 스크롤 */
@media (max-width:560px){
  .site-header-top{flex-wrap:wrap;gap:10px 16px;padding:12px 16px}
  .site-header-util{flex-wrap:wrap;gap:8px 12px;flex-shrink:1;justify-content:flex-end}
  .card.doc .doc-table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}
}
/* 긴 글 제목 — 줄이 바뀌어도 막대가 제목 첫 줄 옆에 남게 */
.card.doc.guide h2{flex-wrap:nowrap;align-items:flex-start;line-height:1.45}
.card.doc.guide h2::before{margin-top:.25em}

/* ── 사이트맵 (sitemap_page.php) */
.sitemap-grid{display:grid;grid-template-columns:1fr 1.8fr 1fr 1fr;gap:8px 28px}
.sitemap-grid section h3{margin-top:18px !important;padding-bottom:6px;border-bottom:1px solid var(--line)}
.sitemap-grid ul{list-style:none;padding:0 !important;margin:6px 0}
.sitemap-grid li{display:flex;flex-direction:column;padding:5px 0}
.sitemap-grid li a{color:var(--ink);text-decoration:none;font-weight:600}
.sitemap-grid li a:hover{color:var(--accent-dark);text-decoration:underline}
.sitemap-grid li span{font-size:12px;color:var(--sub2);line-height:1.5}
@media (max-width:900px){.sitemap-grid{grid-template-columns:1fr 1fr}}
@media (max-width:560px){.sitemap-grid{grid-template-columns:1fr}}

/* ══ 간편 견적 (easy.php) ══ */
.easy{max-width:760px;margin:0 auto}
.easy-head{text-align:center;margin:10px 0 18px}
.easy-head h1{margin:0;font-size:26px;font-weight:800;letter-spacing:-.02em}
.easy-head h1 span{display:inline-block;margin-left:6px;padding:3px 10px;border-radius:var(--r-pill);background:var(--accent-bg);color:var(--accent-dark);font-size:13px;font-weight:700;vertical-align:middle}
.easy-head p{margin:8px 0 0;color:var(--sub);font-size:14.5px}
.easy-progress{height:6px;border-radius:var(--r-pill);background:var(--line-soft);overflow:hidden;margin-bottom:14px}
.easy-progress span{display:block;height:100%;width:0;background:var(--accent);border-radius:inherit;transition:width .25s}
.easy-card{background:var(--panel);border-radius:var(--r-lg);box-shadow:var(--shadow-md);padding:30px 32px;scroll-margin-top:90px}
.easy-card h2{margin:0 0 6px;font-size:21px;font-weight:800;letter-spacing:-.02em}
.easy-card h3{margin:26px 0 10px;font-size:15.5px}
.easy-card h3 small,.easy-range small{font-weight:400;color:var(--sub2);font-size:12px}
.easy-hint{margin:0 0 16px;color:var(--sub);font-size:14px}
.easy-opts{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin:16px 0 4px}
.easy-opt,.easy-feat{position:relative;display:flex;flex-direction:column;gap:4px;padding:16px 18px;border:1.5px solid var(--line);border-radius:var(--r-md);cursor:pointer;background:#fff;transition:border-color .12s,background .12s}
.easy-opt:hover,.easy-feat:hover{border-color:#9ccbf5}
.easy-opt input,.easy-feat input{position:absolute;opacity:0;pointer-events:none}
.easy-opt b,.easy-feat b{font-size:16px}
.easy-opt span,.easy-feat span{font-size:13px;color:var(--sub);line-height:1.5}
.easy-opt.on,.easy-feat.on{border-color:var(--accent);background:var(--accent-bg)}
.easy-opt:focus-within,.easy-feat:focus-within{box-shadow:var(--ring)}
.easy-feats{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px}
.easy-feat{padding:13px 16px 13px 44px}
.easy-feat::before{content:'';position:absolute;left:16px;top:16px;width:18px;height:18px;border:1.5px solid #b9bfc8;border-radius:5px;background:#fff}
.easy-feat.on::before{border-color:var(--accent);background:var(--accent) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 8.5l3 3 6-7' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/14px no-repeat}
.easy-feat b{font-size:15px}
.easy-amount{display:flex;align-items:center;gap:8px;margin:8px 0}
.easy-amount input{flex:1;max-width:320px;font-size:20px;padding:12px 14px;border:1.5px solid var(--line);border-radius:var(--r-md)}
.easy-amount input:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}
.easy-amount span{font-size:17px}
.easy-extra{display:flex;flex-direction:column;gap:8px;margin-top:20px;padding-top:18px;border-top:1px solid var(--line-soft)}
.easy-check{display:grid;grid-template-columns:auto 1fr;column-gap:10px;align-items:center;cursor:pointer;font-size:15px}
.easy-check input{width:18px;height:18px;accent-color:var(--accent)}
.easy-check span{grid-column:2;font-size:12.5px;color:var(--sub)}
.easy-nav{display:flex;justify-content:space-between;align-items:center;margin-top:24px}
.easy-nav .btn{padding:12px 22px;font-size:15px}
.easy-nav .btn[disabled]{opacity:.45;cursor:not-allowed}
.easy-loading{padding:60px 0;text-align:center;color:var(--sub)}
.easy-kicker{margin:0;color:var(--sub);font-size:14px;font-weight:600}
.easy-total{font-size:20px;margin:4px 0 2px}
.easy-total b{font-size:40px;font-weight:800;letter-spacing:-.03em;color:var(--accent-dark)}
.easy-range{margin:0 0 12px;font-size:15px}
.easy-why{padding:12px 14px;border-radius:var(--r-md);background:var(--panel-soft);border:1px solid var(--line-soft);font-size:13px;color:var(--sub);line-height:1.65}
.easy-buckets{list-style:none;margin:0;padding:0}
.easy-buckets li{padding:12px 0;border-bottom:1px solid var(--line-soft)}
.easy-buckets li:last-child{border-bottom:0}
.eb-top{display:flex;justify-content:space-between;gap:12px;font-size:15px}
.eb-top span{font-weight:700;white-space:nowrap}
.eb-bar{height:8px;border-radius:var(--r-pill);background:var(--line-soft);margin:7px 0 6px;overflow:hidden}
.eb-bar i{display:block;height:100%;background:var(--accent);border-radius:inherit}
.easy-buckets p{margin:0;font-size:12.5px;color:var(--sub)}
.easy-buckets details{margin-top:4px;font-size:12.5px;color:var(--sub2)}
.easy-buckets summary{cursor:pointer}
.easy-not{margin:0;padding-left:20px;font-size:13.5px;color:var(--sub);line-height:1.8}
.easy-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:24px}
.easy-actions .btn{text-decoration:none;padding:12px 20px;font-size:14.5px}
.easy-foot{margin:18px 0 0;font-size:12.5px;color:var(--sub2);line-height:1.7}
.easy-expert{text-align:center;color:var(--sub2);font-size:13px;margin:18px 0 6px}
@media (max-width:560px){
  .easy-card{padding:22px 18px}
  .easy-head h1{font-size:22px}
  .easy-total b{font-size:32px}
  .easy-actions .btn{flex:1 1 100%;text-align:center}
}

/* ══ 전문가 견적 — 처음 보는 사람용으로 접어 두기 ══ */
/* 투입일수·단가 직접 조정을 끄면 품목에는 이름·설명·금액·담기만 보인다 */
#itemList.simple .manday-edit,
#itemList.simple .item-basis,
#itemList.simple .override-wrap{display:none}
.adv-toggle{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:500;color:var(--sub);cursor:pointer}
.adv-toggle input{accent-color:var(--accent)}
.info-fold,.adv-fold{margin:4px 0 12px;border:1px solid var(--line-soft);border-radius:var(--r-md);background:var(--panel-soft)}
.info-fold>summary,.adv-fold>summary{cursor:pointer;padding:11px 14px;font-size:13.5px;font-weight:600;color:var(--ink);list-style:none}
.info-fold>summary::-webkit-details-marker,.adv-fold>summary::-webkit-details-marker{display:none}
.info-fold>summary::before,.adv-fold>summary::before{content:'▸';display:inline-block;width:14px;color:var(--sub2);transition:transform .15s}
.info-fold[open]>summary::before,.adv-fold[open]>summary::before{transform:rotate(90deg)}
.info-fold>summary .hint,.adv-fold>summary .hint{font-weight:400;font-size:12px;color:var(--sub2);margin-left:4px}
.info-fold>.grid3,.adv-fold>.grid2,.adv-fold>.field,.adv-fold>#manpowerWrap{padding:0 14px}
.adv-fold>#manpowerWrap{padding-bottom:12px}
.info-fold[open],.adv-fold[open]{background:#fff}
.info-fold[open]>.grid3{padding-bottom:12px}
.adv-fold[open]>.field:last-of-type{padding-bottom:4px}
.row-hint{font-style:normal;font-size:11.5px;color:var(--sub2);margin-left:4px}
/* 간편 견적 안내 띠 (메인) */
.easy-entry{display:flex;align-items:center;gap:20px;flex-wrap:wrap;background:linear-gradient(100deg,#eaf4fd,#f6fbff);border:1px solid #cfe6fb}
.easy-entry-text{flex:1 1 260px}
.easy-entry-text b{display:block;font-size:17px;margin-bottom:3px}
.easy-entry-text p{margin:0;color:var(--sub);font-size:13.5px}
.easy-entry-types{display:flex;flex-wrap:wrap;gap:6px;flex:2 1 380px;justify-content:flex-end}
.easy-entry-types a{padding:9px 14px;border-radius:var(--r-pill);background:#fff;border:1px solid #cfe6fb;color:var(--ink);font-size:13.5px;font-weight:600;text-decoration:none}
.easy-entry-types a:hover{border-color:var(--accent);color:var(--accent-dark)}
.easy-entry-types a.go{background:var(--accent);border-color:var(--accent);color:#fff}
/* 간편 견적 — 예산 */
.easy-budget{margin-top:22px;padding-top:18px;border-top:1px solid var(--line-soft)}
.easy-budget label{display:block;font-size:15px;margin-bottom:4px}
.easy-budget label span{display:block;font-size:13px;color:var(--sub);font-weight:400;margin-top:2px}
.easy-amount small{font-size:12px;color:var(--sub2);margin-left:2px}
.easy-fit{margin:0 0 20px;padding:16px 18px;border-radius:var(--r-md);border:1px solid}
.easy-fit.ok{background:#eefaf2;border-color:#bfe6cc}
.easy-fit.over{background:var(--warn-bg);border-color:#f0d59f}
.easy-fit>b{font-size:16px}
.easy-fit p{margin:6px 0 0;font-size:14px;color:#3a3a3a}
.easy-fit ul{margin:8px 0 12px;padding-left:20px;font-size:14px;line-height:1.8}
.easy-fit .btn{padding:10px 18px}
.fit-sub{font-size:12.5px !important;color:var(--sub) !important;margin-top:10px !important}
.fit-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.fit-chip{padding:8px 12px;border-radius:var(--r-pill);border:1px solid #bfe6cc;background:#fff;font-size:13px;font-weight:600;color:var(--ink)}
.fit-chip small{font-weight:400;color:var(--sub2);margin-left:2px}
.fit-chip:hover{border-color:#2e9e5b}
.budget-field{margin:0 0 14px;padding:12px 14px;border-radius:var(--r-md);background:var(--accent-bg);border:1px solid #cfe6fb}
.budget-field label{font-weight:700}
.budget-field input{background:#fff}
.easy-entry-budget{display:flex;gap:6px;margin-top:10px;max-width:360px}
.easy-entry-budget input{flex:1;min-width:0;padding:9px 12px;border:1px solid #cfe6fb;border-radius:var(--r-pill);font-size:13.5px;background:#fff}
.easy-entry-budget input:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}
.easy-entry-budget .btn{padding:9px 14px;white-space:nowrap}

/* 견적서 — 범위 제외 항목 */
.print-excl{margin:18px 0 6px;font-size:12px;border:1px solid #ccc;padding:10px 14px 8px;break-inside:avoid}
.print-excl h3{font-size:13px;margin:0 0 6px}
.print-excl ul{margin:0;padding-left:18px;columns:2;column-gap:28px}
.print-excl li{margin:2px 0;line-height:1.55;break-inside:avoid}
.print-excl-note{margin:8px 0 0;color:#444;font-weight:600}
@media (max-width:700px){.print-excl ul{columns:1}}
/* 견적 화면 — 범위 제외 항목 입력 */
.excl-field{padding:0 14px 14px}
.excl-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.excl-head label{font-size:13px;font-weight:600}
.excl-head .hint{font-size:12px;color:var(--sub2)}
.excl-head .btn{margin-left:auto;padding:6px 12px;font-size:12px}
.excl-field textarea{width:100%;min-height:150px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-sm);font:inherit;font-size:13px;line-height:1.6;resize:vertical}
.excl-field textarea:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}
.excl-field textarea:disabled{background:var(--panel-soft);color:var(--sub2)}
.fit-alt{margin-top:12px;padding-top:12px;border-top:1px dashed #e3c98a;font-size:14px}
.fit-alt p{font-size:13px !important;color:var(--sub) !important}
.fit-alt .btn{margin-top:10px}

/* 품목 검색 */
.item-search{flex:1 1 220px;margin-left:auto;max-width:340px;position:relative}
.item-search input{width:100%;padding:9px 12px 9px 34px;border:1px solid var(--line);border-radius:var(--r-pill);font-size:13px;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23949494' stroke-width='2'%3E%3Ccircle cx='8.5' cy='8.5' r='5.5'/%3E%3Cpath d='M13 13l4 4' stroke-linecap='round'/%3E%3C/svg%3E") 12px center/15px no-repeat}
.item-search input:focus{outline:0;border-color:var(--accent);box-shadow:var(--ring)}
.item-search-info{margin:-4px 0 12px;padding:9px 12px;border-radius:var(--r-sm);background:var(--panel-soft);border:1px solid var(--line-soft);font-size:12.5px;color:var(--sub);display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.item-search-info b{color:var(--ink)}
.iso-label{margin-left:6px}
.iso-dom,.iso-clear{padding:4px 10px;border-radius:var(--r-pill);border:1px solid var(--line);background:#fff;font-size:12px;color:var(--ink)}
.iso-dom:hover{border-color:var(--accent);color:var(--accent-dark)}
.iso-clear{margin-left:auto;color:var(--sub)}
#itemList mark{background:#fff1a8;color:inherit;padding:0 1px;border-radius:2px}
.budget-row{display:flex;gap:6px}
.budget-row input{flex:1;min-width:0}
.budget-row .btn{white-space:nowrap;padding:8px 12px;font-size:12.5px}
.rec-info{margin-top:8px;font-size:12.5px;line-height:1.65;color:var(--sub)}
.rec-info.ok{color:#245c3a}
.rec-info.warn{color:#8a5a00}
.rec-info b{color:var(--ink)}
.rec-info .rec-sub{color:var(--sub)}
.rec-info .btn{padding:4px 10px;font-size:12px;margin-left:4px}
@media (max-width:560px){.budget-row{flex-wrap:wrap}.budget-row .btn{flex:1 1 100%}}

/* 좁은 화면 — 목록 표(마이페이지·관리자)는 표 안에서 가로 스크롤 */
@media (max-width:560px){
  .card table.list,.card table.admin-table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;white-space:nowrap}
}
/* 배너 슬라이드가 한 화면에 다 들어오면 — 가운데 정렬, 화살표·점 숨김 (carousel.js) */
.carousel.car-fits .car-track{justify-content:center;transform:none !important}
.carousel.car-fits .car-arrow,.carousel.car-fits .car-dots{display:none}
