@font-face{ font-family:"Pretendard"; src:url("fonts/Pretendard-Regular.woff2") format("woff2"); font-weight:400; font-display:swap; }
@font-face{ font-family:"Pretendard"; src:url("fonts/Pretendard-Medium.woff2") format("woff2"); font-weight:500; font-display:swap; }
@font-face{ font-family:"Pretendard"; src:url("fonts/Pretendard-SemiBold.woff2") format("woff2"); font-weight:600; font-display:swap; }
@font-face{ font-family:"Pretendard"; src:url("fonts/Pretendard-Bold.woff2") format("woff2"); font-weight:700; font-display:swap; }

:root{
  --bg:#F5F7FB; --surface:#FFFFFF; --border:#EBEEF5; --border-soft:#F1F3F8;
  --ink-900:#1E2233; --ink-700:#4A5268; --ink-500:#7C879B; --ink-400:#A2ABBC;
  --accent-600:#3D5BF0; --accent-500:#5271F5; --accent-100:#E9EDFE; --accent-050:#F2F4FE;
  --lnb-bg:#12162A; --lnb-text:#B7BECF; --lnb-sub:#767E93; --lnb-label:#5C6478; --lnb-icon:#7A8298;
  --pass:#16B378; --pass-bg:#E4F8EF;
  --fail:#F1556C; --fail-bg:#FDEAEC;
  --progress:#F5A623; --progress-bg:#FDF2E0;
  --blocked:#7C5CF0; --blocked-bg:#EFEAFD;
  /* 상태 컬러 (앱과 동일) */
  --st-new-bg:#F1F2F5; --st-new-fg:#4A5268;
  --st-prog-bg:#FDF2E0; --st-prog-fg:#B4790E;
  --st-resolved-bg:#E9EDFE; --st-resolved-fg:#3D5BF0;
  --st-retest-bg:#EFEAFD; --st-retest-fg:#7C5CF0;
  --st-closed-bg:#E4F8EF; --st-closed-fg:#16B378;
  --st-reopen-bg:#FDEAEC; --st-reopen-fg:#F1556C;
}
*{ box-sizing:border-box; }
html,body{ margin:0; }
body{ background:var(--bg); color:var(--ink-900); font-family:"Pretendard","Malgun Gothic",sans-serif; font-size:14px; -webkit-font-smoothing:antialiased; }

.app{ display:flex; min-height:100vh; }

/* ===== Sidebar ===== */
.sidebar{ width:250px; background:var(--lnb-bg); flex-shrink:0; display:flex; flex-direction:column; }
.brand{ display:flex; align-items:center; gap:10px; padding:22px 22px 18px; border-bottom:1px solid rgba(255,255,255,.07); }
.brand-mark{ width:32px;height:32px;border-radius:9px; background:rgba(255,255,255,.06); display:grid; grid-template-columns:1fr 1fr; grid-template-rows:1fr 1fr; gap:3px; padding:6px; flex-shrink:0; }
.brand-mark span{ border-radius:2px; }
.brand-mark span:nth-child(1){ background:var(--pass); }
.brand-mark span:nth-child(2){ background:var(--progress); }
.brand-mark span:nth-child(3){ background:var(--blocked); }
.brand-mark span:nth-child(4){ background:var(--fail); }
.brand-name{ font-weight:700; font-size:17px; color:#fff; letter-spacing:-.01em; line-height:1.1; }
.brand-sub{ font-size:10.5px; color:var(--lnb-sub); margin-top:2px; }
.nav{ padding:10px 16px; flex:1; }
.nav-label{ font-size:10.5px; color:var(--lnb-label); text-transform:uppercase; letter-spacing:.09em; font-weight:600; padding:16px 10px 8px; }
.nav-label:first-child{ padding-top:6px; }
.nav-item{ display:flex; align-items:center; gap:12px; padding:9px 12px; border-radius:9px; color:var(--lnb-text); text-decoration:none; font-size:13.5px; font-weight:500; margin-bottom:2px; border-left:3px solid transparent; }
.nav-item i{ font-size:16px; width:18px; text-align:center; color:var(--lnb-icon); }
.nav-item.active{ background:rgba(255,255,255,.06); color:#fff; border-left-color:var(--accent-500); }
.nav-item.active i{ color:var(--accent-500); }
.sidebar-foot{ padding:16px 22px 20px; border-top:1px solid rgba(255,255,255,.07); font-size:11px; color:var(--lnb-label); }

/* ===== Main ===== */
.main-col{ flex:1; min-width:0; display:flex; flex-direction:column; }
.topbar{ height:64px; flex-shrink:0; display:flex; align-items:center; justify-content:space-between; padding:0 28px; }
.crumb{ font-size:12.5px; color:var(--ink-500); }
.crumb b{ color:var(--ink-900); font-weight:600; }
.view-tabs{ display:flex; gap:6px; background:var(--surface); border:1px solid var(--border); border-radius:10px; padding:3px; }
.view-tabs button{ border:none; background:transparent; font-size:12.5px; font-weight:500; padding:7px 14px; border-radius:7px; color:var(--ink-500); cursor:pointer; }
.view-tabs button.active{ background:var(--accent-500); color:#fff; }
.content{ padding:8px 28px 50px; }
.page-head{ margin-bottom:22px; display:flex; align-items:flex-start; justify-content:space-between; gap:12px; flex-wrap:wrap; }
.page-head h1{ font-size:22px; font-weight:700; margin:0 0 5px; letter-spacing:-.01em; }
.page-head p{ margin:0; font-size:13px; color:var(--ink-500); }
.btn{ display:inline-flex; align-items:center; gap:7px; border:1px solid var(--border); background:var(--surface); color:var(--ink-700); border-radius:9px; padding:9px 15px; font-size:13px; font-weight:500; cursor:pointer; }
.btn:hover{ background:var(--bg); }
.btn-primary{ background:var(--accent-500); border-color:var(--accent-500); color:#fff; }
.btn-primary:hover{ background:var(--accent-600); }
.btn-danger{ background:var(--surface); border-color:#FBD2D8; color:var(--fail); }
.btn-sm{ padding:6px 12px; font-size:12px; }

/* summary cards */
.summary{ display:grid; grid-template-columns:repeat(6,1fr); gap:12px; margin-bottom:16px; }
.sum-card{ background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:14px 16px; }
.sum-card .n{ font-size:21px; font-weight:700; font-family:"Pretendard"; }
.sum-card .l{ font-size:11.5px; color:var(--ink-500); margin-top:4px; display:flex; align-items:center; gap:6px; }
.dot{ width:7px; height:7px; border-radius:50%; display:inline-block; flex-shrink:0; }

/* filter bar */
.filterbar{ background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:14px 16px; margin-bottom:14px; display:flex; flex-wrap:wrap; gap:10px; align-items:flex-end; }
.f-group{ display:flex; flex-direction:column; gap:5px; }
.f-group label{ font-size:11px; color:var(--ink-500); font-weight:500; }
.f-group select, .f-group input{ border:1px solid var(--border); border-radius:9px; padding:7.5px 10px; font-size:12.5px; min-width:110px; background:var(--surface); color:var(--ink-900); font-family:"Pretendard"; }
.f-group input[type="text"]{ min-width:220px; }
.f-actions{ display:flex; gap:8px; margin-left:auto; }

/* list table */
.list-card{ background:var(--surface); border:1px solid var(--border); border-radius:16px; overflow:hidden; }
table{ width:100%; border-collapse:collapse; }
thead th{ background:var(--bg); color:var(--ink-500); font-size:11px; text-align:left; padding:11px 14px; border-bottom:1px solid var(--border); font-weight:600; white-space:nowrap; text-transform:uppercase; letter-spacing:.03em; }
tbody td{ padding:13px 14px; border-bottom:1px solid var(--border-soft); font-size:12.5px; white-space:nowrap; }
tbody tr:last-child td{ border-bottom:none; }
tbody tr{ cursor:pointer; }
tbody tr:hover{ background:var(--bg); }
td.title-cell{ white-space:normal; max-width:280px; color:var(--ink-900); font-weight:500; }
td.title-cell .attach-flag{ display:inline-flex; align-items:center; gap:3px; color:var(--ink-400); font-size:11px; margin-left:6px; font-weight:400; }

.sev{ display:inline-flex; align-items:center; gap:6px; font-size:12.5px; font-weight:600; }
.status-badge{ display:inline-flex; align-items:center; padding:3px 10px; border-radius:7px; font-size:11.5px; font-weight:700; white-space:nowrap; }

.toolbar-row{ display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
.toolbar-row .left{ font-size:12.5px; color:var(--ink-500); }
.toolbar-row .right{ display:flex; gap:8px; }

/* ===== register form ===== */
.form-card{ background:var(--surface); border:1px solid var(--border); border-radius:16px; padding:22px 24px; margin-bottom:16px; }
.form-card h3{ font-size:14px; font-weight:600; margin:0 0 16px; padding-bottom:12px; border-bottom:1px solid var(--border-soft); }
.grid2{ display:grid; grid-template-columns:1fr 1fr; gap:16px; }
.field{ margin-bottom:16px; }
.field:last-child{ margin-bottom:0; }
.field label{ display:block; font-size:12.5px; color:var(--ink-700); margin-bottom:6px; font-weight:600; }
.field label .req{ color:var(--fail); margin-left:3px; }
.field input, .field select, .field textarea{ width:100%; border:1px solid var(--border); border-radius:9px; padding:9px 12px; font-size:13px; font-family:"Pretendard"; color:var(--ink-900); }
.field input[type="checkbox"], .field input[type="radio"]{ width:auto; flex:0 0 auto; padding:0; }
.field textarea{ resize:vertical; min-height:70px; }
.field input:focus, .field select:focus, .field textarea:focus{ outline:none; border-color:var(--accent-500); }

.sev-group{ display:flex; gap:0; border:1px solid var(--border); border-radius:9px; overflow:hidden; width:fit-content; }
.sev-group button{ border:none; background:var(--surface); padding:8px 20px; font-size:12.5px; font-weight:600; cursor:pointer; border-right:1px solid var(--border); color:var(--ink-700); display:flex; align-items:center; gap:6px; }
.sev-group button:last-child{ border-right:none; }
.sev-group button .dot{ width:7px; height:7px; }
.sev-group button.sel-sang.on{ background:var(--fail); color:#fff; }
.sev-group button.sel-jung.on{ background:var(--progress); color:#fff; }
.sev-group button.sel-ha.on{ background:var(--ink-400); color:#fff; }
.sev-group button.on .dot{ background:#fff !important; }

.steps{ display:flex; flex-direction:column; gap:9px; }
.step-row{ display:flex; gap:8px; align-items:flex-start; }
.step-row .num{ width:23px; height:23px; border-radius:50%; background:var(--bg); color:var(--ink-500); font-size:11px; display:flex; align-items:center; justify-content:center; flex-shrink:0; margin-top:6px; font-weight:600; }
.step-row input{ flex:1; }
.step-row .rm{ background:none; border:none; color:var(--ink-400); cursor:pointer; font-size:15px; margin-top:6px; }

.dropzone{ border:2px dashed var(--border); border-radius:12px; padding:28px; text-align:center; color:var(--ink-500); font-size:12.5px; background:var(--bg); }
.dropzone i{ font-size:26px; color:var(--accent-500); display:block; margin-bottom:8px; }
.dropzone b{ color:var(--accent-500); cursor:pointer; }
.file-chips{ display:flex; flex-wrap:wrap; gap:10px; margin-top:14px; }
.chip{ display:flex; align-items:center; gap:8px; background:var(--surface); border:1px solid var(--border); border-radius:10px; padding:6px 6px 6px 6px; font-size:11.5px; }
.chip .thumb{ width:32px; height:32px; border-radius:6px; object-fit:cover; background:var(--bg); }
.chip .name{ color:var(--ink-700); max-width:120px; overflow:hidden; text-overflow:ellipsis; }
.chip .x{ cursor:pointer; color:var(--ink-400); padding:0 4px; }

.file-list-rows{ display:flex; flex-direction:column; gap:8px; margin-top:14px; }
.file-row{ display:flex; align-items:center; gap:10px; background:var(--surface); border:1px solid var(--border); border-radius:10px; padding:10px 14px; font-size:13px; width:100%; }
.file-row .thumb{ width:32px; height:32px; border-radius:6px; object-fit:cover; background:var(--bg); flex-shrink:0; }
.file-row .name{ color:var(--ink-700); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; }

.form-footer{ display:flex; justify-content:flex-end; gap:10px; padding:16px 0 4px; }

/* ===== detail view ===== */
.detail-header{ background:var(--surface); border:1px solid var(--border); border-radius:16px; padding:20px 22px; margin-bottom:14px; display:flex; justify-content:space-between; align-items:flex-start; flex-wrap:wrap; gap:14px; }
.detail-header .id{ font-size:11.5px; color:var(--ink-500); margin-bottom:5px; font-family:"Pretendard"; }
.detail-header h2{ font-size:18px; margin:0 0 9px; font-weight:700; letter-spacing:-.01em; }
.detail-actions{ display:flex; gap:8px; flex-wrap:wrap; }

.detail-grid{ display:grid; grid-template-columns:270px 1fr; gap:14px; align-items:flex-start; }
.info-card{ background:var(--surface); border:1px solid var(--border); border-radius:16px; padding:18px 20px; }
.info-card h3, .section-card h3{ font-size:11.5px; color:var(--ink-500); text-transform:uppercase; letter-spacing:.05em; margin:0 0 14px; font-weight:700; }
.info-row{ display:flex; justify-content:space-between; padding:8px 0; border-bottom:1px solid var(--border-soft); font-size:12.5px; gap:10px; }
.info-row:last-child{ border-bottom:none; }
.info-row .k{ color:var(--ink-500); flex-shrink:0; }
.info-row .v{ color:var(--ink-900); font-weight:600; text-align:right; }

.section-card{ background:var(--surface); border:1px solid var(--border); border-radius:16px; padding:18px 20px; margin-bottom:14px; }
.kv-block{ margin-bottom:16px; }
.kv-block:last-child{ margin-bottom:0; }
.kv-block .lbl{ font-size:11.5px; color:var(--ink-500); margin-bottom:7px; font-weight:600; }
.kv-block .cnt{ font-size:13px; color:var(--ink-900); line-height:1.65; white-space:pre-wrap; }
.step-list{ margin:0; padding-left:19px; }
.step-list li{ margin-bottom:5px; }
.attach-list{ display:flex; flex-wrap:wrap; gap:10px; }
.attach-item{ display:flex; flex-direction:column; gap:6px; }
.attach-item img{ width:110px; height:80px; object-fit:cover; border-radius:10px; border:1px solid var(--border); }
.attach-item span{ font-size:11px; color:var(--ink-500); max-width:110px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

.action-card{ border:1px solid var(--border); border-radius:16px; padding:18px 20px; margin-bottom:14px; }
.action-card.fix{ background:var(--progress-bg); border-color:#F8DFB0; }
.action-card.retest{ background:var(--blocked-bg); border-color:#DCD0FB; }
.action-card h4{ font-size:12.5px; margin:0 0 12px; display:flex; align-items:center; gap:7px; font-weight:700; }
.action-card h4 span{ font-weight:400; color:var(--ink-500); font-size:11.5px; }
.action-card textarea, .action-card select{ width:100%; border:1px solid var(--border); border-radius:9px; padding:9px 11px; font-size:12.5px; margin-bottom:9px; font-family:"Pretendard"; }
.action-card textarea{ min-height:60px; resize:vertical; }
.action-card .row-btns{ display:flex; gap:8px; justify-content:flex-end; }

.timeline{ list-style:none; margin:0; padding:0; }
.timeline li{ display:flex; gap:12px; padding-bottom:18px; position:relative; }
.timeline li:not(:last-child)::before{ content:""; position:absolute; left:5px; top:17px; bottom:0; width:1px; background:var(--border); }
.timeline .tdot{ width:11px; height:11px; border-radius:50%; flex-shrink:0; margin-top:3px; }
.timeline .tb{ font-size:12.5px; }
.timeline .tmeta{ color:var(--ink-500); font-size:11px; margin-bottom:3px; font-family:"Pretendard"; }
.timeline .tb b{ color:var(--ink-900); }

.comment{ display:flex; gap:10px; margin-bottom:13px; }
.comment .avatar{ width:30px; height:30px; border-radius:9px; background:var(--accent-050); color:var(--accent-600); display:flex; align-items:center; justify-content:center; font-size:11px; font-weight:700; flex-shrink:0; }
.comment .cbody{ background:var(--bg); border-radius:12px; padding:10px 13px; font-size:12.5px; flex:1; }
.comment .cmeta{ font-size:11px; color:var(--ink-500); margin-bottom:4px; font-family:"Pretendard"; }
.comment-input{ display:flex; gap:8px; margin-top:12px; }
.comment-input input{ flex:1; border:1px solid var(--border); border-radius:9px; padding:9px 12px; font-size:12.5px; font-family:"Pretendard"; }

.hint{ background:var(--accent-050); border:1px solid var(--accent-100); color:var(--accent-600); border-radius:12px; padding:11px 14px; font-size:12px; margin-bottom:14px; display:flex; align-items:center; gap:8px; }

/* ===== 화면설계서 등록 전용 ===== */
.fmt-badge{ display:inline-flex; align-items:center; gap:5px; padding:3px 9px; border-radius:7px; font-size:11px; font-weight:700; }
.fmt-pdf{ background:#FDEAEC; color:#F1556C; }
.fmt-img{ background:#E9EDFE; color:#3D5BF0; }
.fmt-ppt{ background:#FDF2E0; color:#B4790E; }

.gen-badge{ display:inline-flex; align-items:center; gap:5px; padding:3px 10px; border-radius:7px; font-size:11.5px; font-weight:700; }
.gen-done{ background:var(--pass-bg); color:var(--pass); }
.gen-pending{ background:#F1F2F5; color:var(--ink-500); }
.gen-running{ background:var(--progress-bg); color:var(--progress); }

.thumb-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(120px,1fr)); gap:10px; }
.thumb-grid .th-item{ position:relative; border-radius:10px; overflow:hidden; border:1px solid var(--border); background:var(--bg); }
.thumb-grid .th-item img{ width:100%; height:88px; object-fit:cover; display:block; }
.thumb-grid .th-item .pg{ position:absolute; bottom:5px; right:6px; background:rgba(18,22,42,.7); color:#fff; font-size:10px; padding:1px 6px; border-radius:5px; font-family:"Pretendard"; }
.thumb-grid .th-item .rm{ position:absolute; top:5px; right:5px; width:20px; height:20px; border-radius:50%; background:rgba(18,22,42,.6); color:#fff; display:flex; align-items:center; justify-content:center; font-size:11px; cursor:pointer; }

.upload-tabs{ display:flex; gap:6px; margin-bottom:14px; }
.upload-tabs button{ border:1px solid var(--border); background:var(--surface); color:var(--ink-500); font-size:12px; font-weight:500; padding:7px 14px; border-radius:8px; cursor:pointer; display:flex; align-items:center; gap:6px; }
.upload-tabs button.on{ background:var(--accent-050); border-color:var(--accent-100); color:var(--accent-600); }

.tmpl-pick{ display:flex; align-items:center; justify-content:space-between; border:1px solid var(--border); border-radius:10px; padding:12px 14px; background:var(--bg); }
.tmpl-pick .l{ display:flex; align-items:center; gap:10px; font-size:12.5px; color:var(--ink-900); }
.tmpl-pick .l i{ color:var(--accent-500); font-size:16px; }
.tmpl-pick .meta{ font-size:11px; color:var(--ink-500); margin-top:2px; }

.result-table-wrap{ border:1px solid var(--border); border-radius:12px; overflow:hidden; margin-top:4px; }
.pill-success{ display:inline-flex; align-items:center; gap:4px; padding:2px 8px; border-radius:6px; font-size:10.5px; font-weight:700; background:var(--pass-bg); color:var(--pass); }

/* ===== 로그인 화면 ===== */
.login-page{ display:flex; min-height:100vh; }
.login-brand{
  width:44%; background:var(--lnb-bg); color:#fff; display:flex; flex-direction:column;
  justify-content:space-between; padding:56px;
}
.login-brand .brand-row{ display:flex; align-items:center; gap:12px; }
.login-brand .bm{ width:40px; height:40px; border-radius:11px; background:rgba(255,255,255,.07); display:grid; grid-template-columns:1fr 1fr; grid-template-rows:1fr 1fr; gap:4px; padding:7px; }
.login-brand .bm span{ border-radius:3px; }
.login-brand .bm span:nth-child(1){ background:var(--pass); }
.login-brand .bm span:nth-child(2){ background:var(--progress); }
.login-brand .bm span:nth-child(3){ background:var(--blocked); }
.login-brand .bm span:nth-child(4){ background:var(--fail); }
.login-brand .bname{ font-weight:700; font-size:19px; }
.login-brand .tagline{ font-size:28px; font-weight:700; line-height:1.4; letter-spacing:-.01em; max-width:420px; }
.login-brand .sub{ font-size:13.5px; color:var(--lnb-text); margin-top:14px; line-height:1.7; max-width:400px; }
.login-brand .chainflow{ display:flex; flex-wrap:wrap; gap:8px; margin-top:26px; }
.login-brand .chainflow span{ font-size:11px; color:#C7CEDE; background:rgba(255,255,255,.06); border-radius:7px; padding:5px 10px; font-family:"Pretendard"; }
.login-brand .foot{ font-size:11px; color:var(--lnb-label); }

.login-form-side{ flex:1; display:flex; align-items:center; justify-content:center; background:var(--bg); padding:40px; }
.login-box{ width:100%; max-width:380px; }
.login-box h1{ font-size:23px; font-weight:700; margin:0 0 8px; letter-spacing:-.01em; }
.login-box p.desc{ font-size:13px; color:var(--ink-500); margin:0 0 28px; }
.login-field{ margin-bottom:16px; }
.login-field label{ display:block; font-size:12.5px; font-weight:600; color:var(--ink-700); margin-bottom:6px; }
.login-field input{ width:100%; border:1px solid var(--border); border-radius:10px; padding:11px 13px; font-size:13.5px; font-family:"Pretendard"; }
.login-field input:focus{ outline:none; border-color:var(--accent-500); }
.login-row-between{ display:flex; justify-content:space-between; align-items:center; font-size:12.5px; margin:2px 0 22px; }
.login-row-between a{ color:var(--accent-600); text-decoration:none; font-weight:500; }
.login-check{ display:flex; align-items:center; gap:6px; color:var(--ink-500); }
.btn-login{ width:100%; background:var(--accent-500); color:#fff; border:none; border-radius:10px; padding:12px; font-size:14px; font-weight:600; cursor:pointer; font-family:"Pretendard"; }
.login-divider{ display:flex; align-items:center; gap:10px; margin:22px 0; color:var(--ink-400); font-size:11.5px; }
.login-divider::before, .login-divider::after{ content:""; flex:1; height:1px; background:var(--border); }
.login-signup{ text-align:center; font-size:13px; color:var(--ink-500); }
.login-signup a{ color:var(--accent-600); font-weight:600; text-decoration:none; }
.login-pending-note{ display:flex; gap:8px; align-items:flex-start; background:var(--progress-bg); color:#8A5A0F; border-radius:10px; padding:10px 12px; font-size:11.5px; margin-top:18px; }

/* ===== 메인화면 (프로젝트 선택) ===== */
.main-top{ display:flex; align-items:center; justify-content:space-between; padding:20px 40px; background:var(--surface); border-bottom:1px solid var(--border); }
.main-top .brand-row{ display:flex; align-items:center; gap:10px; }
.main-top .bm{ width:32px;height:32px;border-radius:9px; background:var(--accent-050); display:grid; grid-template-columns:1fr 1fr; grid-template-rows:1fr 1fr; gap:3px; padding:6px; }
.main-top .bm span{ border-radius:2px; }
.main-top .bm span:nth-child(1){ background:var(--pass); }
.main-top .bm span:nth-child(2){ background:var(--progress); }
.main-top .bm span:nth-child(3){ background:var(--blocked); }
.main-top .bm span:nth-child(4){ background:var(--fail); }
.main-top .bname{ font-weight:700; font-size:16px; color:var(--ink-900); }
.main-top-right{ display:flex; align-items:center; gap:12px; }

.main-body{ padding:40px; max-width:1180px; margin:0 auto; }
.main-head h1{ font-size:24px; font-weight:700; margin:0 0 6px; }
.main-head p{ font-size:13.5px; color:var(--ink-500); margin:0 0 28px; }

.proj-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:18px; }
.proj-card{ background:var(--surface); border:1px solid var(--border); border-radius:16px; padding:20px 22px; cursor:pointer; transition:box-shadow .15s,border-color .15s; }
.proj-card:hover{ border-color:var(--accent-100); box-shadow:0 4px 16px rgba(61,91,240,.08); }
.proj-card .top{ display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:14px; }
.proj-card .icon{ width:42px; height:42px; border-radius:11px; background:var(--accent-050); color:var(--accent-500); display:flex; align-items:center; justify-content:center; font-size:19px; }
.proj-card .role-badge{ font-size:10.5px; font-weight:700; padding:3px 9px; border-radius:6px; background:var(--bg); color:var(--ink-500); }
.proj-card h3{ font-size:15.5px; font-weight:700; margin:0 0 5px; color:var(--ink-900); }
.proj-card .client{ font-size:12px; color:var(--ink-500); margin-bottom:16px; }
.proj-card .stage-track{ display:flex; gap:3px; margin-bottom:10px; }
.proj-card .stage-track span{ flex:1; height:5px; border-radius:3px; background:var(--bg); }
.proj-card .stage-track span.done{ background:var(--pass); }
.proj-card .stage-track span.active{ background:var(--accent-500); }
.proj-card .meta-row{ display:flex; justify-content:space-between; font-size:11px; color:var(--ink-400); }
.new-proj-card{ display:flex; flex-direction:column; align-items:center; justify-content:center; gap:8px; border:1.5px dashed var(--border); border-radius:16px; color:var(--ink-400); font-size:13px; font-weight:500; cursor:pointer; min-height:172px; }
.new-proj-card i{ font-size:22px; color:var(--accent-500); }

/* ===== RFP 등록/수정/상세 공통 ===== */
.upload-slot{ display:flex; align-items:center; justify-content:space-between; border:1px solid var(--border); border-radius:10px; padding:11px 14px; margin-bottom:8px; }
.upload-slot .l{ display:flex; align-items:center; gap:10px; font-size:12.5px; color:var(--ink-900); }
.upload-slot .l i{ font-size:16px; color:var(--accent-500); }
.upload-slot .sz{ font-size:11px; color:var(--ink-400); margin-left:4px; }
.upload-slot .x{ color:var(--ink-400); cursor:pointer; }

.status-pill{ display:inline-flex; align-items:center; gap:6px; font-size:11.5px; font-weight:700; padding:4px 11px; border-radius:8px; }
.sp-wait{ background:#F1F2F5; color:var(--ink-500); }
.sp-running{ background:var(--progress-bg); color:var(--progress); }
.sp-done{ background:var(--pass-bg); color:var(--pass); }

.req-draft-item{ border:1px solid var(--border); border-radius:12px; padding:14px 16px; margin-bottom:10px; }
.req-draft-item .rd-top{ display:flex; justify-content:space-between; align-items:flex-start; gap:10px; margin-bottom:6px; }
.req-draft-item .rd-title{ font-size:13px; font-weight:600; color:var(--ink-900); }
.req-draft-item .rd-desc{ font-size:12px; color:var(--ink-500); line-height:1.6; }
.req-draft-item .rd-tag{ font-size:10.5px; font-weight:700; padding:2px 8px; border-radius:6px; background:var(--accent-050); color:var(--accent-600); white-space:nowrap; }

.doc-preview-wrap{ display:flex; gap:10px; overflow-x:auto; padding-bottom:4px; }
.doc-preview-wrap .pg{ flex-shrink:0; width:132px; }
.doc-preview-wrap .pg img{ width:132px; height:172px; object-fit:cover; border-radius:10px; border:1px solid var(--border); background:var(--bg); }
.doc-preview-wrap .pg .cap{ font-size:11px; color:var(--ink-500); text-align:center; margin-top:6px; }

/* ===== topbar 우측 아이콘 그룹 (v2 스타일 재사용) ===== */
.topbar-right{ display:flex; align-items:center; gap:12px; height:34px; }
.role-pill{
  display:flex; align-items:center; gap:6px; height:34px; box-sizing:border-box;
  border:1px solid var(--border); background:var(--surface);
  border-radius:8px; padding:0 12px 0 10px; font-size:12.5px; color:var(--ink-700); font-weight:500;
}
.role-pill .dot{ width:6px; height:6px; border-radius:50%; background:var(--accent-500); }
.icon-btn{
  width:34px; height:34px; border-radius:8px; border:1px solid var(--border); background:var(--surface);
  display:flex; align-items:center; justify-content:center; color:var(--ink-500); position:relative; font-size:15px;
  box-sizing:border-box;
}
.icon-btn .ping{ position:absolute; top:6px; right:7px; width:6px; height:6px; border-radius:50%; background:var(--fail); border:1.5px solid var(--surface); }
.avatar{
  width:34px; height:34px; border-radius:8px; background:var(--lnb-bg); color:#fff;
  display:flex; align-items:center; justify-content:center; font-size:12px; font-weight:600;
  box-sizing:border-box; flex-shrink:0;
}
.tb-icon{
  width:38px; height:38px; border-radius:10px; border:1px solid var(--border); background:var(--surface);
  display:flex; align-items:center; justify-content:center; color:var(--ink-500); font-size:16px; cursor:pointer;
  position:relative;
}
.tb-icon .ping{ position:absolute; top:6px; right:7px; width:8px; height:8px; border-radius:50%; background:var(--fail); border:1.5px solid var(--surface); }

/* ===== 서브탭 (요구사항정의서 <-> 추적표 등) ===== */
.subtab-bar{ display:flex; gap:6px; margin-bottom:18px; }
.subtab-bar a{ display:flex; align-items:center; gap:7px; border:1px solid var(--border); background:var(--surface); color:var(--ink-500); font-size:12.5px; font-weight:500; padding:8px 15px; border-radius:9px; text-decoration:none; }
.subtab-bar a.on{ background:var(--accent-050); border-color:var(--accent-100); color:var(--accent-600); }

/* ===== 요구사항정의서 상태 배지 ===== */
.rq-draft{ background:#F1F2F5; color:#4A5268; }
.rq-review{ background:var(--progress-bg); color:#B4790E; }
.rq-final{ background:var(--pass-bg); color:var(--pass); }

.assignee-bar{ display:flex; align-items:center; gap:10px; background:var(--surface); border:1px solid var(--border); border-radius:12px; padding:10px 16px; margin-bottom:16px; font-size:12.5px; color:var(--ink-700); }
.chip-user{ display:inline-flex; align-items:center; gap:6px; background:var(--bg); border-radius:20px; padding:3px 10px 3px 4px; font-size:11.5px; }
.chip-user .av{ width:20px;height:20px;border-radius:50%; background:var(--lnb-bg); color:#fff; display:flex; align-items:center; justify-content:center; font-size:9px; font-weight:700; flex-shrink:0; }
.assignee-bar .edit-link{ margin-left:auto; color:var(--accent-600); font-weight:600; text-decoration:none; }

.trace-matrix th, .trace-matrix td{ font-size:12px; }
.trace-input{ border:1px solid var(--border); border-radius:7px; padding:5px 8px; font-size:12px; width:100%; font-family:"Pretendard"; }
.mini-bar-track{ height:6px; background:var(--bg); border-radius:4px; overflow:hidden; width:70px; display:inline-block; vertical-align:middle; margin-right:6px; }
.mini-bar-track > div{ height:100%; }

/* ===== IA 메뉴구조도 상세 (스프레드시트형) ===== */
.ia-table-wrap{ border:1px solid var(--border); border-radius:14px; overflow-x:auto; background:var(--surface); }
.ia-table{ width:100%; border-collapse:collapse; font-size:12px; white-space:nowrap; }
.ia-table thead th{ background:var(--bg); color:var(--ink-500); font-weight:700; text-align:left; padding:9px 10px; border-bottom:1px solid var(--border); position:sticky; top:0; }
.ia-table tbody td{ padding:8px 10px; border-bottom:1px solid var(--border-soft); vertical-align:middle; }
.ia-table tr.group-row td{ background:var(--bg); font-weight:700; color:var(--ink-900); padding-top:9px; padding-bottom:9px; }
.ia-table tr.leaf-row:hover{ background:var(--accent-050); }
.ia-path{ display:flex; align-items:center; gap:4px; color:var(--ink-900); }
.ia-path .dash{ color:var(--ink-400); }
.phase-badge{ display:inline-flex; align-items:center; gap:4px; font-size:10.5px; font-weight:700; padding:2px 8px; border-radius:6px; white-space:nowrap; }
.ph-done{ background:var(--pass-bg); color:var(--pass); }
.ph-progress{ background:var(--progress-bg); color:#B4790E; }
.ph-delay{ background:var(--fail-bg); color:var(--fail); }
.ph-wait{ background:#F1F2F5; color:var(--ink-400); }
.ph-removed{ background:#F1F2F5; color:var(--ink-400); text-decoration:line-through; }
.phase-cell .assignee{ font-size:10px; color:var(--ink-400); margin-top:2px; }
.new-tag{ font-size:10px; font-weight:700; background:var(--accent-050); color:var(--accent-600); border-radius:5px; padding:1px 6px; }
.reqid-link{ color:var(--accent-600); font-weight:600; text-decoration:none; font-size:11.5px; }
.code-rule-btn{ display:inline-flex; align-items:center; gap:6px; font-size:12px; color:var(--accent-600); font-weight:600; cursor:pointer; }

/* ===== IA 트리 UI ===== */
.ia-split{ display:flex; flex-wrap:wrap; gap:16px; align-items:flex-start; }
.ia-tree-panel{ background:var(--surface); border:1px solid var(--border); border-radius:16px; padding:16px; position:relative; flex:0 0 auto; }
.ia-resize-handle{ position:absolute; top:0; right:-9px; width:18px; height:100%; cursor:col-resize; display:flex; align-items:center; justify-content:center; z-index:5; }
.ia-resize-handle::after{ content:""; width:4px; height:44px; border-radius:3px; background:var(--border); transition:background .15s; }
.ia-resize-handle:hover::after, .ia-resize-handle.dragging::after{ background:var(--accent-400); }
.ia-tree-toolbar{ display:flex; gap:8px; margin-bottom:12px; }
.ia-tree-search{ display:flex; align-items:center; gap:8px; border:1px solid var(--border); border-radius:9px; padding:8px 12px; margin-bottom:10px; color:var(--ink-400); font-size:12.5px; }
.ia-tree-search input{ border:none; outline:none; font-size:12.5px; font-family:"Pretendard"; flex:1; color:var(--ink-900); }
.ia-tree-scroll{ max-height:600px; overflow-y:auto; }

.tree-row{ display:flex; align-items:center; gap:6px; padding:7px 8px; border-radius:8px; cursor:pointer; font-size:13px; color:var(--ink-900); }
.tree-row:hover{ background:var(--bg); }
.tree-row.selected{ background:var(--accent-050); color:var(--accent-600); font-weight:600; }
.tree-row.drag-over{ outline:2px dashed var(--accent-500); outline-offset:-2px; background:var(--accent-050); }
.tree-row.drag-before{ box-shadow: 0 -2px 0 0 var(--accent-500); }
.tree-row.drag-after{ box-shadow: 0 2px 0 0 var(--accent-500); }
.ia-root-dropzone{ margin-top:10px; padding:12px; border:1.5px dashed var(--border); border-radius:8px; text-align:center; font-size:11.5px; color:var(--ink-400); }
.ia-root-dropzone.drag-over{ border-color:var(--accent-500); color:var(--accent-600); background:var(--accent-050); }
.tree-toggle{ width:16px; flex-shrink:0; text-align:center; color:var(--ink-400); font-size:11px; }
.tree-toggle.leaf{ color:transparent; }
.tree-scr{ font-size:10px; color:var(--ink-400); font-weight:500; flex-shrink:0; }
.tree-warn{ font-size:10px; color:var(--fail); font-weight:500; flex-shrink:0; display:flex; align-items:center; gap:3px; }
.tree-new{ width:6px; height:6px; border-radius:50%; background:var(--accent-500); flex-shrink:0; }
.tree-actions{ display:none; gap:2px; margin-left:auto; flex-shrink:0; }
.tree-row:hover .tree-actions{ display:flex; }
.tree-actions i{ font-size:13px; color:var(--ink-400); padding:3px 5px; border-radius:5px; }
.tree-actions i:hover{ background:var(--surface); color:var(--accent-600); }
.tree-children{ margin-left:19px; border-left:1px dashed var(--border); padding-left:8px; }
.tree-children.collapsed{ display:none; }

.ia-spec-panel{ background:var(--surface); border:1px solid var(--border); border-radius:16px; padding:22px 24px; flex:1 1 380px; min-width:380px; }
.ia-spec-path{ font-size:11.5px; color:var(--ink-400); margin-bottom:4px; }
.ia-spec-path b{ color:var(--ink-700); font-weight:500; }
.ia-spec-panel h2{ font-size:17px; font-weight:700; margin:2px 0 18px; }
.ia-empty-panel{ display:flex; flex-direction:column; align-items:center; justify-content:center; gap:10px; color:var(--ink-400); padding:80px 20px; text-align:center; font-size:13px; }
.ia-empty-panel i{ font-size:30px; color:var(--ink-300,#C7CCD9); }

/* ===== 통합테스트결과서 상태 ===== */
.res-wait{ background:#F1F2F5; color:var(--ink-500); }
.res-pass{ background:var(--pass-bg); color:var(--pass); }
.res-fail{ background:var(--fail-bg); color:var(--fail); }

/* ===== 화면설계서/시나리오 공용 상태 (초안/검토중/확정 재사용) ===== */
.sev-tag2{ display:inline-flex; align-items:center; gap:6px; font-size:12.5px; font-weight:600; }
.round-select{ display:flex; align-items:center; gap:8px; border:1px solid var(--border); background:var(--surface); border-radius:9px; padding:8px 14px; font-size:12.5px; color:var(--ink-700); font-weight:500; cursor:pointer; }

/* ===== 다중 화면 선택 칩 ===== */
.multi-pick{ border:1px solid var(--border); border-radius:10px; padding:10px 12px; }
.multi-pick-chips{ display:flex; flex-wrap:wrap; gap:8px; margin-bottom:10px; }
.multi-pick-chips .mp-chip{ display:flex; align-items:center; gap:6px; background:var(--accent-050); color:var(--accent-600); font-size:12px; font-weight:600; border-radius:20px; padding:5px 6px 5px 12px; }
.multi-pick-chips .mp-chip i{ cursor:pointer; font-size:11px; padding:2px; }
.multi-pick-add{ display:flex; align-items:center; gap:8px; color:var(--ink-400); font-size:12.5px; }
.multi-pick-add select{ border:1px dashed var(--border); border-radius:8px; padding:6px 10px; font-size:12px; color:var(--ink-500); background:var(--bg); font-family:"Pretendard"; }
.scr-chip-list{ display:flex; flex-wrap:wrap; gap:6px; }
.scr-chip-list .sc{ font-size:11px; font-weight:600; color:var(--accent-600); background:var(--accent-050); border-radius:6px; padding:2px 8px; }

/* ===== 테스트케이스 카드 ===== */
.tc-card{ border:1px solid var(--border); border-radius:12px; padding:14px 16px; margin-bottom:10px; }
.tc-card .tc-top{ display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; }
.tc-card .tc-id{ font-size:11.5px; font-weight:700; color:var(--accent-600); background:var(--accent-050); border-radius:6px; padding:2px 8px; }
.tc-card .tc-title{ font-size:13px; font-weight:600; color:var(--ink-900); margin-left:8px; }
.tc-card .tc-actions{ display:flex; gap:6px; color:var(--ink-400); }
.tc-card .tc-actions i{ cursor:pointer; padding:3px; }
.tc-card .tc-grid{ display:grid; grid-template-columns:1fr 1fr; gap:10px; font-size:12px; }
.tc-card .tc-field{ }
.tc-card .tc-field .lbl{ font-size:11px; color:var(--ink-500); font-weight:600; margin-bottom:3px; }
.tc-card .tc-field .val{ color:var(--ink-900); line-height:1.5; }
.tc-add-btn{ width:100%; border:1.5px dashed var(--border); border-radius:12px; padding:12px; text-align:center; color:var(--ink-400); font-size:12.5px; font-weight:500; cursor:pointer; background:var(--bg); }

/* ===== TC 목록+패널 (variant 1) ===== */
.tc-split{ display:grid; grid-template-columns:300px 1fr; gap:14px; align-items:start; }
.tc-list-panel{ background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:10px; }
.tc-list-row{ display:flex; align-items:center; gap:10px; padding:10px 10px; border-radius:9px; cursor:pointer; }
.tc-list-row:hover{ background:var(--bg); }
.tc-list-row.selected{ background:var(--accent-050); }
.tc-list-row .tc-badge{ font-size:10.5px; font-weight:700; color:var(--accent-600); background:var(--surface); border:1px solid var(--accent-100); border-radius:6px; padding:1px 6px; flex-shrink:0; }
.tc-list-row .tc-name{ font-size:12.5px; color:var(--ink-900); flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tc-list-row .tc-status-dot{ width:8px; height:8px; border-radius:50%; flex-shrink:0; }
.tc-list-foot{ padding:10px; }

/* ===== TC 아코디언 (variant 3) ===== */
.tc-acc{ border:1px solid var(--border); border-radius:12px; margin-bottom:8px; overflow:hidden; }
.tc-acc-head{ display:flex; align-items:center; gap:10px; padding:13px 16px; cursor:pointer; background:var(--surface); }
.tc-acc-head:hover{ background:var(--bg); }
.tc-acc-head .chev{ color:var(--ink-400); font-size:12px; transition:transform .15s; }
.tc-acc-head.open .chev{ transform:rotate(90deg); }
.tc-acc-body{ padding:0 16px 16px; display:none; }
.tc-acc-body.open{ display:block; }
.tc-status-pill-sm{ font-size:10px; font-weight:700; padding:2px 7px; border-radius:5px; margin-left:auto; }

/* ===== 버전 발행 모달 ===== */
.pub-modal-overlay{ position:fixed; inset:0; background:rgba(15,20,35,.55); display:flex; align-items:center; justify-content:center; z-index:100; }
.pub-modal{ background:var(--surface); border-radius:18px; width:480px; max-width:92vw; padding:26px 28px 24px; box-shadow:0 20px 60px rgba(15,20,35,.3); }
.pub-modal h2{ font-size:16px; font-weight:700; margin:0 0 4px; }
.pub-modal .sub{ font-size:12px; color:var(--ink-500); margin:0 0 20px; }

.merge-visual{ display:flex; align-items:center; justify-content:center; gap:14px; margin-bottom:20px; padding:18px 10px; background:var(--bg); border-radius:14px; }
.merge-visual .src-stack{ display:flex; flex-direction:column; gap:5px; }
.merge-visual .src-item{ display:flex; align-items:center; gap:6px; background:var(--surface); border:1px solid var(--border); border-radius:7px; padding:4px 9px; font-size:10.5px; color:var(--ink-700); font-weight:600; }
.merge-visual .src-item .d{ width:6px; height:6px; border-radius:50%; }
.merge-visual .arrow{ color:var(--ink-300,#C7CCD9); font-size:20px; }
.merge-visual .doc-result{ display:flex; flex-direction:column; align-items:center; gap:6px; }
.merge-visual .doc-result .doc-icon{ width:52px; height:60px; background:var(--accent-500); border-radius:8px 8px 8px 8px; position:relative; display:flex; align-items:center; justify-content:center; color:#fff; font-size:20px; }
.merge-visual .doc-result .doc-icon::before{ content:""; position:absolute; top:0; right:0; width:0; height:0; border-style:solid; border-width:0 14px 14px 0; border-color:transparent var(--accent-100) transparent transparent; }
.merge-visual .doc-result .doc-label{ font-size:11px; font-weight:700; color:var(--ink-900); }
.merge-visual .doc-result .doc-count{ font-size:10px; color:var(--accent-600); font-weight:700; background:var(--accent-050); border-radius:5px; padding:1px 7px; }

.pub-modal .opt-row{ display:flex; align-items:center; justify-content:space-between; padding:9px 0; border-bottom:1px solid var(--border-soft); font-size:12.5px; }
.pub-modal .opt-row .v{ font-weight:600; color:var(--ink-900); }
.pub-modal .modal-foot{ display:flex; justify-content:flex-end; gap:8px; margin-top:18px; }

/* ===== 가로형 기본정보 바 ===== */
.meta-strip{ display:flex; flex-wrap:wrap; gap:22px; background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:14px 20px; margin-bottom:14px; }
.meta-strip .mi{ display:flex; align-items:center; gap:7px; font-size:12.5px; }
.meta-strip .mi .k{ color:var(--ink-500); }
.meta-strip .mi .v{ color:var(--ink-900); font-weight:600; }

/* ===== IA 트리 뷰 ===== */
.ia-tree{ font-size:13px; }
.ia-tree ul{ list-style:none; margin:0; padding-left:26px; }
.ia-tree > ul{ padding-left:0; }
.ia-tree li{ margin:3px 0; }
.ia-node{ display:flex; align-items:center; gap:8px; padding:7px 10px; border-radius:8px; border:1px solid transparent; }
.ia-node:hover{ background:var(--bg); border-color:var(--border); }
.ia-node i.folder{ color:var(--accent-500); }
.ia-node .name{ color:var(--ink-900); font-weight:500; }
.ia-node .actions{ margin-left:auto; display:none; gap:6px; color:var(--ink-400); }
.ia-node:hover .actions{ display:flex; }
.ia-node .actions i{ cursor:pointer; }

/* ===== Pass/Fail 버튼 그룹 (결과서 실행) ===== */
.result-btn-group{ display:flex; gap:0; border:1px solid var(--border); border-radius:9px; overflow:hidden; width:fit-content; }
.result-btn-group button{ border:none; background:var(--surface); padding:9px 22px; font-size:12.5px; font-weight:700; cursor:pointer; border-right:1px solid var(--border); color:var(--ink-700); display:flex; align-items:center; gap:7px; }
.result-btn-group button:last-child{ border-right:none; }
.result-btn-group button.on.pass{ background:var(--pass); color:#fff; }
.result-btn-group button.on.fail{ background:var(--fail); color:#fff; }

/* ===== 역추적 리스트 ===== */
.link-list{ display:flex; flex-direction:column; gap:8px; }
.link-item{ display:flex; align-items:center; gap:10px; border:1px solid var(--border); border-radius:10px; padding:10px 13px; font-size:12.5px; }
.link-item .tag{ font-size:10.5px; font-weight:700; padding:2px 8px; border-radius:6px; background:var(--accent-050); color:var(--accent-600); flex-shrink:0; }
.link-item .name{ color:var(--ink-900); flex:1; }
.link-item i{ color:var(--ink-400); }

/* ===== 사용자가이드 에디터 ===== */
.editor-box{ border:1px solid var(--border); border-radius:12px; padding:22px; min-height:260px; font-size:13.5px; line-height:1.9; color:var(--ink-900); }
.editor-box h4{ font-size:14.5px; margin:0 0 10px; }
.editor-toolbar{ display:flex; gap:6px; border:1px solid var(--border); border-bottom:none; border-radius:12px 12px 0 0; padding:8px 10px; background:var(--bg); }
.editor-toolbar i{ width:28px; height:28px; display:flex; align-items:center; justify-content:center; border-radius:6px; color:var(--ink-500); cursor:pointer; font-size:14px; }
.editor-toolbar i:hover{ background:var(--surface); }
.editor-box-noround{ border-radius:0 0 12px 12px; }

/* ===== 매트릭스(추적표) ===== */
.matrix-note{ width:100%; border:1px solid var(--border); border-radius:8px; padding:6px 9px; font-size:11.5px; font-family:"Pretendard"; }
.mono{ font-family:"Consolas","Pretendard",monospace; font-size:12px; }

/* ================================================================
   모바일 반응형 (max-width: 860px)
   ================================================================ */
.hamburger-btn{ display:none; }
.sidebar-backdrop{ display:none; }

@media (max-width: 860px) {
  /* 사이드바 -> 슬라이드 드로어 */
  .sidebar{
    position:fixed; top:0; left:0; height:100vh; z-index:200;
    transform:translateX(-100%); transition:transform .2s ease; box-shadow:2px 0 24px rgba(0,0,0,.25);
  }
  .sidebar.open{ transform:translateX(0); }
  .sidebar-backdrop{
    display:block; position:fixed; inset:0; background:rgba(15,20,35,.5); z-index:150;
  }
  .main-col{ width:100%; }
  .hamburger-btn{
    display:flex; align-items:center; justify-content:center; width:36px; height:36px; flex-shrink:0;
    border:1px solid var(--border); background:var(--surface); border-radius:9px; color:var(--ink-700); font-size:17px; cursor:pointer;
  }
  .topbar{ padding:0 14px; gap:8px; }
  .crumb{ font-size:11.5px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .topbar-right{ gap:6px; }
  .role-pill{ display:none; }

  .content{ padding:8px 14px 40px; }
  .page-head{ flex-direction:column; align-items:flex-start; gap:12px; }
  .page-head > div:last-child, .page-head > div[style]{ width:100%; }

  /* 표는 가로 스크롤 */
  .list-card{ overflow-x:auto; }
  .list-card table{ min-width:640px; }
  .ia-table-wrap{ overflow-x:auto; }
  .ia-table{ min-width:640px; }

  /* 2열 그리드 -> 1열 */
  .grid2{ grid-template-columns:1fr; }
  .detail-grid{ grid-template-columns:1fr; }
  .ia-tree-panel{ width:100% !important; }
  .ia-resize-handle{ display:none; }
  .ia-tree-panel{ margin-bottom:14px; }

  /* 요약카드/필터바 */
  .summary{ grid-template-columns:repeat(2,1fr) !important; }
  .filterbar{ flex-direction:column; align-items:stretch; }
  .f-actions{ margin-left:0; }
  .meta-strip{ gap:12px 18px; }

  .detail-header{ flex-direction:column; }
  .detail-actions{ width:100%; }
  .detail-actions button{ flex:1; }

  .multi-pick-chips{ gap:6px; }
  .tc-grid{ grid-template-columns:1fr; }

  /* 로그인/회원가입 -> 세로 스택 */
  .login-page{ flex-direction:column; height:auto; min-height:100vh; }
  .login-brand{ width:100%; padding:32px 24px; }
  .login-brand .tagline{ font-size:20px; }
  .login-brand .sub{ display:none; }
  .login-brand .chainflow{ display:none; }
  .login-form-side{ padding:28px 20px; }
  .login-box{ max-width:100%; }

  /* 메인화면(프로젝트 선택) */
  .main-top{ padding:14px 16px; }
  .main-body{ padding:20px 16px; }
  .proj-grid{ grid-template-columns:1fr; }
}

/* ===== 토스트 알림 ===== */
.toast-stack{ position:fixed; bottom:24px; right:24px; z-index:500; display:flex; flex-direction:column; gap:8px; }
.toast-item{
  display:flex; align-items:center; gap:8px; background:var(--lnb-bg); color:#fff; font-size:13px; font-weight:500;
  padding:12px 18px; border-radius:10px; box-shadow:0 8px 24px rgba(0,0,0,.25); animation:toast-in .2s ease;
}
.toast-item i{ color:var(--pass); font-size:15px; }
.toast-item.toast-error i{ color:var(--fail); }
@keyframes toast-in{ from{ opacity:0; transform:translateY(8px); } to{ opacity:1; transform:translateY(0); } }
@media (max-width: 860px){
  .toast-stack{ left:14px; right:14px; bottom:14px; }
  .toast-item{ width:100%; box-sizing:border-box; }
}

/* ===== 알림 드롭다운 ===== */
.notif-dropdown{ position:absolute; top:46px; right:0; width:340px; background:var(--surface); border:1px solid var(--border); border-radius:14px; box-shadow:0 12px 32px rgba(15,20,35,.18); z-index:120; max-height:420px; overflow-y:auto; }
.notif-header{ display:flex; justify-content:space-between; align-items:center; padding:12px 16px; border-bottom:1px solid var(--border); font-size:13px; font-weight:700; }
.notif-header a{ font-size:11.5px; color:var(--accent-600); font-weight:500; cursor:pointer; }
.notif-item{ display:flex; gap:10px; padding:12px 16px; border-bottom:1px solid var(--border-soft); cursor:pointer; }
.notif-item:hover{ background:var(--bg); }
.notif-item.unread{ background:var(--accent-050); }
.notif-item .ic{ width:30px; height:30px; border-radius:9px; background:var(--bg); color:var(--accent-500); display:flex; align-items:center; justify-content:center; font-size:14px; flex-shrink:0; }
.notif-item .tx{ font-size:12.5px; color:var(--ink-900); line-height:1.5; }
.notif-item .tm{ font-size:10.5px; color:var(--ink-400); margin-top:3px; }
.notif-empty{ padding:40px 16px; text-align:center; color:var(--ink-400); font-size:12.5px; }

/* ===== 2026-08-13 PC 가독성 개선: 전역 폰트 사이즈/여백 상향 (기존 규칙보다 뒤에 위치해 우선 적용) ===== */
body{ font-size:15px; }

.btn{ font-size:14px; padding:10px 16px; }
.btn-sm{ font-size:13px; padding:7px 13px; }
.page-head h1{ font-size:23px; }
.page-head p{ font-size:14px; }
.crumb{ font-size:13.5px; }
.nav-item{ font-size:14.5px; }

table thead th{ font-size:12.5px; padding:12px 14px; }
table tbody td{ font-size:14px; padding:15px 14px; line-height:1.5; }

.f-group label{ font-size:12.5px; }
.f-group select, .f-group input{ font-size:14px; padding:9px 11px; }

.field label{ font-size:13.5px; }
.field input, .field select, .field textarea{ font-size:14.5px; padding:10px 13px; }

.detail-header h2{ font-size:19px; }
.detail-header .id{ font-size:12.5px; }
.kv-block .lbl{ font-size:12.5px; }
.kv-block .cnt{ font-size:14.5px; line-height:1.75; }
.info-row{ font-size:14px; }

.action-card textarea, .action-card select{ font-size:14px; }
.comment .cbody{ font-size:14px; }
.comment-input input{ font-size:14px; }
.toolbar-row .left{ font-size:13.5px; }
.status-badge{ font-size:12.5px; }
.gen-badge{ font-size:12.5px; }
.sev{ font-size:14px; }
.timeline .tb{ font-size:14px; }
.notif-item .tx{ font-size:13.5px; }

/* 클래스가 없는 일반 폼 요소용 최소 보장(다른 규칙이 있으면 그쪽이 우선 적용됨) */
select, input, textarea{ font-size:14px; }

@media (max-width: 860px){
  body{ font-size:14.5px; }
  .crumb{ font-size:12.5px; }
}

/* 2026-08-15 시나리오 일괄등록 모달 */
.modal-overlay{ position:fixed; inset:0; background:rgba(20,22,30,.45); display:flex; align-items:center; justify-content:center; z-index:1000; padding:20px; }
.modal-box{ background:#fff; border-radius:14px; padding:22px; width:100%; max-height:88vh; overflow-y:auto; box-shadow:0 20px 60px rgba(0,0,0,.25); }

/* 2026-08-16 사용자가이드 인쇄용 보기 - 인쇄시 앱 사이드바/상단바 숨김 */
@media print {
  .app > .nav, .app > aside, aside.sidebar, .sidebar, .topbar { display: none !important; }
  .main-col { margin: 0 !important; }
}
