/* --- src/screens-compare.jsx --- */
// New 04 신구조문 비교 + 하위문서 잔존 문구 탐지 — evidence-based panel layout
const { useState: useStateE } = React;

function CompareScreen({ go }){
  const [picked, setPicked] = useStateE('seg-2'); // selected detected change
  const [tab, setTab]       = useStateE('전체');

  // Old vs New article (highlighted spans)
  const OLD = [
    { type:'plain', text:'① 개인정보처리자는 다음 각 호의 어느 하나에 해당하는 경우에는 개인정보를 수집할 수 있으며 그 수집 목적의 범위에서 이용할 수 있다.' },
    { type:'plain', text:'1. 정보주체의 동의를 받은 경우' },
    { type:'plain', text:'2. 법률에 특별한 규정이 있거나 법령상 의무를 준수하기 위하여 ' },
    { type:'mark', tone:'old', spanId:'seg-1', text:'불가피한 경우' },
    { type:'plain', text:'3. 공공기관이 ' },
    { type:'mark', tone:'old', spanId:'seg-2', text:'법령 등에서 정하는 소관 업무의 수행을 위하여 불가피한 경우' },
    { type:'plain', text:'4. 정보주체와의 계약의 체결 및 이행을 위하여 ' },
    { type:'mark', tone:'old', spanId:'seg-3', text:'불가피하게 필요한 경우' },
  ];
  const NEW = [
    { type:'plain', text:'① 개인정보처리자는 다음 각 호의 어느 하나에 해당하는 경우에는 개인정보를 수집할 수 있으며 그 수집 목적의 범위에서 이용할 수 있다.' },
    { type:'plain', text:'1. 정보주체의 동의를 받은 경우' },
    { type:'plain', text:'2. 법률에 특별한 규정이 있거나 법령상 의무를 준수하기 위하여 ' },
    { type:'mark', tone:'new', spanId:'seg-1', text:'필요한 경우' },
    { type:'plain', text:'3. 공공기관이 ' },
    { type:'mark', tone:'new', spanId:'seg-2', text:'법령등에서 정하는 소관 업무의 수행을 위하여 불가피한 경우로서 정보주체의 권리보다 명백히 우선하는 경우' },
    { type:'plain', text:'4. 정보주체와의 계약의 체결 및 이행을 위하여 ' },
    { type:'mark', tone:'new', spanId:'seg-3', text:'필요한 경우' },
    { type:'add',  spanId:'seg-4', text:'5. 정보주체 또는 그 법정대리인이 의사표시를 할 수 없는 상태에 있거나 주소불명 등으로 사전 동의를 받을 수 없는 경우' },
  ];

  // AI-detected changes (middle)
  const SEGMENTS = [
    { id:'seg-1', kind:'완화', tone:'amber',
      from:'불가피한 경우',
      to:'필요한 경우',
      summary:'요건이 "불가피"에서 "필요"로 완화되었습니다. 이전 조항의 "불가피" 표현을 그대로 인용한 하위문서는 정비 필요성이 있습니다.',
      hits:18, severity:74 },
    { id:'seg-2', kind:'단서 신설', tone:'blue',
      from:'법령 등에서 정하는 소관 업무의 수행을 위하여 불가피한 경우',
      to:'법령등에서 정하는 소관 업무의 수행을 위하여 불가피한 경우로서 정보주체의 권리보다 명백히 우선하는 경우',
      summary:'공공기관의 처리 근거에 "정보주체의 권리보다 명백히 우선" 단서가 신설되었습니다. 단서 미반영 하위문서가 다수 존재합니다.',
      hits:34, severity:92 },
    { id:'seg-3', kind:'표현 정비', tone:'steel',
      from:'불가피하게 필요한 경우',
      to:'필요한 경우',
      summary:'표현이 단순화되었습니다. 의미상 큰 변화는 없으나 동일 표기 정비를 권고합니다.',
      hits:12, severity:48 },
    { id:'seg-4', kind:'조항 신설', tone:'teal',
      from:'(없음)',
      to:'5. 정보주체 또는 법정대리인이 의사표시를 할 수 없는 경우',
      summary:'예외 조항이 신설되었습니다. 이를 반영하지 않은 하위문서는 운영 절차 보완이 필요합니다.',
      hits:9, severity:81 },
  ];

  const sel = SEGMENTS.find(s=>s.id===picked) || SEGMENTS[0];

  // Right: residual occurrences in lower documents — filtered by selected segment
  const ALL_HITS = {
    'seg-1': [
      { id:'D-2841', kind:'시행령',   src:'개인정보 보호법 시행령 제5조 제1항',           agency:'중앙위원회 K', updated:'2024-08-12', sim:96, snippet:'… 법령상 의무를 준수하기 위하여 <m>불가피한 경우</m>에 한하여 개인정보를 …' },
      { id:'D-2842', kind:'고시',     src:'H부처 고시 제2024-3호 제3조',              agency:'H부처',         updated:'2024-03-02', sim:88, snippet:'… 업무 수행을 위하여 <m>불가피한 경우</m>로서 정보주체의 동의를 …' },
      { id:'D-2843', kind:'조례',     src:'광역시 X 정보화기본조례 제12조',              agency:'광역시 X',         updated:'2022-06-30', sim:81, snippet:'… 공공의 안전을 위하여 <m>불가피한 경우</m> 개인정보를 활용할 수 있다 …' },
      { id:'D-2844', kind:'안내문',   src:'복지급여 신청 안내문 2면',                      agency:'C부처',         updated:'2023-11-14', sim:74, snippet:'… 다음 각 호의 사유로 <m>불가피한 경우</m> 동의 없이 처리됩니다 …' },
    ],
    'seg-2': [
      { id:'D-2851', kind:'시행령',   src:'개인정보 보호법 시행령 제5조 제2항',           agency:'중앙위원회 K', updated:'2024-08-12', sim:96, hilite:'단서 미반영', snippet:'… 공공기관이 법령에서 정하는 소관 업무의 수행을 위하여 <m>불가피한 경우</m>에는 …' },
      { id:'D-2852', kind:'고시',     src:'중앙위원회 K 고시 제2023-7호',            agency:'중앙위원회 K', updated:'2023-11-04', sim:91, hilite:'단서 미반영', snippet:'… 공공기관의 처리 근거를 <m>불가피한 경우</m>로 한정 …' },
      { id:'D-2853', kind:'조례',     src:'광역도 Y 개인정보 보호 규칙 제8조',               agency:'광역도 Y',             updated:'2023-02-21', sim:84, hilite:'단서 미반영', snippet:'… 공공기관의 직무 수행을 위하여 <m>불가피한 경우</m> 개인정보를 …' },
      { id:'D-2854', kind:'조례',     src:'광역시 Z 개인정보 보호 조례 제6조',           agency:'광역시 Z',         updated:'2021-09-15', sim:79, hilite:'단서 미반영', snippet:'… 공공기관이 소관 업무 수행에 <m>불가피한 경우</m>에 한하여 …' },
      { id:'D-2855', kind:'민원서식', src:'주민등록표 등본 교부신청서 별지 제3호',         agency:'H부처',         updated:'2024-01-19', sim:72, snippet:'… 본 신청서는 「개인정보 보호법」<m>제15조 제1항 제3호</m>에 따라 처리됩니다 …' },
      { id:'D-2856', kind:'안내문',   src:'민원24 통합 안내 5장',                          agency:'H부처',         updated:'2023-08-22', sim:68, snippet:'… 공공기관의 직무 수행을 위해 <m>불가피한 경우</m> 동의 없이 …' },
    ],
    'seg-3': [
      { id:'D-2861', kind:'고시',     src:'H부처 고시 제2023-12호 제5조',             agency:'H부처',         updated:'2023-04-10', sim:82, snippet:'… 계약 체결 및 이행을 위하여 <m>불가피하게 필요한 경우</m> 처리할 수 있다 …' },
      { id:'D-2862', kind:'안내문',   src:'근로계약서 표준양식 1면',                       agency:'D부처',         updated:'2024-02-08', sim:71, snippet:'… 본인의 동의 없이 <m>불가피하게 필요한 경우</m>에만 활용됩니다 …' },
    ],
    'seg-4': [
      { id:'D-2871', kind:'안내문',   src:'응급의료 동의 안내문',                          agency:'C부처',         updated:'2024-06-21', sim:0,  hilite:'예외 조항 부재', snippet:'… 사전 동의가 없는 경우 처리할 수 없습니다 (※ 신설된 예외 조항 <m>미반영</m>) …' },
      { id:'D-2872', kind:'시행령',   src:'개인정보 보호법 시행령 제5조 제3항',           agency:'중앙위원회 K', updated:'2024-08-12', sim:0,  hilite:'예외 조항 부재', snippet:'… 본 조항에는 신설 제5호에 대응하는 운영 절차가 <m>정의되지 않음</m> …' },
    ],
  };

  const hits = ALL_HITS[picked] || [];
  const filtered = tab==='전체' ? hits : hits.filter(h=> h.kind===tab);

  return (
    <Page
      eyebrow="04 · 싱크Law 분석"
      title="신·구 조문 싱크 분석 — 하위문서 잔존 문구 검토"
      desc="개인정보 보호법 제15조 / 2026.04.29 개정 · AI가 변경 조항과 동일·유사 표현이 남은 하위문서를 식별하고, 문서별 싱크Law율을 제시합니다."
      actions={[
        <Btn key="1" kind="secondary" icon="download" data-action="export-evidence-pdf">근거 자료 PDF</Btn>,
        <Btn key="2" kind="secondary" icon="layers" onClick={()=>go('lower')}>하위규정 화면</Btn>,
        <Btn key="3" kind="primary"   icon="check" onClick={()=>go('analysis')}>분석 상세로 이동</Btn>,
      ]}
    >
      {/* AI evidence banner */}
      <div style={{
        background:'#fff', border:'1px solid var(--line)', borderRadius:12,
        padding:'14px 18px', marginBottom:14,
        display:'flex', alignItems:'center', gap:14, boxShadow:'var(--shadow-sm)'
      }}>
        <div style={{
          width:36, height:36, borderRadius:9, background:'var(--blue-soft)',
          display:'flex', alignItems:'center', justifyContent:'center', color:'var(--navy)'
        }}><Icon name="brain" size={18}/></div>
        <div style={{flex:1}}>
          <div style={{fontSize:13, fontWeight:700, color:'var(--ink)'}}>
            AI는 본 화면에서 <span style={{color:'var(--blue)'}}>법률 판단을 내리지 않습니다.</span> 변경 문구와 하위문서 표현 간의 유사도를 정량 분석하여 검토 후보를 제시합니다.
          </div>
          <div style={{fontSize:11.5, color:'var(--ink-3)', marginTop:3}}>
            모델 Claude·GPT-4o + KoBERT 법률 임베딩 · 임베딩 KoBERT-Legal · 출처: 국가법령정보센터 · 자치법규정보시스템 · 민원24 OCR · 최종 분석 2026.04.30 23:48
          </div>
        </div>
        <div style={{display:'flex', gap:8}}>
          <Pill k="분석 조항" v="1건"/>
          <Pill k="감지 변경" v="4건"/>
          <Pill k="잔존 의심 후보" v="73건"/>
        </div>
      </div>

      {/* Per-document Sync Law rates */}
      <div data-report-section="per-document-sync-rates" style={{
        display:'grid', gridTemplateColumns:'repeat(4, 1fr)', gap:10, marginBottom:14
      }}>
        {[
          {l:'관련 행정규칙', v:91, n:'고시·훈령·예규 47건'},
          {l:'관련 자치법규', v:72, n:'조례·규칙 124건'},
          {l:'민원서식',     v:54, n:'서식 38건'},
          {l:'행정 안내문',  v:49, n:'안내·공고 56건'},
        ].map(s=>{
          const tone = s.v>=85?'#1F7A6B':s.v>=70?'#5B7C99':'#C77A1B';
          const soft = s.v>=85?'#DBEEEA':s.v>=70?'#EEF2F7':'#FBEFD9';
          const txt  = s.v>=85?'대체로 정비 완료':s.v>=70?'일부 정비 필요':'잔존 규제 의심 다수';
          return (
            <div key={s.l} data-sync-rate={s.v} style={{
              background:'#fff', border:'1px solid var(--line)', borderRadius:11,
              padding:'12px 14px', position:'relative', overflow:'hidden'
            }}>
              <div style={{position:'absolute', left:0, top:0, bottom:0, width:3, background:tone}}/>
              <div style={{display:'flex', alignItems:'center', justifyContent:'space-between', marginBottom:6}}>
                <span style={{fontSize:11.5, color:'var(--ink-3)', fontWeight:600}}>{s.l} 싱크Law율</span>
                <span style={{fontSize:9.5, color:tone, fontWeight:700, background:soft, padding:'2px 6px', borderRadius:4}}>{txt}</span>
              </div>
              <div style={{display:'flex', alignItems:'baseline', gap:6}}>
                <span className="mono" style={{fontSize:24, fontWeight:700, color:tone, letterSpacing:'-0.02em'}}>{s.v}</span>
                <span style={{fontSize:11, color:'var(--ink-4)'}}>%</span>
                <div style={{flex:1}}/>
                <span style={{fontSize:10.5, color:'var(--ink-3)'}}>{s.n}</span>
              </div>
              <div style={{height:4, background:'#EEF2F7', borderRadius:99, marginTop:8, overflow:'hidden'}}>
                <div style={{width:`${s.v}%`, height:'100%', background:tone}}/>
              </div>
            </div>
          );
        })}
      </div>

      {/* Three columns: Old/New | AI Changes | Residual hits */}
      <div style={{display:'grid', gridTemplateColumns:'1.2fr 1fr 1.3fr', gap:14, marginBottom:14}}>

        {/* LEFT — Old vs New */}
        <div style={{
          background:'#fff', border:'1px solid var(--line)', borderRadius:12,
          boxShadow:'var(--shadow-sm)', display:'flex', flexDirection:'column'
        }}>
          <div style={{
            padding:'12px 16px', borderBottom:'1px solid var(--line)', background:'#FBFCFE',
            borderRadius:'12px 12px 0 0', display:'flex', alignItems:'center', justifyContent:'space-between'
          }}>
            <div style={{display:'flex', alignItems:'center', gap:8}}>
              <Badge tone="navy" size="sm">상위법</Badge>
              <span style={{fontSize:13, fontWeight:700, color:'var(--ink)'}}>개인정보 보호법 제15조</span>
            </div>
            <span style={{fontSize:11, color:'var(--ink-3)'}}>공포 <span className="mono" style={{color:'var(--ink)', fontWeight:600}}>2026.04.29</span> · 시행 <span className="mono" style={{color:'var(--ink)', fontWeight:600}}>2026.10.30</span></span>
          </div>

          <div style={{display:'grid', gridTemplateColumns:'1fr 1fr', flex:1, minHeight:0}}>
            <ArticleColumn label="개정 전" tone="rose" lines={OLD}  picked={picked} onPick={setPicked}/>
            <ArticleColumn label="개정 후" tone="teal" lines={NEW}  picked={picked} onPick={setPicked} divider/>
          </div>

          {/* legend */}
          <div style={{
            padding:'10px 16px', borderTop:'1px solid var(--line)',
            display:'flex', gap:14, fontSize:11, color:'var(--ink-3)', alignItems:'center'
          }}>
            <span style={{display:'inline-flex', alignItems:'center', gap:5}}>
              <span style={{width:14, height:10, background:'#FBE9EB', borderBottom:'2px solid #A8434A', borderRadius:2}}/> 삭제·완화
            </span>
            <span style={{display:'inline-flex', alignItems:'center', gap:5}}>
              <span style={{width:14, height:10, background:'#E6F4F1', borderBottom:'2px solid #1F7A6B', borderRadius:2}}/> 추가·강화
            </span>
            <span style={{display:'inline-flex', alignItems:'center', gap:5}}>
              <span style={{width:14, height:10, background:'#FBEFD9', borderBottom:'2px solid #C77A1B', borderRadius:2}}/> 표현 정비
            </span>
          </div>
        </div>

        {/* MIDDLE — AI detected changes */}
        <div style={{
          background:'#fff', border:'1px solid var(--line)', borderRadius:12,
          boxShadow:'var(--shadow-sm)', display:'flex', flexDirection:'column'
        }}>
          <div style={{padding:'12px 16px', borderBottom:'1px solid var(--line)', background:'#FBFCFE', borderRadius:'12px 12px 0 0'}}>
            <div style={{display:'flex', alignItems:'center', gap:8}}>
              <span style={{fontSize:10, fontWeight:700, color:'var(--blue)', letterSpacing:'0.08em', background:'var(--blue-soft)', padding:'2px 8px', borderRadius:4}}>AI 감지</span>
              <span style={{fontSize:13, fontWeight:700, color:'var(--ink)'}}>삭제·완화·신설 문구</span>
            </div>
            <div style={{fontSize:11.5, color:'var(--ink-3)', marginTop:4}}>4개 변경 단위 · 클릭 시 좌·우 패널이 연동됩니다</div>
          </div>

          <div style={{flex:1, overflowY:'auto'}}>
            {SEGMENTS.map((s,i)=>{
              const active = picked===s.id;
              const toneColor = s.tone==='amber'?'#C77A1B': s.tone==='blue'?'#2E5FB0': s.tone==='teal'?'#1F7A6B':'#5B7C99';
              return (
                <button key={s.id} onClick={()=>{setPicked(s.id); setTab('전체');}} style={{
                  display:'block', width:'100%', textAlign:'left', padding:'14px 16px',
                  border:'none', cursor:'pointer',
                  background: active ? '#FBFCFE' : '#fff',
                  borderLeft: active ? `3px solid ${toneColor}` : '3px solid transparent',
                  borderBottom: i<SEGMENTS.length-1 ? '1px solid var(--line)' : 'none',
                }}>
                  <div style={{display:'flex', alignItems:'center', gap:6, marginBottom:8}}>
                    <Badge tone={s.tone} size="sm">{s.kind}</Badge>
                    <span className="mono" style={{fontSize:10, color:'var(--ink-4)'}}>{s.id.toUpperCase()}</span>
                    <div style={{flex:1}}/>
                    <span className="mono" style={{fontSize:11, fontWeight:700, color:toneColor}}>{s.severity}</span>
                    <span style={{fontSize:10, color:'var(--ink-4)'}}>유사도</span>
                  </div>

                  <div style={{fontSize:11, color:'var(--ink-3)', marginBottom:4}}>변경 전</div>
                  <div style={{
                    fontSize:12.5, color:'var(--ink-2)', padding:'7px 10px',
                    background:'#FBE9EB', borderRadius:4, lineHeight:1.55,
                    textDecoration:'line-through', textDecorationColor:'rgba(168,67,74,0.45)'
                  }}>{s.from}</div>

                  <div style={{display:'flex', justifyContent:'center', margin:'4px 0', color:'var(--ink-4)'}}>
                    <Icon name="arrow-down" size={11}/>
                  </div>

                  <div style={{fontSize:11, color:'var(--ink-3)', marginBottom:4}}>변경 후</div>
                  <div style={{
                    fontSize:12.5, color:'var(--ink-2)', padding:'7px 10px',
                    background:'#E6F4F1', borderRadius:4, lineHeight:1.55
                  }}>{s.to}</div>

                  <div style={{display:'flex', alignItems:'center', justifyContent:'space-between', marginTop:10, paddingTop:8, borderTop:'1px dashed var(--line)'}}>
                    <span style={{fontSize:11, color:'var(--ink-3)', lineHeight:1.5}}>{s.summary}</span>
                  </div>
                  <div style={{display:'flex', alignItems:'center', gap:6, marginTop:6}}>
                    <Icon name="search" size={11} color="var(--blue)"/>
                    <span style={{fontSize:11, color:'var(--ink-3)'}}>잔존 의심 문구 <span className="mono" style={{color:'var(--navy)', fontWeight:700}}>{s.hits}</span>건 탐지</span>
                  </div>
                </button>
              );
            })}
          </div>
        </div>

        {/* RIGHT — Residual hits in lower documents */}
        <div style={{
          background:'#fff', border:'1px solid var(--line)', borderRadius:12,
          boxShadow:'var(--shadow-sm)', display:'flex', flexDirection:'column'
        }}>
          <div style={{padding:'12px 16px', borderBottom:'1px solid var(--line)', background:'#FBFCFE', borderRadius:'12px 12px 0 0'}}>
            <div style={{display:'flex', alignItems:'center', justifyContent:'space-between', marginBottom:8}}>
              <div style={{display:'flex', alignItems:'center', gap:8}}>
                <span style={{fontSize:10, fontWeight:700, color:'var(--amber)', letterSpacing:'0.08em', background:'var(--amber-soft)', padding:'2px 8px', borderRadius:4}}>잔존 의심</span>
                <span style={{fontSize:13, fontWeight:700, color:'var(--ink)'}}>하위문서 유사 문구</span>
              </div>
              <span style={{fontSize:11, color:'var(--ink-3)'}}>총 <span className="mono" style={{color:'var(--ink)', fontWeight:700}}>{hits.length}</span>건</span>
            </div>
            <div style={{display:'flex', gap:5, flexWrap:'wrap'}}>
              {['전체','시행령','고시','조례','민원서식','안내문'].map(t=>{
                const cnt = t==='전체' ? hits.length : hits.filter(h=>h.kind===t).length;
                return (
                  <button key={t} onClick={()=>setTab(t)} disabled={cnt===0 && t!=='전체'} style={{
                    padding:'4px 10px', borderRadius:99, fontSize:11,
                    fontWeight: tab===t ? 700:500,
                    background: tab===t ? 'var(--navy)' : '#fff',
                    color: tab===t ? '#fff' : (cnt===0?'var(--ink-4)':'var(--ink-2)'),
                    border:'1px solid '+(tab===t?'var(--navy)':'var(--line-2)'),
                    cursor: cnt===0 ? 'not-allowed' : 'pointer',
                    opacity: cnt===0 ? 0.5 : 1
                  }}>{t} {cnt>0 && <span className="mono" style={{opacity:.7, marginLeft:3}}>{cnt}</span>}</button>
                );
              })}
            </div>
          </div>

          <div style={{flex:1, overflowY:'auto', padding:'8px 0'}}>
            {filtered.length===0 && (
              <div style={{padding:'40px 20px', textAlign:'center', color:'var(--ink-4)', fontSize:12}}>
                선택한 유형에서 감지된 잔존 문구가 없습니다.
              </div>
            )}
            {filtered.map((h,i)=>{
              const docSync = h.sim ? Math.max(40, 100 - h.sim + 8) : 70;
              return (
              <div key={h.id} data-residual-hit-id={h.id} data-agency={h.agency} data-sync-rate={docSync} style={{
                padding:'12px 16px',
                borderBottom: i<filtered.length-1?'1px dashed var(--line)':'none'
              }}>
                <div style={{display:'flex', alignItems:'center', gap:6, marginBottom:6}}>
                  <Badge tone="ghost" size="sm">{h.kind}</Badge>
                  <span className="mono" style={{fontSize:10, color:'var(--ink-4)'}}>{h.id}</span>
                  {h.hilite && <Badge tone="amber" size="sm">싱크 불일치 의심</Badge>}
                  <div style={{flex:1}}/>
                  <span style={{
                    fontSize:10, fontWeight:700,
                    color: docSync<60?'#C77A1B':docSync<80?'#5B7C99':'#1F7A6B',
                    background: docSync<60?'#FBEFD9':docSync<80?'#EEF2F7':'#DBEEEA',
                    padding:'2px 7px', borderRadius:4
                  }}>싱크Law율 {docSync}%</span>
                </div>
                <div style={{fontSize:13, fontWeight:700, color:'var(--ink)', lineHeight:1.4}}>{h.src}</div>
                <div style={{fontSize:11, color:'var(--ink-3)', marginTop:2}}>
                  {h.agency} · 최종개정 <span className="mono">{h.updated}</span>
                </div>
                <div style={{
                  marginTop:8, padding:'8px 10px', background:'#F8FAFC',
                  border:'1px solid var(--line)', borderRadius:6, fontSize:12,
                  color:'var(--ink-2)', lineHeight:1.6, fontFamily:'inherit'
                }}>
                  <span dangerouslySetInnerHTML={{__html: h.snippet.replace(/<m>/g,'<mark style="background:#FBEFD9; color:#0F172A; padding:0 4px; border-radius:2px; border-bottom:2px solid #C77A1B;">').replace(/<\/m>/g,'</mark>')}}/>
                </div>
                <div style={{display:'flex', gap:8, marginTop:8}}>
                  <button data-action="open-original-source" data-doc-id={h.id} style={miniBtn}><Icon name="doc" size={11}/> 원문 근거 확인</button>
                  <button data-action="show-sync-evidence" data-doc-id={h.id} style={miniBtn}><Icon name="brain" size={11}/> 분석 근거</button>
                  <button data-action="request-agency-review" data-doc-id={h.id} style={{...miniBtn, color:'var(--blue)'}}><Icon name="flag" size={11}/> 소관부서 검토 요청</button>
                </div>
              </div>
              );
            })}
          </div>
        </div>
      </div>

      {/* BOTTOM — Status row */}
      <div style={{display:'grid', gridTemplateColumns:'1.4fr 1fr 1fr 1fr', gap:14}}>
        {/* Status summary card */}
        <div style={{
          background:'#fff', border:'1px solid var(--line)', borderRadius:12,
          padding:'18px 20px', boxShadow:'var(--shadow-sm)'
        }}>
          <div style={{display:'flex', alignItems:'center', gap:8, marginBottom:14}}>
            <Icon name="brain" size={14} color="var(--blue)"/>
            <span style={{fontSize:13, fontWeight:700, color:'var(--ink)'}}>AI 종합 검토 결과 (선택 변경 단위)</span>
            <Badge tone="blue" size="sm">{sel.kind}</Badge>
          </div>
          <div style={{display:'grid', gridTemplateColumns:'1fr 1fr 1fr', gap:14}}>
            {[
              {l:'잔존 의심 문구', v: hits.length, s:'건 탐지', tone:'#C77A1B'},
              {l:'유사도 평균',  v: hits.length ? Math.round(hits.filter(h=>h.sim>0).reduce((a,b)=>a+b.sim,0)/Math.max(1,hits.filter(h=>h.sim>0).length)) : 0, s:'%', tone:'#0B2E5C'},
              {l:'관련 기관',    v: new Set(hits.map(h=>h.agency)).size, s:'개', tone:'#5B7C99'},
            ].map(s=>(
              <div key={s.l} style={{padding:'12px 14px', background:'#F8FAFC', borderRadius:8}}>
                <div style={{fontSize:11, color:'var(--ink-3)'}}>{s.l}</div>
                <div style={{display:'flex', alignItems:'baseline', gap:4, marginTop:6}}>
                  <span className="mono" style={{fontSize:24, fontWeight:700, color:s.tone, letterSpacing:'-0.02em'}}>{s.v}</span>
                  <span style={{fontSize:11, color:'var(--ink-4)'}}>{s.s}</span>
                </div>
              </div>
            ))}
          </div>
          <div style={{
            marginTop:14, padding:'10px 14px', borderRadius:7,
            background:'#FBFCFE', border:'1px dashed var(--line-2)',
            fontSize:11.5, color:'var(--ink-3)', lineHeight:1.65
          }}>
            본 결과는 AI의 의미 유사도 분석에 따른 <b style={{color:'var(--ink-2)'}}>검토 후보</b>이며, 위법 여부 또는 정비 의무를 단정하지 않습니다.
            소관부서의 검토를 거쳐 정비 필요성이 최종 판단됩니다.
          </div>
        </div>

        {/* Three status badges */}
        <StatusCard
          tone="amber" icon="search"
          title="잔존 규제 의심"
          metric={hits.length}
          unit="건"
          desc="개정 전 표현이 그대로 남아있는 하위문서 후보"
          tag="AI 의미 유사도 ≥ 65%"
        />
        <StatusCard
          tone="blue" icon="flag"
          title="소관부서 검토 필요"
          metric={new Set(hits.map(h=>h.agency)).size}
          unit="개 부서"
          desc="해당 잔존 문구의 소관 부서 식별"
          tag="자동 통보 대기"
        />
        <StatusCard
          tone="teal" icon="check"
          title="정비 필요성 검토"
          metric={Math.round(sel.severity)}
          unit="/ 100"
          desc="영향 범위·민원·제보 가중치 기반 권고 점수"
          tag="최종 판단은 소관부서"
        />
      </div>
    </Page>
  );
}

// ── Article column ──
function ArticleColumn({ label, tone, lines, picked, onPick, divider, periodLabel }){
  const stripe = tone==='rose' ? '#A8434A' : '#1F7A6B';
  return (
    <div style={{
      padding:'16px 18px', position:'relative',
      borderLeft: divider ? '1px solid var(--line)' : 'none',
      overflowY:'auto'
    }}>
      <div style={{display:'flex', alignItems:'center', gap:6, marginBottom:12}}>
        <span style={{width:6, height:6, borderRadius:2, background:stripe}}/>
        <span style={{fontSize:11.5, fontWeight:700, color:'var(--ink-2)'}}>{label}</span>
        <span style={{fontSize:10, color:'var(--ink-4)'}}>({periodLabel || (tone==='rose' ? '~ 2026.04.28' : '2026.04.29 ~')})</span>
      </div>
      <div style={{fontSize:12.8, lineHeight:2, color:'var(--ink-2)'}}>
        {lines.map((l,i)=>{
          if(l.type==='plain') return <span key={i}>{l.text}</span>;
          if(l.type==='add') {
            const active = picked===l.spanId;
            return (
              <div key={i} onClick={()=>onPick(l.spanId)} style={{
                display:'block', margin:'8px 0', padding:'7px 10px',
                background:'#E6F4F1', borderLeft:'3px solid #1F7A6B', borderRadius:4,
                cursor:'pointer',
                outline: active ? '2px solid #1F7A6B' : 'none',
                outlineOffset: 1
              }}>
                <span style={{fontSize:10, color:'#1F7A6B', fontWeight:700, display:'block', marginBottom:2}}>+ 신설</span>
                {l.text}
              </div>
            );
          }
          // mark
          const active = picked===l.spanId;
          const isOld  = tone==='rose';
          const bg     = isOld ? '#FBE9EB' : '#E6F4F1';
          const bd     = isOld ? '#A8434A' : '#1F7A6B';
          return (
            <span key={i} onClick={()=>onPick(l.spanId)} style={{
              background:bg, borderBottom:`2px solid ${bd}`, padding:'1px 4px',
              borderRadius:2, cursor:'pointer',
              outline: active ? `2px solid ${bd}` : 'none',
              outlineOffset: 1,
              textDecoration: isOld ? 'line-through' : 'none',
              textDecorationColor: isOld ? 'rgba(168,67,74,0.5)' : 'transparent'
            }}>{l.text}</span>
          );
        })}
      </div>
    </div>
  );
}

function Pill({ k, v }){
  return (
    <div style={{padding:'5px 12px', background:'#F8FAFC', borderRadius:7, border:'1px solid var(--line)'}}>
      <div style={{fontSize:10, color:'var(--ink-3)'}}>{k}</div>
      <div className="mono" style={{fontSize:13, fontWeight:700, color:'var(--navy)'}}>{v}</div>
    </div>
  );
}

function StatusCard({ tone, icon, title, metric, unit, desc, tag }){
  const tones = {
    amber: { strip:'#C77A1B', dot:'#C77A1B', soft:'#FBEFD9' },
    blue:  { strip:'#2E5FB0', dot:'#2E5FB0', soft:'#E6EEFB' },
    teal:  { strip:'#1F7A6B', dot:'#1F7A6B', soft:'#DBEEEA' },
  };
  const t = tones[tone];
  return (
    <div style={{
      background:'#fff', border:'1px solid var(--line)', borderRadius:12,
      padding:'16px 18px', position:'relative', overflow:'hidden',
      boxShadow:'var(--shadow-sm)'
    }}>
      <div style={{position:'absolute', left:0, top:0, bottom:0, width:3, background:t.strip}}/>
      <div style={{display:'flex', alignItems:'center', gap:8, marginBottom:8}}>
        <span style={{
          width:24, height:24, borderRadius:6, background:t.soft,
          display:'flex', alignItems:'center', justifyContent:'center', color:t.dot
        }}><Icon name={icon} size={13}/></span>
        <span style={{fontSize:12.5, fontWeight:700, color:'var(--ink)'}}>{title}</span>
      </div>
      <div style={{display:'flex', alignItems:'baseline', gap:5, marginTop:6}}>
        <span className="mono" style={{fontSize:28, fontWeight:700, color:'var(--ink)', letterSpacing:'-0.02em'}}>{metric}</span>
        <span style={{fontSize:11, color:'var(--ink-4)'}}>{unit}</span>
      </div>
      <div style={{fontSize:11.5, color:'var(--ink-3)', marginTop:4, lineHeight:1.55}}>{desc}</div>
      <div style={{
        marginTop:10, paddingTop:8, borderTop:'1px dashed var(--line)',
        fontSize:10.5, color:'var(--ink-4)', display:'flex', alignItems:'center', gap:5
      }}>
        <Icon name="dot" size={8} color={t.dot}/> {tag}
      </div>
    </div>
  );
}

const miniBtn = {
  display:'inline-flex', alignItems:'center', gap:4,
  padding:'4px 8px', fontSize:11, fontWeight:600,
  border:'1px solid var(--line-2)', borderRadius:5,
  background:'#fff', color:'var(--ink-2)', cursor:'pointer',
  fontFamily:'inherit'
};

Object.assign(window, { CompareScreen });
