// Bilingual content for ECODE landing
const DISCLOSURE_URL = "https://e-code.kr/announcements";

const COPY = {
  ko: {
    nav: { verified: "Ecode Verified", patentguard: "Patent Guard", trust: "신뢰의 근거", ecodeteam: "개발 구독", services: "자사 서비스", ceo: "대표소개", team: "조직도", contact: "문의", disclosure: "공시" },
    hero: {
      tag: "AI 코드 검증 전문",
      titleA: "검증이 만드는 신뢰,",
      titleB: "이코드가 ",
      titleAccent: "지켜냅니다",
      sub: "보안과 특허, 그리고 품질까지.\nAI 시대의 리스크를 전문적으로 검증하는 개발사",
      pillars: [
        { k: "보안 취약점 검증", icon: "shield" },
        { k: "특허 침해 검토", icon: "gavel" },
        { k: "성능 · 품질 진단", icon: "chart" }
      ],
      cta1: "검증 상담 신청",
      ctaShort: "상담",
      cta2: "검증 프로세스 보기",
      eyebrow: "AI-ASSISTED · EXPERT-VERIFIED",
    },
    metrics: [
      { k: "16", u: "년", l: "엔지니어링 경력" },
      { k: "3", u: "건", l: "등록 특허" },
      { k: "50", u: "+", l: "검증 수행 프로젝트" },
      { k: "2", u: "단계", l: "AI · 전문가 검증" },
    ],
    products: {
      eyebrow: "CORE PRODUCTS",
      titleAccent: "AI 산출물의",
      titleRest: "\n보안 · 특허 · 품질을 검증합니다",
      sub: "전문가의 통찰과 AI 분석을 결합하여\n정확하고 객관적인 검증 결과를 제공합니다.",
      items: [
        {
          id: "verified",
          mark: "assets/mark-verified.png",
          illo: "assets/illo-verified.png",
          name: "Ecode Verified",
          nameKo: "이코드 버리파이드",
          tagline: "보안 · 성능",
          promise: "배포 전에 잡습니다.",
          desc: "AI가 생산한 코드의 취약점과 성능 리스크를 진단합니다. 오진은 엔지니어가 걷어냅니다.",
          checks: [
            { k: "취약점", v: "OWASP Top 10 · CWE" },
            { k: "권한", v: "인증 · 인가 설계 결함" },
            { k: "노출", v: "키 · 토큰 · 설정" },
            { k: "성능", v: "쿼리 · 번들 · 런타임" }
          ],
          deliver: ["리스크 등급 리포트", "수정 가이드", "재검증 1회"],
          accent: "#ff6a00"
        },
        {
          id: "patentguard",
          mark: "assets/mark-patentguard.png",
          illo: "assets/illo-patentguard.png",
          name: "Patent Guard",
          nameKo: "특허 가드",
          tagline: "특허 침해",
          promise: "소송 전에 가립니다.",
          desc: "구현한 기능이 등록 특허를 밟는지 청구항 단위로 대조합니다. 위험 구간을 특정해 드리고, 대응은 협력 변리사로 연결합니다.",
          checks: [
            { k: "분해", v: "기능 → 구성요소 맵핑" },
            { k: "탐색", v: "KIPRIS · 해외 DB" },
            { k: "대조", v: "청구항 단위 침해 판정" },
            { k: "연계", v: "협력 변리사 연결" }
          ],
          deliver: ["침해 위험도 맵", "청구항 대조표", "변리사 연계"],
          accent: "#14284f"
        },
        {
          id: "quality",
          mark: "assets/mark-quality-badge.png",
          name: "Quality Insight",
          nameKo: "퀄리티 인사이트",
          tagline: "성능 · 품질 진단",
          promise: "숫자로 증명합니다.",
          desc: "성능 지표와 품질 데이터를 기반으로 AI 모델과 서비스의 신뢰성과 운영 효율을 높입니다.",
          checks: [
            { k: "지표", v: "응답 시간 · 처리량 · 오류율" },
            { k: "모델", v: "정확도 · 편향 · 회귀 검증" },
            { k: "부하", v: "동시성 · 임계점 측정" },
            { k: "운영", v: "관측성 · 로그 · 알림 체계" }
          ],
          deliver: ["품질 지표 리포트", "개선 우선순위", "재측정 1회"],
          accent: "#f26a1b"
        }
      ],
      note: "두 검증을 함께 받으면 통합 리포트와 무료 재검증 1회를 더 드립니다."
    },
    method: {
      eyebrow: "HOW WE VERIFY",
      titleAccent: "검증은 체계적으로,",
      titleRest: "\n결과는 명확하게",
      sub: "AI 자동 분석과 전문가 검토의 결합으로\n더 빠르고, 더 정확한 검증을 제공합니다.",
      steps: [
        { n: "01", k: "대상 접수", icon: "intake", who: "접수", v: "검증 대상 코드 또는 산출물을 안전하게 접수합니다." },
        { n: "02", k: "AI 자동 분석", icon: "chip", who: "AI", v: "보안 취약점, 유사 특허, 품질 이슈를 신속히 분석합니다." },
        { n: "03", k: "전문가 검토", icon: "expert", who: "사람", v: "전문가의 심층 검토로 분석 결과의 정확도를 높입니다." },
        { n: "04", k: "리포트 제공", icon: "report", who: "사람", v: "명확한 진단과 가이드가 담긴 리포트를 제공합니다." },
        { n: "05", k: "사후 지원", icon: "verified", who: "사람", v: "후속 점검과 개선 지원으로 지속적인 신뢰를 보장합니다." }
      ],
      humanLabel: "사람이 판단",
      aiLabel: "AI가 탐색"
    },
    trust: {
      eyebrow: "WHY TRUST US",
      titleAccent: "증명된",
      titleRest: " 전문성",
      sub: "외부 기관이 심사해 인정한 성과, 그리고 실제로 함께 일하는 고객들.\n개발과 유지보수를 맡겨온 기업들이 이코드의 역량을 증명합니다.",
      lab: {
        name: "이코드 기술연구소",
        desc: "KOITA 한국산업기술진흥협회 인정 기업부설연구소",
        meta: "인정번호 2026112209 · 분야 AI · 2026.06",
        cta: "인정서 보기",
        href: "assets/koita-cert.pdf"
      },
      awards: [
        {
          kind: "AWARD", year: "2026", icon: "trophy",
          title: "2026 지식재산 데이터 활용\n창업 경진대회 1위",
          desc: "지식재산처 주최. IP(지식재산) 데이터를 활용한\n창업·사업화 기획 부문에서 1위를 달성했습니다."
        },
        {
          kind: "SELECTION", year: "2026", icon: "gamepad",
          title: "2026 경기게임제작지원\nIP융합 분야(CJ ENM) 선정",
          desc: "경기도 · 경기콘텐츠진흥원 주관 사업.\nCJ ENM 파트너 IP융합 게임 개발사로 선정되었습니다."
        }
      ],
      awardsSubTitle: "",
      awardsSub: [
        {
          kind: "SELECTION", year: "2026", icon: "ai",
          title: "2026 혁신 소상공인\nAI 활용지원 사업 선정",
          desc: "중소벤처기업부 · 소상공인시장진흥공단 주관 사업.\n서류평가를 통과해 참여기업으로 선정되었습니다."
        },
        {
          kind: "FINALIST", year: "2026", icon: "rocket",
          title: "2026 KAMCO Startup\nTechBlaze 결선 진출",
          desc: "한국자산관리공사 · 서울창조경제혁신센터 주관.\n창업경진대회 결선(발표평가)에 진출했습니다."
        },
        {
          kind: "FINALIST", year: "2026", icon: "medal",
          title: "제14회 공공데이터·AI 활용\n창업경진대회 통합본선 진출",
          desc: "전국 예선을 거쳐 범정부 통합본선에 진출했습니다.\n주관 한국지능정보사회진흥원(NIA)."
        }
      ],
      creds: [
        { k: "신뢰할 수 있는 검증 파트너", v: "보안 · 품질 · 특허 리스크 검증을 기반으로\n고객의 비즈니스 성장을 안전하게 지원합니다.", icon: "shield" },
        { k: "ISMS-P 수준 보안 관리", v: "정보보호 관리체계 기반의\n체계적인 보안 환경 운영", icon: "check" },
        { k: "전문 엔지니어 검증", v: "다년간의 엔지니어링 경험을 가진\n전문가가 직접 검증", icon: "people" },
        { k: "국내외 지식재산 DB 보유", v: "KIPRIS 기반의 특허 · 논문 · 기술 데이터로\n정확한 리스크 분석", icon: "doc" }
      ],
      logosTitle: "지원 기관 · 협력 고객사",
      logos: [
        { src: "assets/logos/kipo.png", alt: "지식재산처", h: 40 },
        { src: "assets/logos/gca.png", alt: "경기콘텐츠진흥원", h: 40 },
        { src: "assets/logos/dsone.png", alt: "디에스원테크", h: 22 },
        { src: "assets/logos/cjenm.png", alt: "CJ ENM", h: 34 },
        { src: "assets/logos/barofarm.png", alt: "바로팜", h: 38 },
        { src: "assets/logos/aroha.png", alt: "아로하 Noblesse VIP", h: 52 },
        { src: "assets/logos/goseong-mono.png", alt: "고성도서유통", h: 26 },
        { src: "assets/logos/jemigong.webp", alt: "제미공", h: 92 }
      ]
    },
    proof: {
      title: "검증된 산업 도메인",
      sub: "보안 요건이 까다로운 분야에서 실제로 운영된 시스템들입니다."
    },
    record: [
      { ind: "정부 · 공공", code: "GOV", problem: "수기 행정·데이터 관리 비효율", solution: "웹 기반 업무 자동화 + 데이터 분석 연동", result: "처리 속도 개선, 장기 안정 운영" },
      { ind: "국방", code: "DEF", problem: "고보안 정보 시스템 노후화", solution: "보안 인증 통신 플랫폼 · 인사·군수 시스템 재구축", result: "보안 요건 충족, 무장애 운영" },
      { ind: "에너지", code: "PWR", problem: "발전소 데이터 수기 수집, 실시간 모니터링 불가", solution: "IoT 센서 + 이상 감지 모니터링", result: "실시간 데이터 분석 체계 구축" },
      { ind: "교육 · 대학", code: "EDU", problem: "학사·행정 분산, 수작업 반복", solution: "통합 학사 + LMS 플랫폼 개발", result: "교직원·학생 업무 전면 디지털화" },
      { ind: "금융 · 핀테크", code: "FIN", problem: "수기 정산과 취약한 거래 로직", solution: "자동매매·정산 플랫폼 · 보안 검토 병행", result: "거래 안정성 확보, 운영 자동화" },
      { ind: "블록체인", code: "CHN", problem: "컨트랙트 취약점 노출 위험", solution: "NFT 발행·브리딩 컨트랙트 설계 및 검증", result: "온체인 운영 중 사고 0건" },
      { ind: "게임", code: "GAME", problem: "인게임 경제 밸런스·결제 무결성·라이브 안정성 리스크", solution: "Unity 모바일 게임·경영 시뮬레이션 개발, 인게임 경제·결제 로직 검증", result: "IP 라이선싱 협업, 라이브 무장애 운영" },
    ],
    services: {
      title: "자사 서비스",
      titleAccent: "직접 만들고",
      titleRest: " 직접 운영합니다",
      sub: "검증 도구를 만드는 팀이 실제로 서비스를 운영합니다. 아래는 자사에서 개발·운영 중인 제품들입니다.",
      items: [
        { id: "ecworks", title: "EcodeWorks", nameKo: "이코드웍스", role: "AI 업무 비서 / B2B SaaS", desc: "텔레그램·슬랙에서 채팅만으로 근태·일정·문서·칸반을 통합 관리.", tags: ["Next.js", "AI/ML", "Telegram"], status: "LIVE", link: "https://www.ecworks.kr/", img: "assets/services/ecworks.png" },
        { id: "floworder", title: "FlowOrder", nameKo: "플로우오더", role: "유통 자동화 플랫폼", desc: "공동구매 발주·재고·정산을 자동화. 셀러별 쇼핑몰 자동 생성.", tags: ["React", "Node", "ERP"], status: "LIVE", link: "https://floworder.kr/", img: "assets/services/floworder.png" },
        { id: "murmur", title: "Murmur", nameKo: "머머 다이어리", role: "AI 음성 일기", desc: "말하면 AI가 일기를 정리·감정 분석. 온디바이스 암호화.", tags: ["React Native", "SQLCipher", "AI/ML"], status: "LIVE", link: "https://murmurdiary.com/", img: "assets/services/murmur.png" },
        { id: "pyuung", title: "Pyuung", nameKo: "퓽", role: "손편지 우편 플랫폼", desc: "화면에 쓴 글자가 종이가 되어 우편함으로. QR 양방향 답장.", tags: ["NestJS", "PostgreSQL", "AWS"], status: "LIVE", link: "https://pyuung.kr/", img: "assets/services/pyuung.png" },
        { id: "korean", title: "Korean AI Tutor", nameKo: "코리안 AI 튜터", role: "글로벌 한국어 학습 앱", desc: "24시간 AI 회화 파트너 · 실시간 발음 교정. 1,500만+ 타깃.", tags: ["GPT/Claude", "Speech AI"], status: "MVP", img: "assets/services/korean-tutor.jpg" },
        { id: "ptsandbag", title: "PT샌드백", nameKo: "AI 발표 코치", role: "발표 · 면접 연습 서비스", desc: "AI가 기습 질문을 던지고 실시간으로 채점합니다. 면접 · 스피치 · PT를 실전처럼 반복 연습.", tags: ["Next.js", "Speech AI", "LLM"], status: "LIVE", img: "assets/services/ptsandbag.png" },
        { id: "sanji", title: "언니네 산지부엌", nameKo: "모바일 경영 시뮬레이션", role: "게임 · CJ ENM IP 라이선싱", desc: "산지 직거래를 소재로 한 융합 경영 시뮬레이션. 모바일 전용으로 제작 중입니다.", tags: ["Unity", "Mobile"], status: "제작중", img: "assets/game-sanji.png", support: { label: "지원", logo: "assets/logos/gca.png", alt: "경기콘텐츠진흥원", h: 34, href: "https://www.gcon.or.kr/" } },
        { id: "ecodebooks", title: "ECODEBOOKS", nameKo: "이코드북스", role: "독립 출판 브랜드", desc: "에세이·가이드북 중심. 교보·예스24·알라딘 유통.", tags: ["Editorial"], status: "LIVE", link: "https://ecodebooks.kr/", img: "assets/services/ecodebooks.png" },
      ],
      upcoming: ["지원사업 조회기", "타이쿤 게임 제작", "모바일 게임 제작", "주류 플랫폼", "티켓팅 중개", "우편발송 자동화", "헬스케어 플랫폼", "AI 커뮤니티", "AI 유튜브 자동 운영"],
    },
    team: {
      title: "OUR TEAM",
      sub: "조직도 기반의 명확한 역할 구조",
      corp: "주식회사 이코드",
      dualLabel: "겸직",
      head: { name: "이성훈", role: "대표이사 · 연구소장", icon: "hex" },
      units: [
        { name: "이코드 기술연구소", icon: "layers", members: [
          { n: "염정헌", r: "이사" },
          { n: "김수진", r: "선임" },
          { n: "홍새연", r: "선임" }
        ]},
        { name: "사업운영팀", icon: "triangle", members: [
          { n: "김은찬", r: "이사" },
          { n: "황준식", r: "선임" }
        ]},
        { name: "마케팅팀", icon: "pie", members: [          { n: "황준식", r: "선임", dual: true },
          { n: "황덕재", r: "사외이사" }
        ]}
      ]
    },
    ecodeteam: {
      eyebrow: "ECODETEAM · SUBSCRIPTION",
      tag: "구독제",
      titleAccent: "월구독",
      titleA: "으로 운영하는",
      titleB: "우리회사 개발팀",
      sub: "필요할 때만 부르는 외주가 아닌, 매달 함께 일하는 풀스택 파트너. 기획 · 디자인 · 개발 · 운영을 월 단위로 구독하세요.",
      url: "https://ecodeteam.kr/",
      cta: "이코드팀 자세히 보기",
      demoBtn: "데모 허브 둘러보기",
      demoTitle: "데모 허브",
      demoSub: "실제 배포된 인터랙티브 프로토타입 — 클릭해서 바로 체험하세요.",
      bullets: [
        { k: "월 단위", v: "프로젝트 단가가 아닌 월 구독으로 예산을 고정합니다." },
        { k: "전담 팀", v: "기획자 · 디자이너 · 개발자가 한 팀으로 붙습니다." },
        { k: "유지보수 포함", v: "신규 기능 + 운영 + 장애 대응을 한 계약에 묶습니다." },
        { k: "탄력 운영", v: "필요한 달엔 늘리고, 한가한 달엔 줄여 쓸 수 있습니다." },
      ],
      plans: [
        { name: "Starter", scope: "랜딩 · 단일 서비스" },
        { name: "Growth", scope: "다기능 SaaS · 자동화" },
        { name: "Scale", scope: "AI 통합 · 멀티 서비스" },
      ],
    },
    ceo: {
      title: "대표 소개",
      name: "이성훈",
      role: "CEO & Founder",
      career: "16년차 풀스택 엔지니어",
      bio: "최신 AI 활용 및 다양한 기술 스택을 활용 가능한 숙련된 16년차 풀스택 엔지니어입니다. 정부·국방·에너지·대학 등 다양한 산업에서 50건 이상의 프로젝트를 납품했습니다.",
      quote: "기술 파트너가 아닌, 비즈니스 동반자가 되겠습니다.",
      careers: [
        { period: "2025.08 — 현재", org: "(주) 이코드", role: "대표이사", current: true },
        { period: "2022.10 — 2026.05", org: "(주) 비스탁여의도 (비상장)", role: "대표이사 (사임)" },
        { period: "2022.08 — 2025.12", org: "씨아이랩스", role: "개발이사" },
        { period: "2020.01 — 2022.08", org: "(주) 캠벨", role: "책임연구원" },
        { period: "2014.12 — 2018.12", org: "서울대학교", role: "법인직원" },
        { period: "2012.01 — 2014.12", org: "(주) 로켓에비뉴", role: "개발팀장" },
        { period: "2008.03 — 2011.12", org: "컴퍼니에이", role: "개발이사" }
      ],
      projectGroups: [
        { g: "정부 · 국방 SI", items: [
          "정부 온나라 전자결재 유지보수 (2020~2022)",
          "한전 KPX 전력거래소 전자결재 (2022)",
          "국방 정보사령부 고도화 (2022)",
          "국방 방위사업청 BRM 멀티브라우징 (2022)",
          "SK TWORLD 문자매니저 개선 (2013)"
        ]},
        { g: "1인 개발 · 장기 운영", items: [
          "에코폰 중고거래 시스템 (2013~2022, 10년)",
          "노티드 도넛 인트라넷 (2022~2025, 3년)",
          "신규 증권 플랫폼 (2022)"
        ]},
        { g: "블록체인 · 핀테크", items: [
          "클레이튼 NFT 프로젝트 (2021~2022)",
          "바이낸스 자동매매 시스템 (2020)",
          "API 기반 매매 플랫폼 (2021~2022)"
        ]},
        { g: "B2B SaaS · 자체 서비스", items: [
          "스마트미러 가상헤어 (2023~2024)",
          "도상 미술품 경매 (2023~2024)",
          "닭실 양계관리 솔루션 (2024)",
          "올타에듀 학원관리 (2024)",
          "곰스랩 수학 문제은행 (2024)",
          "워킹맘 물류 솔루션 (2024)"
        ]},
        { g: "기타", items: [
          "안드로이드 퍼즐 게임 출시 (2011)",
          "프리랜서 외주 50건+ (텔레그램 봇 · 자동거래 · 웹)"
        ]}
      ],
      stack: [
        { c: "AI · ML", items: [
          { k: "GPT · Claude API", v: "실서비스 연동" },
          { k: "LLM · RAG · 에이전트", v: "검수 · 챗봇" },
          { k: "음성 AI · STT / TTS", v: "Whisper 등" },
          { k: "컴퓨터 비전 · OCR", v: "명세서 · 열화상" },
          { k: "프롬프트 엔지니어링", v: "" }
        ]},
        { c: "Backend", items: [
          { k: "Node.js · NestJS · Express", v: "실서비스" },
          { k: "Python · FastAPI · Django", v: "15년+" },
          { k: "Java · Spring / JSP", v: "6년+" },
          { k: "PHP", v: "6년+" },
          { k: "C / C++ / C#", v: "5년+" }
        ]},
        { c: "Frontend", items: [
          { k: "React · Next.js", v: "10년+" },
          { k: "TypeScript", v: "5년+" },
          { k: "styled-components · Tailwind", v: "" },
          { k: "Vite · Webpack", v: "" }
        ]},
        { c: "Mobile", items: [
          { k: "React Native", v: "출시" },
          { k: "Flutter (Dart)", v: "출시" },
          { k: "Android Native", v: "다수" },
          { k: "iOS · Swift · Obj-C", v: "출시" }
        ]},
        { c: "Database", items: [
          { k: "MySQL · Aurora", v: "튜닝" },
          { k: "PostgreSQL", v: "실서비스" },
          { k: "Oracle · CUBRID · Tibero", v: "정부 SI" },
          { k: "Redis", v: "캐시 · 채팅" },
          { k: "SQLite · SQLCipher · D1", v: "온디바이스" }
        ]},
        { c: "DevOps · Cloud", items: [
          { k: "AWS · GCP · NCP", v: "" },
          { k: "Cloudflare · Workers · R2 · D1", v: "" },
          { k: "Docker · Nginx · Linux", v: "인프라" },
          { k: "GitHub Actions · CI/CD", v: "" }
        ]},
        { c: "기타", items: [
          { k: "Unity 3D", v: "크로스플랫폼" },
          { k: "Solidity (Klaytn KIP)", v: "민팅 · 브리딩" },
          { k: "Swagger · 기술문서", v: "" },
          { k: "English", v: "TOEIC 920" }
        ]}
      ],
      education: [
        { k: "학력", v: "정보통신공학과 학사", y: "2012" },
        { k: "정보처리산업기사", v: "한국산업인력공단", y: "2012.08" },
        { k: "정보기기운용기능사", v: "한국산업인력공단", y: "2007.07" },
        { k: "프로그래밍기능사", v: "한국산업인력공단", y: "2004.06" },
        { k: "해킹침해대응전문가", v: "사설", y: "2011" },
        { k: "리눅스마스터 2급", v: "한국정보통신진흥협회", y: "2010" }
      ],
      patents: [
        {
          status: "등록",
          titleKo: "비상장 주식 거래를 지원하는 방법 및 장치",
          titleEn: "METHOD AND APPARATUS FOR SUPPORTING UNLISTED STOCK TRADING",
          no: "10-2023-0061245",
          date: "2023-05-11",
          ipc: "G06Q40/04",
          applicant: "(주)비스탁여의도비상장",
          role: "발명자 (개인)"
        },
        {
          status: "등록",
          titleKo: "주식 커뮤니티 서비스에서 게시글을 관리하는 방법 및 장치",
          titleEn: "METHOD AND DEVICE FOR MANAGING POST IN STOCK COMMUNITY SERVICE",
          no: "10-2023-0061247",
          date: "2023-05-11",
          ipc: "G06Q50/00",
          applicant: "(주)비스탁여의도비상장",
          role: "발명자 (개인)"
        },
        {
          status: "공개",
          titleKo: "채팅 기반의 비상장 주식 거래 지원 방법 및 장치",
          titleEn: "METHOD AND APPARATUS FOR SUPPORTING UNLISTED STOCK TRADING BASED ON CHAT",
          no: "10-2023-0061246",
          date: "2023-05-11",
          ipc: "G06Q40/04",
          applicant: "(주)비스탁여의도비상장",
          role: "발명자 (개인)"
        }
      ]
    },
    demo: {
      eyebrow: "ECODEWORKS LIVE",
      title: "에디와 함께하는 하루",
      sub: "자사 그룹 채팅방에서 AI 비서 에디가 일하는 방식입니다.",
      groupName: "이코드 그룹방",
      groupSub: "5명 · 에디 활성화",
      groupMeta: "ECODEWORKS · 데모 환경",
      youLabel: "당신",
      placeholder: "에디에게 물어보세요…  (예: 내일 일정 정리해줘)",
      send: "전송",
      thinking: "에디가 답하는 중",
      unlocked: "데모 종료 — 이제 직접 에디와 대화해 보세요",
      replay: "처음부터 다시 보기",
      ctaLabel: "우리 회사에 도입하기",
      ctaSub: "ECODEWORKS — ecworks.kr",
      ctaUrl: "https://ecworks.kr",
      featureLabels: ["출퇴근 관리", "캘린더·미팅", "문서·링크 분석", "시장조사·비교", "마감 브리핑"],
      persona: "You are 'Eddy' (에디), the AI assistant inside ECODE's company group chat — the flagship feature of ECODEWORKS, a B2B SaaS that embeds an AI office assistant into team messaging. You handle attendance (출퇴근), task tracking, calendar/meeting scheduling, link/document analysis, market & vendor comparison, and daily/closing briefings. Style: warm but concise Korean (use polite forms like 대표님/선임님 only if a name is given; otherwise neutral). Prefer short messages, bullet points with '•', and check marks '✓' for confirmations. Open with a one-line acknowledgment, then concrete output, then ask a clear follow-up question if useful. Match the user's language (Korean if Korean, English if English). Never invent specific company-internal data — when asked about real ECODE tasks/members, answer in general terms. Keep responses under 6 short lines unless a structured briefing is requested.",
      script: [
        { role: "them", sender: "한선임", avatar: "H", color: "#e58c4a", time: "08:53", text: "출근했습니다" },
        { role: "bot", sender: "Eddy", time: "08:53", text: "✓ 출근 처리 완료. 좋은 하루 되세요, 한선임님! 😊" },
        { role: "me", sender: "김대표", avatar: "K", time: "08:57", text: "출근" },
        { role: "bot", sender: "Eddy", time: "08:57", text: "✓ 출근 처리 완료. 좋은 하루 되세요, 대표님!" },
        { role: "bot", sender: "Eddy", time: "09:01", text: "📋 5월 8일 (금) 오전 브리핑\n\n출근 2 / 5명\n• ✅ 김대표 (08:57) · 한선임 (08:53)\n• ⏳ 이이사 · 박이사 · 정선임 — 미출근\n\n오늘 마감 1건\n• 스타트업 포트폴리오 등록 — 한선임\n\nQA 미해결 8건\n• 오리온 3 · 베타팜 2 · 아틀라스 2 · 노바 1\n\n휴가자 · 별도 일정 없음\n좋은 금요일 되세요 🙂" },
        { role: "me", sender: "김대표", avatar: "K", time: "14:04", text: "에디, 오늘 주간회의 안건 좀 추려봐" },
        { role: "bot", sender: "Eddy", time: "14:05", text: "칸반·이전 회의 액션아이템 기준으로 정리했습니다.\n\n📋 2026-05-08 주간회의 안건\n\n1. 프로젝트별 주간 현황\n  • 노바 — 봉투 수령 점검 · 결제 PG 심사 · 5/15 출시 목표\n  • 아틀라스 — 글로벌 마케팅 · 인스타 홍보\n  • 오리온 — 오픈 반응 · 정책 버그 수정 · 게시글 채우기\n  • 시그마 — 벤더 BTF 가격 협의 · 출판 스토어 연동\n\n2. 사내 구독 SaaS — 개발 현황 · 서비스명 확정\n3. SEO 전반 점검 — 한선임 보고\n4. 주요 일정 — 5/13 청년정책자금 신청, 5/15 창고 미팅\n5. 외주 수주 현황 · 기타" },
        { role: "them", sender: "박이사", avatar: "P", color: "#7c6df0", time: "14:14", text: "스타트업 챌린지 / 도시혁신센터에 사내 프로젝트 ‘노바’로 창업 아이디어 1기 신청 접수했습니다." },
        { role: "them", sender: "박이사", avatar: "P", color: "#7c6df0", time: "14:15", text: "그로스 서밋 2026 참가기업 사내 프로젝트 ‘아틀라스’로 신청 접수 완료했습니다." },
        { role: "bot", sender: "Eddy", time: "14:16", text: "✓ 두 건 모두 사업지원 문서에 갱신해 두었습니다.\n\n• 스타트업 챌린지 — 노바\n• 그로스 서밋 2026 — 아틀라스", link: { label: "사업지원 문서 보기", url: "https://ecode.ecworks.kr/docs/demo" } },
        { role: "me", sender: "김대표", avatar: "K", time: "17:38", text: "에디, 이거 미팅 제안 받았는데 봐줘.\n[프로젝트마켓] 디지털 명함 빌더 웹 서비스 MVP 구축" },
        { role: "bot", sender: "Eddy", time: "17:39", text: "프로젝트마켓 의뢰 미팅 제안이네요.\n\n디지털 명함 빌더 MVP\n• 방식 — 화상 미팅\n• 일시 — 5/13(수) 14:00 (50분)\n\n수락하시면 캘린더에 등록해 드릴까요?" },
        { role: "me", sender: "김대표", avatar: "K", time: "17:41", text: "한선임님 미팅 확인하고 확정지어주세요." },
        { role: "them", sender: "한선임", avatar: "H", color: "#e58c4a", time: "17:41", text: "넵 수요일 2시로 확정하겠습니다" },
        { role: "bot", sender: "Eddy", time: "17:41", text: "✓ 캘린더 등록했습니다.\n\n• 디지털 명함 MVP 화상미팅\n• 5/13(수) 14:00 — 14:50 (50분)\n• 전사 공개" },
        { role: "them", sender: "박이사", avatar: "P", color: "#7c6df0", time: "21:05", text: "프리랜서 마켓에서 본 두 건 결정 좀 해줘\n· 아이템 #A-725\n· 아이템 #B-714" },
        { role: "bot", sender: "Eddy", time: "21:07", text: "두 건 모두 해외 SNS 인플루언서 마케팅 서비스네요. 비교해 드릴게요.\n\n              아이템 #A  |  아이템 #B\nSTANDARD       44,000원       29,000원\nDELUXE        110,000원       89,000원\n리뷰             42개            52개\n완료            249건          2,023건\n환불 보장       없음       목표 미달시 전액\n\n가격·거래량 모두 아이템 #B 쪽이 유리해 보입니다. 어느 쪽으로 진행할까요?" },
        { role: "bot", sender: "Eddy", time: "18:01", text: "🌇 2026년 5월 8일 (금) 마감 브리핑\n\n출근 5명 · 전원 근무 중\n완료 태스크 1건 (포트폴리오 등록 — 한선임)\n진행 중 20건 · QA 미결 9건\n⚠ 기한 초과 2건 (프로젝트 아틀라스 QA, 관계사 정산 마감)\n내일 일정 · 휴가자 없음\n\n오늘도 수고하셨습니다." },
        { role: "them", sender: "정선임", avatar: "J", color: "#22c5a8", time: "18:14", text: "퇴근해보겠습니다." },
        { role: "bot", sender: "Eddy", time: "18:15", text: "✓ 정선임 퇴근 처리했습니다. 고생하셨습니다!" },
        { role: "them", sender: "한선임", avatar: "H", color: "#e58c4a", time: "19:23", text: "퇴근해보겠습니다." },
        { role: "bot", sender: "Eddy", time: "19:23", text: "✓ 한선임 퇴근 처리했습니다. 고생하셨습니다!" }
      ]
    },
    contact: {
      title: "프로젝트 상담",
      sub: "아이디어만 있어도 괜찮습니다. 30분 무료 상담으로 시작하세요.",
      name: "이름 / 회사명",
      contact: "연락처 (이메일 또는 전화)",
      kind: "필요한 서비스",
      kinds: ["맞춤형 소프트웨어 개발", "기존 서비스에 AI 추가", "유통 자동화 / ERP", "업무 자동화 SaaS", "기타"],
      msg: "간단한 설명 (선택)",
      submit: "상담 신청",
      response: "24시간 내 회신 드립니다",
      orCall: "또는 전화로",
      phone: "031-904-9005",
      email: "ga@e-code.kr",
      sent: "접수되었습니다. 24시간 내 회신 드립니다.",
    },
    foot: {
      slogan: "AI가 쓴 코드, 사람이 검증합니다",
      address: "경기도 고양시 일산서구 일산로 774, 6층 602-1호",
      biz: "사업자등록번호 243-81-03485 · 법인등록번호 285011-0061164",
      copy: "© 2025 ECODE (주식회사 이코드). All rights reserved.",
    },
  },
  en: {
    nav: { verified: "Ecode Verified", patentguard: "Patent Guard", trust: "Credentials", ecodeteam: "Dev Retainer", services: "Our Services", ceo: "Founder", team: "Org chart", contact: "Contact", disclosure: "Disclosure" },
    hero: {
      tag: "AI code verification",
      titleA: "Trust is built on",
      titleB: "verification — ",
      titleAccent: "we hold it.",
      sub: "Security, patents, and quality.\nExpert verification for the risks of the AI era.",
      pillars: [
        { k: "Security audit", icon: "shield" },
        { k: "Patent review", icon: "gavel" },
        { k: "Quality diagnostics", icon: "chart" }
      ],
      cta1: "Request a verification",
      ctaShort: "Contact",
      cta2: "See how we verify",
      eyebrow: "AI-ASSISTED · EXPERT-VERIFIED",
    },
    metrics: [
      { k: "16", u: "yrs", l: "engineering experience" },
      { k: "3", u: "", l: "registered patents" },
      { k: "50", u: "+", l: "projects verified" },
      { k: "2", u: "stage", l: "AI · expert review" },
    ],
    products: {
      eyebrow: "CORE PRODUCTS",
      titleAccent: "We verify AI output",
      titleRest: "\nfor security, patents, and quality",
      sub: "Expert insight combined with AI analysis,\nfor precise and objective verification.",
      items: [
        {
          id: "verified",
          mark: "assets/mark-verified.png",
          illo: "assets/illo-verified.png",
          name: "Ecode Verified",
          nameKo: "이코드 버리파이드",
          tagline: "Security · Performance",
          promise: "Caught before you ship.",
          desc: "We diagnose vulnerabilities and performance risk in AI-generated code. An engineer strips the false positives.",
          checks: [
            { k: "Vulns", v: "OWASP Top 10 · CWE" },
            { k: "Access", v: "Auth & authorization flaws" },
            { k: "Exposure", v: "Keys · tokens · config" },
            { k: "Perf", v: "Query · bundle · runtime" }
          ],
          deliver: ["Risk-graded report", "Fix guide", "One re-verification"],
          accent: "#ff6a00"
        },
        {
          id: "patentguard",
          mark: "assets/mark-patentguard.png",
          illo: "assets/illo-patentguard.png",
          name: "Patent Guard",
          nameKo: "특허 가드",
          tagline: "Patent Infringement",
          promise: "Settled before litigation.",
          desc: "We compare your shipped features against registered claims, pinpoint the risky ones, and refer you to a licensed patent attorney for the response.",
          checks: [
            { k: "Decompose", v: "Feature → elements" },
            { k: "Search", v: "KIPRIS · global DBs" },
            { k: "Compare", v: "Claim-by-claim verdict" },
            { k: "Refer", v: "Licensed attorney hand-off" }
          ],
          deliver: ["Infringement risk map", "Claim comparison table", "Attorney referral"],
          accent: "#14284f"
        },
        {
          id: "quality",
          mark: "assets/mark-quality-badge.png",
          name: "Quality Insight",
          nameKo: "퀄리티 인사이트",
          tagline: "Performance · Quality",
          promise: "Proven in numbers.",
          desc: "We raise reliability and operating efficiency using performance metrics and quality data.",
          checks: [
            { k: "Metrics", v: "Latency · throughput · errors" },
            { k: "Model", v: "Accuracy · bias · regression" },
            { k: "Load", v: "Concurrency · breaking point" },
            { k: "Ops", v: "Observability · logs · alerts" }
          ],
          deliver: ["Quality metrics report", "Prioritized fixes", "One re-measurement"],
          accent: "#f26a1b"
        }
      ],
      note: "Take both and you get a combined report plus one extra free re-verification."
    },
    method: {
      eyebrow: "HOW WE VERIFY",
      titleAccent: "Systematic verification,",
      titleRest: "\nunambiguous results",
      sub: "AI analysis combined with expert review —\nfaster, and more accurate.",
      steps: [
        { n: "01", k: "Intake", icon: "intake", who: "Intake", v: "We securely receive the code or artifacts to be verified." },
        { n: "02", k: "AI analysis", icon: "chip", who: "AI", v: "Rapid analysis of vulnerabilities, similar patents, and quality issues." },
        { n: "03", k: "Expert review", icon: "expert", who: "Human", v: "In-depth expert review raises the accuracy of every finding." },
        { n: "04", k: "Report", icon: "report", who: "Human", v: "A report with clear verdicts and remediation guidance." },
        { n: "05", k: "Follow-up", icon: "verified", who: "Human", v: "Re-checks and improvement support sustain the result." }
      ],
      humanLabel: "Human judgment",
      aiLabel: "AI discovery"
    },
    trust: {
      eyebrow: "WHY TRUST US",
      titleAccent: "Proven",
      titleRest: " expertise",
      sub: "Recognition earned through outside review — and the clients we build and maintain for.\nThe companies who trust us with their systems are the proof.",
      lab: {
        name: "ECODE Research Lab",
        desc: "KOITA-certified corporate research institute",
        meta: "Cert No. 2026112209 · Field: AI · 2026.06",
        cta: "View certificate",
        href: "assets/koita-cert.pdf"
      },
      awards: [
        {
          kind: "AWARD", year: "2026", icon: "trophy",
          title: "1st place — 2026 IP Data\nStartup Competition",
          desc: "1st place in the startup-planning track using IP\ndata. Hosted by the Korea IP Office."
        },
        {
          kind: "SELECTION", year: "2026", icon: "gamepad",
          title: "Selected — 2026 Gyeonggi Game\nProduction (CJ ENM IP)",
          desc: "By Gyeonggi Province · GCA. Selected as a\nCJ ENM IP-fusion game developer."
        }
      ],
      awardsSubTitle: "",
      awardsSub: [
        {
          kind: "SELECTION", year: "2026", icon: "ai",
          title: "Selected — 2026 Innovative\nSmall-Business AI Support",
          desc: "Passed the document review and selected as a\nparticipant. Hosted by MSS · SEMAS."
        },
        {
          kind: "FINALIST", year: "2026", icon: "rocket",
          title: "Finalist — 2026 KAMCO\nStartup TechBlaze",
          desc: "Advanced to the finals of the startup contest\nby KAMCO · Seoul CCEI."
        },
        {
          kind: "FINALIST", year: "2026", icon: "medal",
          title: "Finalist — 14th Public-Data·AI\nStartup Competition",
          desc: "Advanced through regional heats to the\nnational finals. Hosted by NIA."
        }
      ],
      creds: [
        { k: "A verification partner you can trust", v: "Security, quality, and patent risk verification\nthat supports your growth safely.", icon: "shield" },
        { k: "ISMS-P grade security", v: "Systematic security operations built on an\ninformation-protection management system", icon: "check" },
        { k: "Verified by senior engineers", v: "Reviewed directly by specialists with\nyears of engineering experience", icon: "people" },
        { k: "Domestic & global IP databases", v: "Accurate risk analysis from KIPRIS patent,\npaper, and technical data", icon: "doc" }
      ],
      logosTitle: "Supporting institutions · client partners",
      logos: [
        { src: "assets/logos/kipo.png", alt: "KIPO", h: 40 },
        { src: "assets/logos/gca.png", alt: "Gyeonggi Content Agency", h: 40 },
        { src: "assets/logos/dsone.png", alt: "DS One Tech", h: 22 },
        { src: "assets/logos/cjenm.png", alt: "CJ ENM", h: 34 },
        { src: "assets/logos/barofarm.png", alt: "BaroFarm", h: 38 },
        { src: "assets/logos/aroha.png", alt: "Aroha Noblesse VIP", h: 52 },
        { src: "assets/logos/goseong-mono.png", alt: "Goseong Book Distribution", h: 26 },
        { src: "assets/logos/jemigong.webp", alt: "Jemigong", h: 92 }
      ]
    },
    proof: {
      title: "Proven industry domains",
      sub: "Systems that have actually run in fields with demanding security requirements."
    },
    record: [
      { ind: "Government", code: "GOV", problem: "Manual admin causing bottlenecks", solution: "Web automation + analytics integration", result: "Faster ops, stable long-term run" },
      { ind: "Defense", code: "DEF", problem: "Aging high-security systems", solution: "Secure comms + personnel/logistics rebuild", result: "Met security spec, zero downtime" },
      { ind: "Energy", code: "PWR", problem: "Manual plant data collection", solution: "IoT sensors + anomaly monitoring", result: "Real-time analytics in place" },
      { ind: "Education", code: "EDU", problem: "Fragmented academic processes", solution: "Integrated academic + LMS platform", result: "Faculty and students fully digital" },
      { ind: "Finance · Fintech", code: "FIN", problem: "Manual settlement, fragile trade logic", solution: "Auto-trading and settlement platform with security review", result: "Trade stability, automated operations" },
      { ind: "Blockchain", code: "CHN", problem: "Contract vulnerability exposure", solution: "NFT mint and breeding contract design plus verification", result: "Zero incidents in on-chain operation" },
      { ind: "Game", code: "GAME", problem: "In-game economy balance, payment integrity, live-ops stability", solution: "Unity mobile games and management sims; in-game economy and payment logic verified", result: "IP licensing partnership, zero-downtime live ops" },
    ],
    services: {
      title: "Our own services",
      titleAccent: "We build and run",
      titleRest: " our own products",
      sub: "The team building verification tooling also operates live products. These are ours.",
      items: [
        { id: "ecworks", title: "EcodeWorks", nameKo: "이코드웍스", role: "AI work assistant / B2B SaaS", desc: "Manage attendance, schedule, docs, kanban inside Telegram & Slack.", tags: ["Next.js", "AI/ML", "Telegram"], status: "LIVE", link: "https://www.ecworks.kr/", img: "assets/services/ecworks.png" },
        { id: "floworder", title: "FlowOrder", nameKo: "플로우오더", role: "Distribution automation", desc: "Automated ordering, inventory, settlement. Auto-generated shops per seller.", tags: ["React", "Node", "ERP"], status: "LIVE", link: "https://floworder.kr/", img: "assets/services/floworder.png" },
        { id: "murmur", title: "Murmur", nameKo: "머머 다이어리", role: "AI voice diary", desc: "Speak; AI organizes the entry and analyzes emotion. On-device encryption.", tags: ["React Native", "SQLCipher"], status: "LIVE", link: "https://murmurdiary.com/", img: "assets/services/murmur.png" },
        { id: "pyuung", title: "Pyuung", nameKo: "퓽", role: "Handwritten postal letters", desc: "Words drawn on screen become paper that reaches a mailbox. QR replies.", tags: ["NestJS", "PostgreSQL", "AWS"], status: "LIVE", link: "https://pyuung.kr/", img: "assets/services/pyuung.png" },
        { id: "korean", title: "Korean AI Tutor", nameKo: "코리안 AI 튜터", role: "Global Korean learning", desc: "24/7 AI conversation partner with real-time pronunciation feedback.", tags: ["GPT/Claude", "Speech AI"], status: "MVP", img: "assets/services/korean-tutor.jpg" },
        { id: "ptsandbag", title: "PT Sandbag", nameKo: "AI 발표 코치", role: "Presentation & interview practice", desc: "AI throws curveball questions and scores you live. Rehearse interviews, speeches, and pitches under real conditions.", tags: ["Next.js", "Speech AI", "LLM"], status: "LIVE", img: "assets/services/ptsandbag.png" },
        { id: "sanji", title: "Sanji Kitchen", nameKo: "모바일 경영 시뮬레이션", role: "Game · CJ ENM IP licensing", desc: "A management-sim hybrid built around farm-direct trade. Mobile only, in production.", tags: ["Unity", "Mobile"], status: "In production", img: "assets/game-sanji.png", support: { label: "Supported by", logo: "assets/logos/gca.png", alt: "Gyeonggi Content Agency", h: 34, href: "https://www.gcon.or.kr/" } },
        { id: "ecodebooks", title: "ECODEBOOKS", nameKo: "이코드북스", role: "Independent publishing", desc: "Essay & guide imprint distributed via Kyobo · Yes24 · Aladin.", tags: ["Editorial"], status: "LIVE", link: "https://ecodebooks.kr/", img: "assets/services/ecodebooks.png" },
      ],
      upcoming: ["Grant finder", "Tycoon game", "Mobile game", "Alcohol platform", "Ticketing", "Postal automation", "Healthcare", "AI community", "AI YouTube ops"],
    },
    team: {
      title: "OUR TEAM",
      sub: "Clear roles, mapped to the org chart",
      corp: "ECODE Inc.",
      dualLabel: "dual",
      head: { name: "Lee Seong-hun", role: "CEO · Head of R&D", icon: "hex" },
      units: [
        { name: "ECODE R&D Lab", icon: "layers", members: [
          { n: "Yeom Jeong-heon", r: "Director" },
          { n: "Kim Su-jin", r: "Senior" },
          { n: "Hong Sae-yeon", r: "Senior" }
        ]},
        { name: "Business Operations", icon: "triangle", members: [
          { n: "Kim Eun-chan", r: "Director" },
          { n: "Hwang Jun-sik", r: "Senior" }
        ]},
        { name: "Marketing", icon: "pie", members: [          { n: "Hwang Jun-sik", r: "Senior", dual: true },
          { n: "Hwang Deok-jae", r: "Outside Director" }
        ]}
      ]
    },
    ecodeteam: {
      eyebrow: "ECODETEAM · SUBSCRIPTION",
      tag: "Subscription",
      titleAccent: "Monthly",
      titleA: " subscription",
      titleB: "for your full-stack team",
      sub: "Not freelancers on demand — a dedicated team you keep on retainer. Strategy, design, dev, and ops bundled into one monthly subscription.",
      url: "https://ecodeteam.kr/",
      cta: "Visit ECODETEAM",
      demoBtn: "Explore Demo Hub",
      demoTitle: "Demo Hub",
      demoSub: "Live, deployed interactive prototypes — click to try.",
      bullets: [
        { k: "Monthly", v: "Fixed monthly fee instead of per-project quoting." },
        { k: "Dedicated team", v: "Planner · designer · engineer working as one squad." },
        { k: "Ops included", v: "New features, maintenance and incident response in one contract." },
        { k: "Flexible scale", v: "Scale up busy months, scale down when things settle." },
      ],
      plans: [
        { name: "Starter", scope: "Landing · single service" },
        { name: "Growth", scope: "Multi-feature SaaS · automation" },
        { name: "Scale", scope: "AI integration · multi-service" },
      ],
    },
    ceo: {
      title: "Founder",
      name: "Lee Seong-hun",
      role: "CEO & Founder",
      career: "16-year full-stack engineer",
      bio: "Seasoned 16-year full-stack engineer fluent across modern AI and a wide stack. 50+ deliveries across government, defense, energy and education.",
      quote: "Not just a tech partner — a business companion.",
      careers: [
        { period: "2025.08 — Now", org: "ECODE Inc.", role: "CEO", current: true },
        { period: "2022.10 — 2026.05", org: "Bistock Yeouido", role: "CEO (resigned)" },
        { period: "2022.08 — 2025.12", org: "CILABS", role: "Director of Eng." },
        { period: "2020.01 — 2022.08", org: "Campbell Inc.", role: "Principal Researcher" },
        { period: "2014.12 — 2018.12", org: "Seoul National University", role: "Staff" },
        { period: "2012.01 — 2014.12", org: "Rocket Avenue", role: "Dev Team Lead" },
        { period: "2008.03 — 2011.12", org: "Company A", role: "Director of Eng." }
      ],
      projectGroups: [
        { g: "Government · Defense SI", items: [
          "Government Onnara e-Approval Maintenance (2020–2022)",
          "KEPCO KPX Power Exchange e-Approval (2022)",
          "Defense Intelligence Command upgrade (2022)",
          "DAPA BRM multi-browsing (2022)",
          "SK TWORLD SMS Manager (2013)"
        ]},
        { g: "Solo · Long-term ops", items: [
          "EcoPhone resale system (2013–2022, 10y)",
          "Knotted Donut intranet (2022–2025, 3y)",
          "Securities platform (2022)"
        ]},
        { g: "Blockchain · Fintech", items: [
          "Klaytn NFT project (2021–2022)",
          "Binance auto-trading (2020)",
          "API trading platform (2021–2022)"
        ]},
        { g: "B2B SaaS · Own services", items: [
          "Smart-mirror virtual hair (2023–2024)",
          "Dosang art auction (2023–2024)",
          "DakSil poultry mgmt (2024)",
          "AlltaEdu academy mgmt (2024)",
          "GomsLab math problem bank (2024)",
          "WorkingMom logistics (2024)"
        ]},
        { g: "Other", items: [
          "Android puzzle game launch (2011)",
          "50+ freelance (bots · auto-trading · web)"
        ]}
      ],
      stack: [
        { c: "AI · ML", items: [
          { k: "GPT · Claude API", v: "in production" },
          { k: "LLM · RAG · agents", v: "review · chat" },
          { k: "Speech AI · STT / TTS", v: "Whisper etc." },
          { k: "Computer Vision · OCR", v: "invoice · thermal" },
          { k: "Prompt engineering", v: "" }
        ]},
        { c: "Backend", items: [
          { k: "Node.js · NestJS · Express", v: "in production" },
          { k: "Python · FastAPI · Django", v: "15yr+" },
          { k: "Java · Spring / JSP", v: "6yr+" },
          { k: "PHP", v: "6yr+" },
          { k: "C / C++ / C#", v: "5yr+" }
        ]},
        { c: "Frontend", items: [
          { k: "React · Next.js", v: "10yr+" },
          { k: "TypeScript", v: "5yr+" },
          { k: "styled-components · Tailwind", v: "" },
          { k: "Vite · Webpack", v: "" }
        ]},
        { c: "Mobile", items: [
          { k: "React Native", v: "shipped" },
          { k: "Flutter (Dart)", v: "shipped" },
          { k: "Android Native", v: "many" },
          { k: "iOS · Swift · Obj-C", v: "shipped" }
        ]},
        { c: "Database", items: [
          { k: "MySQL · Aurora", v: "tuning" },
          { k: "PostgreSQL", v: "in production" },
          { k: "Oracle · CUBRID · Tibero", v: "Gov SI" },
          { k: "Redis", v: "cache · chat" },
          { k: "SQLite · SQLCipher · D1", v: "on-device" }
        ]},
        { c: "DevOps · Cloud", items: [
          { k: "AWS · GCP · NCP", v: "" },
          { k: "Cloudflare · Workers · R2 · D1", v: "" },
          { k: "Docker · Nginx · Linux", v: "infra" },
          { k: "GitHub Actions · CI/CD", v: "" }
        ]},
        { c: "Other", items: [
          { k: "Unity 3D", v: "cross-platform" },
          { k: "Solidity (Klaytn KIP)", v: "mint · breed" },
          { k: "Swagger · tech writing", v: "" },
          { k: "English", v: "TOEIC 920" }
        ]}
      ],
      education: [
        { k: "Degree", v: "BS, Info & Comm. Eng.", y: "2012" },
        { k: "Engineer, Info Processing", v: "HRD Korea", y: "2012.08" },
        { k: "Info Equipment Operation", v: "HRD Korea", y: "2007.07" },
        { k: "Craftsman Programming", v: "HRD Korea", y: "2004.06" },
        { k: "Hacking Defense Expert", v: "Private", y: "2011" },
        { k: "Linux Master Lv.2", v: "KAIT", y: "2010" }
      ],
      patents: [
        {
          status: "Registered",
          titleKo: "비상장 주식 거래를 지원하는 방법 및 장치",
          titleEn: "Method and Apparatus for Supporting Unlisted Stock Trading",
          no: "10-2023-0061245",
          date: "2023-05-11",
          ipc: "G06Q40/04",
          applicant: "Bistock Yeouido Inc.",
          role: "Inventor (individual)"
        },
        {
          status: "Registered",
          titleKo: "주식 커뮤니티 서비스에서 게시글을 관리하는 방법 및 장치",
          titleEn: "Method and Device for Managing Post in Stock Community Service",
          no: "10-2023-0061247",
          date: "2023-05-11",
          ipc: "G06Q50/00",
          applicant: "Bistock Yeouido Inc.",
          role: "Inventor (individual)"
        },
        {
          status: "Published",
          titleKo: "채팅 기반의 비상장 주식 거래 지원 방법 및 장치",
          titleEn: "Method and Apparatus for Supporting Unlisted Stock Trading Based on Chat",
          no: "10-2023-0061246",
          date: "2023-05-11",
          ipc: "G06Q40/04",
          applicant: "Bistock Yeouido Inc.",
          role: "Inventor (individual)"
        }
      ]
    },
    demo: {
      eyebrow: "ECODEWORKS LIVE",
      title: "A day with Eddy",
      sub: "How our AI assistant Eddy actually works inside the team chat.",
      groupName: "ECODE Team Chat",
      groupSub: "5 members · Eddy active",
      groupMeta: "ECODEWORKS · demo environment",
      youLabel: "You",
      placeholder: "Ask Eddy anything…  (e.g. summarize today)",
      send: "Send",
      thinking: "Eddy is replying",
      unlocked: "Demo finished — chat with Eddy live",
      replay: "Replay from start",
      ctaLabel: "Bring Eddy to our team",
      ctaSub: "ECODEWORKS — ecworks.kr",
      ctaUrl: "https://ecworks.kr",
      featureLabels: ["Attendance", "Calendar / meetings", "Link & doc analysis", "Vendor comparison", "Daily brief"],
      persona: "You are 'Eddy', the AI assistant inside ECODE's company group chat — the flagship feature of ECODEWORKS, a B2B SaaS that embeds an AI office assistant into team messaging. You handle attendance, task tracking, calendar/meeting scheduling, link/document analysis, market & vendor comparison, and daily briefings. Style: warm, concise, professional. Prefer short messages, bullet points with '•', check marks '✓' for confirmations. Open with a one-line acknowledgment, then concrete output, then ask a clear follow-up if useful. Match the user's language. Never invent specific internal company data — if asked, answer in general terms. Keep responses under 6 short lines unless a structured briefing is requested.",
      script: [
        { role: "them", sender: "H. Yoon (Senior)", avatar: "H", color: "#e58c4a", time: "08:53", text: "Checking in." },
        { role: "bot", sender: "Eddy", time: "08:53", text: "✓ Logged in. Have a great day, H.! 😊" },
        { role: "me", sender: "K. Lee (CEO)", avatar: "K", time: "08:57", text: "in" },
        { role: "bot", sender: "Eddy", time: "08:57", text: "✓ Logged in. Have a great day, K.!" },
        { role: "bot", sender: "Eddy", time: "09:01", text: "📋 Morning brief — Fri, May 8\n\nClocked in 2 / 5\n• ✅ K. (08:57) · H. (08:53)\n• ⏳ L. · P. · J. — not in yet\n\n1 task due today\n• Startup-portfolio registration — H.\n\nOpen QA: 8\n• Orion 3 · BetaFarm 2 · Atlas 2 · Nova 1\n\nNo PTO, no scheduled events\nHave a good Friday 🙂" },
        { role: "me", sender: "K. Lee (CEO)", avatar: "K", time: "14:04", text: "Eddy, draft today's weekly-meeting agenda." },
        { role: "bot", sender: "Eddy", time: "14:05", text: "Pulled from the kanban + last meeting's action items.\n\n📋 Agenda — 2026-05-08 weekly\n\n1. Per-project status\n  • Nova — envelope QA · payment-PG review · launch target 5/15\n  • Atlas — global marketing · IG promotion\n  • Orion — launch reactions · policy-bug fix · content backfill\n  • Sigma — BTF vendor pricing · publishing-store hookup\n\n2. Internal subscription SaaS — dev status · final name\n3. SEO sweep — H. to report\n4. Key dates — 5/13 youth grant opens · 5/15 warehouse meeting\n5. Outbound pipeline · other" },
        { role: "them", sender: "P. Yum (Director)", avatar: "P", color: "#7c6df0", time: "14:14", text: "Submitted internal project ‘Nova’ to the Startup Challenge cohort 1." },
        { role: "them", sender: "P. Yum (Director)", avatar: "P", color: "#7c6df0", time: "14:15", text: "Growth Summit 2026 application sent under internal project ‘Atlas’. Done." },
        { role: "bot", sender: "Eddy", time: "14:16", text: "✓ Logged both into the grant-tracking doc.\n\n• Startup Challenge — Nova\n• Growth Summit 2026 — Atlas", link: { label: "Open grant tracker", url: "https://ecode.ecworks.kr/docs/demo" } },
        { role: "me", sender: "K. Lee (CEO)", avatar: "K", time: "17:38", text: "Eddy, look at this — inbound brief from ProjectMarket:\nDigital Business-Card Builder MVP" },
        { role: "bot", sender: "Eddy", time: "17:39", text: "ProjectMarket inbound meeting request.\n\nDigital Business-Card Builder MVP\n• Format — Video call\n• When — Wed 5/13, 2:00 PM (50 min)\n\nWant me to add this to the calendar if you accept?" },
        { role: "me", sender: "K. Lee (CEO)", avatar: "K", time: "17:41", text: "H — can you take this meeting?" },
        { role: "them", sender: "H. Yoon (Senior)", avatar: "H", color: "#e58c4a", time: "17:41", text: "Yes — locking in Wed 2 PM." },
        { role: "bot", sender: "Eddy", time: "17:41", text: "✓ Added to calendar.\n\n• Digital Card MVP — Video meeting\n• Wed 5/13, 14:00 — 14:50\n• Visible to everyone" },
        { role: "them", sender: "P. Yum (Director)", avatar: "P", color: "#7c6df0", time: "21:05", text: "Compare these two for me — freelance marketplace gigs:\n· Item #A-725\n· Item #B-714" },
        { role: "bot", sender: "Eddy", time: "21:07", text: "Both are overseas-SNS influencer-marketing services. Quick compare:\n\n              Item #A      |   Item #B\nSTANDARD      ₩44,000          ₩29,000\nDELUXE       ₩110,000          ₩89,000\nReviews         42                52\nDelivered      249             2,023\nRefund         none      full refund if missed\n\nPrice and volume both favor Item #B. Which should we go with?" },
        { role: "bot", sender: "Eddy", time: "18:01", text: "🌇 Closing brief — Fri, May 8 2026\n\n5 in-office, all still working\n1 task completed (portfolio registration — H.)\n20 tasks in progress · 9 QA tickets open\n⚠ 2 overdue (Project Atlas QA, affiliate settlement close)\nNo events or PTO tomorrow\n\nGreat work today." },
        { role: "them", sender: "J. Hwang (Senior)", avatar: "J", color: "#22c5a8", time: "18:14", text: "Heading out." },
        { role: "bot", sender: "Eddy", time: "18:15", text: "✓ Logged J.'s clock-out. Great work today!" },
        { role: "them", sender: "H. Yoon (Senior)", avatar: "H", color: "#e58c4a", time: "19:23", text: "Heading out." },
        { role: "bot", sender: "Eddy", time: "19:23", text: "✓ Logged H.'s clock-out. Great work today!" }
      ]
    },
    contact: {
      title: "Start a project",
      sub: "Even just an idea is fine. Start with a free 30-minute consultation.",
      name: "Name / Company",
      contact: "Contact (email or phone)",
      kind: "Service needed",
      kinds: ["Custom software", "Add AI to existing service", "Distribution / ERP", "Work automation SaaS", "Other"],
      msg: "Brief description (optional)",
      submit: "Submit",
      response: "We reply within 24 hours",
      orCall: "Or call us",
      phone: "+82-31-904-9005",
      email: "ga@e-code.kr",
      sent: "Received. We'll reply within 24 hours.",
    },
    foot: {
      slogan: "AI wrote the code. We verify it.",
      address: "774 Ilsan-ro, Ilsanseo-gu, Goyang, Gyeonggi, 6F 602-1",
      biz: "Business Reg 243-81-03485 · Corp Reg 285011-0061164",
      copy: "© 2025 ECODE Corporation. All rights reserved.",
    },
  },
};

// ============================== JA / ZH overlays ==============================
// Shallow-merge from EN base; only the most visible strings are translated.
// Technical structure (careers/projects/stack/items) stays from EN as graceful fallback.
COPY.ja = {
  ...COPY.en,
  nav: { verified: "Ecode Verified", patentguard: "Patent Guard", trust: "信頼の根拠", ecodeteam: "開発サブスク", services: "自社サービス", ceo: "代表", team: "組織図", contact: "お問合せ", disclosure: "公示" },
  hero: {
    ...COPY.en.hero,
    tag: "AIコード検証",
    titleA: "信頼をつくる検証、",
    titleB: "ECODEが ",
    titleAccent: "守ります",
    sub: "セキュリティ、特許、そして品質。\nAI時代のリスクを専門的に検証します。",
    pillars: [
      { k: "脆弱性の検証", icon: "shield" },
      { k: "特許侵害の検討", icon: "gavel" },
      { k: "性能・品質診断", icon: "chart" }
    ],
    cta1: "検証のご相談",
    ctaShort: "相談",
    cta2: "検証プロセスを見る"
  },
  ecodeteam: {
    ...COPY.en.ecodeteam,
    tag: "サブスクリプション",
    titleAccent: "月額",
    titleA: "で運用する",
    titleB: "あなたのフルスタックチーム"
  },
  services: { ...COPY.en.services, title: "運用中のサービス", titleAccent: "運用中", titleRest: "のサービス" },
  contact: { ...COPY.en.contact, title: "プロジェクト相談", sub: "アイデアだけでも結構です。30分の無料相談から。" }
};
COPY.zh = {
  ...COPY.en,
  nav: { verified: "Ecode Verified", patentguard: "Patent Guard", trust: "信任依据", ecodeteam: "开发订阅", services: "自有服务", ceo: "创始人", team: "组织架构", contact: "联系我们", disclosure: "公示" },
  hero: {
    ...COPY.en.hero,
    tag: "AI 代码验证",
    titleA: "信任源于验证，",
    titleB: "由 ECODE ",
    titleAccent: "守护",
    sub: "安全、专利，以及质量。\n专业验证 AI 时代的风险。",
    pillars: [
      { k: "安全漏洞验证", icon: "shield" },
      { k: "专利侵权审查", icon: "gavel" },
      { k: "性能与质量诊断", icon: "chart" }
    ],
    cta1: "咨询验证服务",
    ctaShort: "咨询",
    cta2: "查看验证流程"
  },
  ecodeteam: {
    ...COPY.en.ecodeteam,
    tag: "订阅制",
    titleAccent: "月度订阅",
    titleA: ",运营你的",
    titleB: "全栈开发团队"
  },
  services: { ...COPY.en.services, title: "在线运营服务", titleAccent: "在线运营", titleRest: "服务" },
  contact: { ...COPY.en.contact, title: "项目咨询", sub: "只有想法也可以。从30分钟免费咨询开始。" }
};

window.COPY = COPY;

// Tiny utility: intersection-observer reveal
function useReveal(threshold = 0.12) {
  const ref = React.useRef(null);
  const [seen, setSeen] = React.useState(false);
  React.useEffect(() => {
    // Fallback: if IO is unavailable (print, export, hidden iframe), show immediately.
    if (typeof IntersectionObserver === 'undefined') { setSeen(true); return; }
    // Safety net — never leave content permanently invisible.
    const safety = setTimeout(() => setSeen(true), 1400);
    if (!ref.current) { return () => clearTimeout(safety); }
    const io = new IntersectionObserver((entries) => {
      entries.forEach(e => { if (e.isIntersecting) { setSeen(true); io.disconnect(); } });
    }, { threshold });
    io.observe(ref.current);
    return () => { clearTimeout(safety); io.disconnect(); };
  }, []);
  return [ref, seen];
}

window.useReveal = useReveal;
