* 현재 설치 APK: app-debug-0805_1616-hall3d-bg.apk — 웹 메인 https://badminton-inky.vercel.app/ · https://badminton-inky.vercel.app/downloads/에서 다운로드 (사이드로드 · Play Store 별도) · APK는 실행 시부터 가로 모드 고정 · 점수판 파일 badminton_scoreboard.html
* 라이선스·보안: 앱은 자체 HTML/JS·Android WebView(Apache-2.0 계열 도구)만 사용합니다. Pro 동기화 API는 redis(BSD)·기존 @vercel/kv 계열이며 신규 GPL 없음. UI 서체는 Google Fonts OFL(Jua·Noto Sans KR·Do Hyeon·Orbitron) 또는 시스템 글꼴입니다. 기본 점수·팀명은 이 기기 localStorage에만 저장됩니다. Pro를 켠 경우에만 방 코드·토큰·PIN으로 TV/폰과 점수 스냅샷을 동기화합니다(토큰·PIN·요청 제한). 방문 통계 API는 익명 카운트만 사용할 수 있습니다. APK에서 USB/BT 득점기 사용 전 로컬 4자리 연결 코드(서버 인증 아님·시도 제한)를 묻습니다.
* 언어: 메뉴 → 언어에서 한국어 / English / 中文을 고릅니다. UI·도움말·TTS 읽기 언어가 바뀝니다(help.html / help_en.html / help_zh.html).
* 메뉴·서체: 상단 메뉴에서 음성·TTS·언어·서체·스킨·팀·도움말에 들어갑니다. 서체는 이 기기에만 저장됩니다(오프라인이면 시스템 글꼴로 대체될 수 있음). 스킨에 홀 입체판·원형장 입체판(사진 배경 + 좌우 기울기 점수판)이 있습니다.
* 팀전·클럽리그 (1차): 메뉴 → 팀전·클럽리그 (/event). 당일 팀전/클럽리그 선택 · 5단계 마법사 · 구성 템플릿 · 개별점수/팀승리 분리 · 편성·출전 분리 · 검증 후 대진. 점수판 연동·멀티 코트(PIN·Redis). ExcelJS·qrcodejs MIT · TeamClubUI 자체 · 신규 GPL 없음. 클럽 시즌 운영은 2차.
* 연결(TV·리모컨·Pro): 메뉴 → 연결에서 TV(HDMI/Smart View 등 안내·심플 모드), 리모컨(BT 키보드·마우스 안내), Pro(방 만들기 → TV 표시·폰 리모컨 URL·4자리 PIN)를 사용합니다. 호스트에 PIN이 표시되며, 리모컨 URL에서는 PIN 입력 후 연결합니다(토큰·PIN·요청 제한 · Redis). Cast/Bluetooth 설정 버튼은 Android 브리지가 있을 때만 동작합니다.
* 키보드·카메라 리모컨: ← 왼쪽 팀 +1 · → 오른쪽 팀 +1 (길게 −1). 볼륨(카메라) 리모컨: 키 25=왼쪽 +1·24=오른쪽 +1, 길게 누르면 되돌리기(APK는 외부 BT만 · 기기 본체 볼륨은 그대로). 선서브 대기 중에는 ←/→·볼륨 25/24 짧게로 해당 팀 선서브를 고릅니다. USB/BT 득점기·무선 마우스는 APK에서 연결 코드 입력 후 사용합니다.
* 자막 띠: 상단 제목을 탭하거나 메뉴의 점수판 이름으로 제목·자막 배경(뉴스/스포츠/e스포츠 중계/골드/그린/다크)을 고릅니다. 설정은 이 기기에만 저장됩니다(인라인 SVG · 신규 npm/GPL 없음).
* TTS 경기: 메뉴의 TTS에서 대회(점수·서브 TTS · 기본)·일반(연속·화이팅·시작/함성 MP3 포함)·조용히(말 끔)를 고릅니다. 시작음·선서브/세트 함성 MP3는 일반에서만 재생됩니다. 설정은 이 기기에만 저장됩니다.
* 연속 득점·선서브 TTS: 일반 모드에서 같은 팀이 연속 2·3·4점을 내면 점수 읽기·서브 안내 뒤 「연속 득점」을 말합니다. 첫 세트 선서브 확정 시(일반 모드) 시작음 끝에 「팀·선수 서브」 TTS가 이어집니다.
* TTS 속도·음성: 같은 TTS 모달에서 슬라이더 0.8~1.5 속도와 기기에 설치된 시스템 TTS 음성 이름을 고릅니다(앱에 음성 파일 미포함 · 신규 GPL 없음). 선택 시 짧은 테스트 멘트가 나옵니다.
* Android TTS: APK(WebView)에서는 기기 시스템 TextToSpeech로 말합니다(플랫폼 API · 신규 npm/GPL 없음). 웹 브라우저는 Web Speech API를 사용합니다. 속도·음성 설정은 동일합니다.
* 경기방식: 메뉴 → 경기에서 경기형식(단식/복식), 선승(1게임·3전2승·5전3승·사용자지정), 게임당 목표점수(21·15·11·사용자지정, 캡=점수+9)를 고릅니다. 규칙 변경 시는 점수 유지(즉시) 또는 확인 후 변경입니다(진행 중 점수는 유지). 게임 조정(청/백 세트 ±·게임 초기화)도 같은 메뉴에 있습니다.
* 핸디캡: 선서브 대기 중앙 창의 핸디캡 설정에서 숫자 입력·좌/우 +1·점수 탭으로 핸디를 넣습니다(메인 세트 패널 핸디 버튼은 숨김). 선서브 전이면 점수>0이어도 다시 열 수 있습니다. 핸디 후 선서브 확정 시 시작음이 납니다.
* 선서브 창: 0:0(또는 핸디 후 서브 미정)이면 화면 중앙에 선서브 선택 창이 뜹니다. 새 경기 확인 후에도 동일하게 선서브 창이 다시 열립니다. ←/L · →/R로 좌·우 팀을 고르거나, 기존처럼 서브 원을 터치해도 됩니다. ←/→ 아래에 USB·무선 버튼·워치·폰 좌우 버튼 안내와 경기형식·선승 선택이 있습니다. 복식 창에서 고르면 기본으로 넷 쪽(선수A)이 선서브입니다.
* 경기시간·득점 피드백: 선서브 확정 후 세트 패널에 경기시간(분:초)이 흐릅니다. 득점 시 +1 배지가 잠깐 떠오릅니다. 새 경기는 큰 확인 창으로 게임·세트·서브를 모두 초기화합니다. 승 오버레이가 떠 있는 동안에는 득점이 잠깁니다.
* TTS 순서·함성: 득점 후 화이팅·서브 안내는 순서대로 이어집니다. 게임 승 함성(MP3)은 최대 약 3초만 재생한 뒤 「승」TTS·다음 판 안내로 이어집니다.
* 되돌리기·마우스: 하단 되돌리기는 심플 버튼 앞에 있습니다. 마우스 3초 무움직임 후 세트 점수 아래에 ← 왼쪽 +1 · 오른쪽 +1 → / 길게 누르기 −1 안내가 뜹니다(팀 카드 PNG 힌트 없음).
* 마우스: 커서를 게임 점수 숫자에 두고 클릭하면 해당 팀 점수가 1 올라갑니다. 숫자가 아닌 점수판 다른 곳에서는 왼쪽 버튼으로 화면 왼쪽 팀, 오른쪽 버튼으로 화면 오른쪽 팀 점수가 올라갑니다(팀 위치를 바꾼 뒤에도 화면 왼·오른쪽 기준).
* 마우스: 커서를 마우스 패드에서 떼면 왼쪽버튼 왼쪽팀 +1, 오른쪽 버튼 오른쪽 팀 +1 (팀 위치를 바꾼 뒤에도 화면 왼·오른쪽 기준).
* 팀 위치 변경: 화면에서 청팀·백팀 카드 좌우를 바꿉니다. 세트 가운데 숫자도 왼쪽·오른쪽 팀에 맞춰 표시됩니다.
* 안드로이드: Chrome 메뉴(⋮)에서 앱 설치 또는 홈 화면에 추가로 설치할 수 있습니다. 설치 후에도 음성으로 팀 이름만 말해 +1 할 수 있습니다. APK는 위 파일명으로 사이드로드합니다(알 수 없는 출처 허용 필요).
* 팀명 변경: 팝업 창에서 입력 후 저장합니다 (태블릿·모바일에서도 사용 가능).
* 선수 표시 이름: 경기 중 선수 원(캐릭터)을 탭하면 표시 이름을 바꿀 수 있습니다. 비우면 서브/리시브(또는 A/B) 기본 말풍선으로 돌아갑니다. 0–0 선서브 고르기 중에는 원을 탭하면 선서브 선택이 우선됩니다. 표시 이름이 있으면 서브 TTS·선서브 안내도 팀명·A/B 대신 그 이름으로 말합니다.
* 세트 초기화: 메뉴 → 경기 → 게임 조정 안의 게임 초기화 또는 음성 세트 초기화 / 세트 점수 초기화 (게임 점수는 유지).
* 데이터 저장: 게임·세트 점수, 팀명, 점수판 제목, 팀 저장·저장된 팀 목록은 모두 이 기기의 브라우저(또는 설치한 앱) 안에만 남습니다.
- 서버에는 저장되지 않으며 다른 기기·다른 주소(예: PC와 태블릿)와 자동으로 맞춰지지 않습니다. 브라우저에서 사이트 데이터 삭제·앱 데이터 지우기를 하면 함께 사라질 수 있습니다.
* 팀 저장: 팀 저장으로 저장 이름·메모와 함께 현재 점수·팀명·세트를 남기고, 저장된 팀에서 나중에 확인·불러오기·삭제할 수 있습니다.
* 서브: 서브 팀 카드 바깥자리 세로 띠에 원형 표시가 붙습니다. 0–0에서 단식은 한쪽 서브 원만 터치해 선서브 팀을 고릅니다. 단식 게임 중에는 득점한 팀이 서브하고, 상대가 득점하면 서브가 바뀝니다. 복식은 양 팀의 서브 선수A·서브 선수B가 세로로 나오며, 위=좌측 반코트(파트너)·아래=우측 반코트(넷·세트 쪽)입니다. 서브권을 가질 팀에서 아래(넷 쪽) 선수에 해당하는 원 하나를 터치해 시작합니다. 복식 게임 중에는 아래(넷 쪽) 원만 서브·리시브가 깜빡이고, 위는 파트너입니다.
* 리시브(복식): 받는 팀 카드 바깥쪽 세로 띠에 리시브 선수A·리시브 선수B가 세로(위=좌·아래=넷 쪽)로 표시되며, 상대 서브 선수와 대각으로 맞는 쪽이 아래(넷 쪽) 원에만 강조됩니다(선서브를 고른 뒤·첫 득점 이후부터 표시, 0–0에서 아직 선서브를 고르기 전에는 숨깁니다).
* 게임 종료: 21점 이상이고 2점 차이거나 30–29이면 승자 표시·승자 세트 +1 후 게임 점수만 0으로 초기화됩니다. 20–20부터 세트 패널에 듀스가 표시됩니다. 선서브 기록이 있는 정상 종료이면 팀 좌우가 한 번 자동으로 바뀌며, 취소 한 번으로 방금 세트·점수·위치·선서브까지 이전 상태로 돌릴 수 있습니다.
* 음성 명령 예:
+1: 현재 화면에 적힌 팀 이름만 (예: 청팀) 또는 화면 기준 왼쪽 · 오른쪽.
−1: 팀이름 빼 (예: 청팀 빼, 공백 없이 청팀빼도 됨) 또는 왼쪽 빼 · 오른쪽 빼.
복수 점: 청팀 3점 추가, 백팀 4점 빼기 등.
기타: 새 경기 / 초기화, 취소, 세트 초기화, 점수판 청팀 (호출어 선택)