/* ============================================================
   BIZSEED 비즈시드 — 신규 사업자 리드 수집 파이프라인 (데모)
   디자인 시스템 실측 카피:
     Apify Console  — 순수 블랙 #020202 · Inter · 코드 신택스 컬러 팔레트
     Airbyte        — 초타이트 letter-spacing 헤드라인 · 퍼플 액센트 · r8
     Supabase Studio— 그린 프라이머리 #3FCF8E · Source Code Pro 모노 데이터 표기 · r6
   ============================================================ */

:root{
  /* 배경 (Apify 순수 블랙 계열) */
  --bg:#020202;
  --surface:#0C0C0D;
  --surface-2:#141416;
  --surface-3:#1D1D20;
  --line:#232326;
  --line-soft:#19191C;

  /* 텍스트 (Apify 실측) */
  --ink:#DFDFDF;
  --ink-2:#A3A3A3;
  --ink-3:#6B6B70;

  /* 액센트 */
  --green:#3FCF8E;          /* Supabase 프라이머리 — 성공/수집완료 */
  --green-soft:rgba(63,207,142,.12);
  --blue:#6B9FFF;           /* Apify 블루 */
  --blue-soft:rgba(107,159,255,.12);
  --purple:#A299FF;         /* Airbyte 퍼플 */
  --purple-soft:rgba(162,153,255,.12);
  --mint:#7FDBCA;
  --amber:#F5C26B;
  --amber-soft:rgba(245,194,107,.12);
  --red:#FF6B6B;
  --red-soft:rgba(255,107,107,.12);

  --radius:8px;
  --radius-sm:6px;
  --side-w:232px;
  --font:Inter,'Pretendard Variable',Pretendard,-apple-system,BlinkMacSystemFont,'Apple SD Gothic Neo',sans-serif;
  --mono:'Source Code Pro','SFMono-Regular',Menlo,Consolas,monospace;
}

*{margin:0;padding:0;box-sizing:border-box}
body{
  font-family:var(--font);
  background:var(--bg);color:var(--ink);
  font-size:14px;line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,select{font-family:inherit;font-size:inherit;color:var(--ink)}
img{max-width:100%;display:block}
::selection{background:var(--green);color:#04210F}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:var(--surface-3);border-radius:6px}
::-webkit-scrollbar-track{background:transparent}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.muted{color:var(--ink-2)}
.faint{color:var(--ink-3)}
.hide{display:none!important}

/* ============================================================
   로그인 게이트
   ============================================================ */
.gate{
  position:fixed;inset:0;z-index:500;display:grid;place-items:center;
  background:var(--bg);transition:opacity .5s,visibility .5s;
}
.gate.out{opacity:0;visibility:hidden}
.gate-bg{
  position:absolute;inset:0;background-size:cover;background-position:center;
  opacity:.34;
}
.gate-bg::after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at center,transparent,var(--bg) 72%)}
.gate-card{
  position:relative;width:min(400px,calc(100vw - 40px));
  background:rgba(12,12,13,.86);border:1px solid var(--line);
  border-radius:14px;padding:34px 32px;backdrop-filter:blur(16px);
}
.gate-card .brand{display:flex;align-items:center;gap:10px;margin-bottom:22px}
.gate-card h1{font-size:20px;font-weight:600;letter-spacing:-.5px}
.gate-card p{font-size:13px;color:var(--ink-2);margin-top:6px}
.gate-form{display:flex;flex-direction:column;gap:11px;margin-top:24px}
.gate-form input{
  height:42px;background:var(--surface-2);border:1px solid var(--line);
  border-radius:var(--radius-sm);padding:0 14px;outline:none;transition:.16s;font-size:13.5px;
}
.gate-form input:focus{border-color:var(--green)}
.gate-btn{
  height:42px;border-radius:var(--radius-sm);background:var(--green);color:#04210F;
  font-weight:600;font-size:14px;transition:.16s;
}
.gate-btn:hover{filter:brightness(1.08)}
.gate-note{margin-top:16px;font-size:11.5px;color:var(--ink-3);text-align:center;line-height:1.7}

/* 브랜드 마크 */
.mark{
  width:28px;height:28px;border-radius:7px;flex-shrink:0;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--green),#1FA36B);
  font-size:14px;box-shadow:0 3px 12px -3px rgba(63,207,142,.5);
}

/* ============================================================
   앱 셸
   ============================================================ */
.app{display:grid;grid-template-columns:var(--side-w) 1fr;min-height:100vh}

/* 사이드바 (Apify Console 구조 카피) */
.side{
  background:var(--surface);border-right:1px solid var(--line-soft);
  padding:18px 12px;position:sticky;top:0;height:100vh;
  display:flex;flex-direction:column;gap:4px;
}
.side .brand{display:flex;align-items:center;gap:9px;padding:4px 8px 18px}
.side .brand b{font-size:15px;font-weight:600;letter-spacing:-.3px}
.side .brand small{display:block;font-size:9.5px;color:var(--ink-3);letter-spacing:.14em;line-height:1}
.nav-label{font-size:10px;font-weight:600;color:var(--ink-3);letter-spacing:.1em;padding:12px 10px 5px}
.side nav button{
  width:100%;display:flex;align-items:center;gap:10px;padding:8px 10px;
  border-radius:var(--radius-sm);font-size:13.5px;color:var(--ink-2);text-align:left;transition:.14s;
}
.side nav button:hover{background:var(--surface-2);color:var(--ink)}
.side nav button.on{background:var(--surface-3);color:var(--ink);font-weight:500}
.side nav button .ico{width:16px;text-align:center;flex-shrink:0;font-size:13px}
.side nav button .n{margin-left:auto;font-size:10.5px;font-weight:600;color:var(--ink-3);font-family:var(--mono)}
.side-foot{margin-top:auto;border-top:1px solid var(--line-soft);padding-top:12px}
.sched-mini{display:flex;align-items:center;gap:8px;padding:8px 10px;font-size:11.5px;color:var(--ink-2)}
.dot-live{width:6px;height:6px;border-radius:50%;background:var(--green);animation:blink 1.8s infinite}
@keyframes blink{0%,100%{opacity:1;box-shadow:0 0 0 0 rgba(63,207,142,.45)}55%{opacity:.6;box-shadow:0 0 0 5px rgba(63,207,142,0)}}

/* 메인 */
.main{min-width:0;display:flex;flex-direction:column}
.topbar{
  height:54px;border-bottom:1px solid var(--line-soft);
  display:flex;align-items:center;gap:14px;padding:0 24px;
  position:sticky;top:0;background:rgba(2,2,2,.86);backdrop-filter:blur(12px);z-index:40;
}
.topbar h1{font-size:15px;font-weight:600;letter-spacing:-.3px}
.topbar .crumb{font-size:12px;color:var(--ink-3)}
.topbar-right{margin-left:auto;display:flex;align-items:center;gap:9px}
.btn{
  height:32px;padding:0 14px;border-radius:var(--radius-sm);font-size:12.5px;font-weight:500;
  background:var(--surface-2);border:1px solid var(--line);transition:.15s;
  display:inline-flex;align-items:center;gap:7px;
}
.btn:hover{border-color:var(--ink-3);background:var(--surface-3)}
.btn-primary{background:var(--green);border-color:var(--green);color:#04210F;font-weight:600}
.btn-primary:hover{filter:brightness(1.1);border-color:var(--green)}
.btn-sm{height:27px;padding:0 10px;font-size:11.5px}
.content{padding:24px;flex:1}

/* ============================================================
   공통 컴포넌트
   ============================================================ */
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:16px}
.panel-head{
  padding:14px 18px;border-bottom:1px solid var(--line-soft);
  display:flex;align-items:center;gap:10px;
}
.panel-head h2{font-size:13.5px;font-weight:600;letter-spacing:-.2px}
.panel-head .sub{font-size:11.5px;color:var(--ink-3)}
.panel-head .right{margin-left:auto;display:flex;gap:8px;align-items:center}
.panel-body{padding:18px}

.tag{
  font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:5px;
  display:inline-flex;align-items:center;gap:5px;letter-spacing:-.01em;
}
.tag-green{background:var(--green-soft);color:var(--green)}
.tag-blue{background:var(--blue-soft);color:var(--blue)}
.tag-purple{background:var(--purple-soft);color:var(--purple)}
.tag-amber{background:var(--amber-soft);color:var(--amber)}
.tag-red{background:var(--red-soft);color:var(--red)}
.tag-gray{background:var(--surface-3);color:var(--ink-2)}

/* 통계 카드 (Supabase Studio 카피) */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}
.stat{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px 18px;position:relative;overflow:hidden;
}
.stat .label{font-size:11.5px;color:var(--ink-2);display:flex;align-items:center;gap:6px}
.stat .val{font-size:26px;font-weight:600;letter-spacing:-1.2px;margin-top:6px;font-family:var(--mono)}
.stat .val small{font-size:13px;color:var(--ink-3);letter-spacing:0;margin-left:3px}
.stat .delta{font-size:11.5px;font-weight:500;margin-top:2px}
.stat .delta.up{color:var(--green)}
.stat .delta.down{color:var(--red)}
.stat canvas{position:absolute;right:10px;bottom:10px;opacity:.85}

/* ============================================================
   파이프라인 다이어그램 (Airbyte 소스→목적지 카피)
   ============================================================ */
.pipeline{
  display:flex;align-items:stretch;gap:0;overflow-x:auto;padding:6px 2px 12px;
}
.pstage{
  flex:1;min-width:168px;background:var(--surface-2);border:1px solid var(--line);
  border-radius:var(--radius);padding:14px;position:relative;transition:.2s;
}
.pstage:hover{border-color:var(--ink-3)}
.pstage .pnum{
  font-size:9.5px;font-weight:700;color:var(--ink-3);letter-spacing:.1em;font-family:var(--mono);
}
.pstage .pname{font-size:13px;font-weight:600;margin-top:5px;letter-spacing:-.2px}
.pstage .pdesc{font-size:11px;color:var(--ink-3);margin-top:5px;line-height:1.6}
.pstage .pcount{font-size:16px;font-weight:600;font-family:var(--mono);margin-top:9px;letter-spacing:-.5px}
.pstage .pcount small{font-size:10.5px;color:var(--ink-3);font-weight:400;margin-left:3px;letter-spacing:0}
.parrow{
  flex:0 0 34px;display:grid;place-items:center;color:var(--ink-3);font-size:14px;position:relative;
}
.parrow::before{
  content:"";position:absolute;left:0;right:0;top:50%;height:1px;
  background:linear-gradient(90deg,transparent,var(--line) 20%,var(--line) 80%,transparent);
}
.parrow span{
  position:relative;background:var(--bg);padding:0 5px;
  animation:flowPulse 2.4s ease-in-out infinite;
}
@keyframes flowPulse{0%,100%{opacity:.35;transform:translateX(-2px)}50%{opacity:1;transform:translateX(2px)}}
.pstage.ok{border-color:rgba(63,207,142,.32)}
.pstage.ok .pcount{color:var(--green)}
.pstage.warn{border-color:rgba(245,194,107,.32)}
.pstage.warn .pcount{color:var(--amber)}

/* ============================================================
   테이블 (Supabase Studio 데이터 그리드 카피)
   ============================================================ */
.tbl-wrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:12.5px}
table.tbl th{
  text-align:left;padding:9px 14px;font-size:10.5px;font-weight:600;color:var(--ink-3);
  letter-spacing:.05em;border-bottom:1px solid var(--line);background:var(--surface-2);
  white-space:nowrap;position:sticky;top:0;
}
table.tbl td{padding:10px 14px;border-bottom:1px solid var(--line-soft);vertical-align:middle;white-space:nowrap}
table.tbl tr:last-child td{border-bottom:none}
table.tbl tbody tr{transition:.12s}
table.tbl tbody tr:hover{background:var(--surface-2)}
table.tbl .biz{font-weight:500;color:var(--ink)}
table.tbl .sub{font-size:11px;color:var(--ink-3);margin-top:1px}
table.tbl .num{font-family:var(--mono);color:var(--ink-2)}
table.tbl .none{color:var(--ink-3)}
.tbl-empty{padding:48px;text-align:center;color:var(--ink-3);font-size:13px}

/* 필터 바 */
.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
.search{
  display:flex;align-items:center;gap:8px;height:34px;padding:0 12px;flex:1;min-width:200px;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);transition:.16s;
}
.search:focus-within{border-color:var(--green)}
.search input{flex:1;background:none;border:none;outline:none;font-size:13px}
.search input::placeholder{color:var(--ink-3)}
select.sel{
  height:34px;padding:0 30px 0 11px;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius-sm);font-size:12.5px;outline:none;cursor:pointer;
  appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M3 5l3 3 3-3' stroke='%236B6B70' stroke-width='1.4' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 9px center;background-size:12px;
}
select.sel:focus{border-color:var(--green)}
.chk{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-2);cursor:pointer;user-select:none;height:34px;padding:0 11px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);transition:.15s}
.chk:hover{border-color:var(--ink-3)}
.chk input{accent-color:var(--green);width:13px;height:13px;cursor:pointer}
.chk.on{border-color:var(--green);color:var(--ink)}

.pager{display:flex;align-items:center;gap:5px;padding:12px 18px;border-top:1px solid var(--line-soft)}
.pager button{
  min-width:28px;height:28px;border-radius:var(--radius-sm);font-size:12px;
  color:var(--ink-2);transition:.13s;font-family:var(--mono);
}
.pager button:hover{background:var(--surface-2);color:var(--ink)}
.pager button.on{background:var(--surface-3);color:var(--ink);font-weight:600}
.pager .info{margin-left:auto;font-size:11.5px;color:var(--ink-3);font-family:var(--mono)}

/* ============================================================
   소스 카드 / 스케줄러
   ============================================================ */
.src-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.src{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px;transition:.18s;
}
.src:hover{border-color:var(--ink-3)}
.src.primary{border-color:rgba(63,207,142,.35);background:linear-gradient(180deg,rgba(63,207,142,.045),transparent)}
.src-top{display:flex;align-items:center;gap:9px}
.src-ico{width:30px;height:30px;border-radius:7px;display:grid;place-items:center;font-size:14px;flex-shrink:0;background:var(--surface-3)}
.src-top b{font-size:13px;font-weight:600;letter-spacing:-.2px;display:block}
.src-top span{font-size:10.5px;color:var(--ink-3);font-family:var(--mono)}
.src-meta{margin-top:12px;display:flex;flex-direction:column;gap:6px}
.src-row{display:flex;justify-content:space-between;font-size:11.5px}
.src-row .k{color:var(--ink-3)}
.src-row .v{color:var(--ink-2);font-family:var(--mono)}
.src-bar{height:4px;border-radius:3px;background:var(--surface-3);margin-top:11px;overflow:hidden}
.src-bar i{display:block;height:100%;border-radius:3px;background:var(--green);transition:width 1s cubic-bezier(.2,.65,.3,1)}
.src-note{font-size:11px;color:var(--ink-3);margin-top:9px;line-height:1.6;padding-top:9px;border-top:1px solid var(--line-soft)}

/* 로그 뷰어 (Apify 런 로그 카피) */
.logbox{
  background:#000;border:1px solid var(--line);border-radius:var(--radius);
  padding:14px 16px;font-family:var(--mono);font-size:11.5px;line-height:1.85;
  max-height:290px;overflow-y:auto;
}
.logline{display:flex;gap:10px;white-space:pre-wrap;word-break:break-all}
.logline .t{color:#4A4A4E;flex-shrink:0}
.logline .lv{flex-shrink:0;font-weight:600;width:44px}
.lv-info{color:var(--blue)}
.lv-ok{color:var(--green)}
.lv-warn{color:var(--amber)}
.lv-err{color:var(--red)}
.logline .msg{color:#B9B9BD}
.logline .msg em{color:var(--mint);font-style:normal}
.logline .msg b{color:var(--purple);font-weight:400}

/* ============================================================
   스키마 뷰 (테이블 정의서)
   ============================================================ */
.schema-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.tbl-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.tbl-card-head{
  padding:11px 15px;background:var(--surface-2);border-bottom:1px solid var(--line);
  display:flex;align-items:center;gap:9px;
}
.tbl-card-head b{font-family:var(--mono);font-size:12.5px;font-weight:600;color:var(--mint)}
.tbl-card-head .cnt{margin-left:auto;font-size:10.5px;color:var(--ink-3);font-family:var(--mono)}
.col-row{
  display:grid;grid-template-columns:1fr 118px 62px;gap:8px;padding:7px 15px;
  border-bottom:1px solid var(--line-soft);font-size:11.5px;align-items:center;
}
.col-row:last-child{border:none}
.col-row .cn{font-family:var(--mono);color:var(--ink)}
.col-row .ct{font-family:var(--mono);color:var(--ink-3);font-size:11px}
.col-row .ck{text-align:right}
.key{font-size:9px;font-weight:700;padding:1px 5px;border-radius:3px;font-family:var(--mono)}
.key-pk{background:var(--amber-soft);color:var(--amber)}
.key-fk{background:var(--purple-soft);color:var(--purple)}
.key-idx{background:var(--blue-soft);color:var(--blue)}
.key-uq{background:var(--green-soft);color:var(--green)}
.col-desc{font-size:10.5px;color:var(--ink-3);grid-column:1/-1;margin-top:-3px;padding-left:2px}

/* ============================================================
   컴플라이언스 카드
   ============================================================ */
.comp-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
.risk{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:18px;
  border-left:3px solid var(--line);
}
.risk.high{border-left-color:var(--red)}
.risk.mid{border-left-color:var(--amber)}
.risk.ok{border-left-color:var(--green)}
.risk-top{display:flex;align-items:center;gap:9px;margin-bottom:9px}
.risk-top b{font-size:13.5px;font-weight:600;letter-spacing:-.2px}
.risk p{font-size:12px;color:var(--ink-2);line-height:1.75}
.risk .law{font-size:11px;color:var(--ink-3);margin-top:9px;padding-top:9px;border-top:1px solid var(--line-soft);font-family:var(--mono)}
.risk .fix{
  margin-top:10px;font-size:11.5px;color:var(--green);background:var(--green-soft);
  padding:9px 11px;border-radius:var(--radius-sm);line-height:1.65;
}
.risk .fix b{color:var(--green);font-weight:600}

/* 도넛/막대 차트 영역 */
.chart-row{display:grid;grid-template-columns:1.6fr 1fr;gap:14px}
.legend{display:flex;flex-direction:column;gap:9px;margin-top:4px}
.legend-item{display:flex;align-items:center;gap:9px;font-size:12px}
.legend-item .sw{width:9px;height:9px;border-radius:2.5px;flex-shrink:0}
.legend-item .nm{color:var(--ink-2)}
.legend-item .vl{margin-left:auto;font-family:var(--mono);font-weight:600;font-size:12px}

/* 토스트 */
.toasts{position:fixed;bottom:22px;right:22px;z-index:400;display:flex;flex-direction:column;gap:8px;align-items:flex-end}
.toast{
  background:var(--surface-2);border:1px solid var(--surface-3);border-radius:var(--radius);
  padding:11px 16px;font-size:12.5px;box-shadow:0 14px 40px -12px rgba(0,0,0,.85);
  display:flex;gap:9px;align-items:center;animation:tIn .3s cubic-bezier(.2,.65,.3,1);max-width:400px;
}
.toast.ok{border-color:rgba(63,207,142,.42)}
.toast.err{border-color:rgba(255,107,107,.42)}
.toast.warn{border-color:rgba(245,194,107,.42)}
@keyframes tIn{from{opacity:0;transform:translateX(16px)}}

/* 진행바 (엑셀 다운로드 시뮬레이션) */
.progress{height:3px;background:var(--surface-3);border-radius:3px;overflow:hidden;margin-top:9px}
.progress i{display:block;height:100%;background:var(--green);width:0;transition:width .25s linear}

/* 리빌 */
.reveal{opacity:0;transform:translateY(12px);transition:opacity .5s,transform .5s}
.reveal.in{opacity:1;transform:none}

/* ============================================================
   반응형
   ============================================================ */
@media (max-width:1100px){
  .stats{grid-template-columns:repeat(2,1fr)}
  .src-grid{grid-template-columns:1fr}
  .schema-grid,.comp-grid{grid-template-columns:1fr}
  .chart-row{grid-template-columns:1fr}
}
@media (max-width:820px){
  .app{grid-template-columns:1fr}
  .side{
    position:sticky;top:0;height:auto;flex-direction:row;align-items:center;
    overflow-x:auto;padding:10px;gap:5px;border-right:none;border-bottom:1px solid var(--line-soft);
  }
  .side .brand{padding:0 10px 0 4px;flex-shrink:0}
  .side .brand small{display:none}
  .side nav{display:flex;gap:4px}
  .side nav button{white-space:nowrap;padding:7px 11px}
  .side nav button .n{display:none}
  .nav-label,.side-foot{display:none}
  .content{padding:16px}
  .topbar{padding:0 16px}
  .topbar .crumb{display:none}
}
@media (max-width:560px){
  .stats{grid-template-columns:1fr}
  .filters{flex-direction:column;align-items:stretch}
  .toasts{left:16px;right:16px;align-items:stretch}
}
