서울 PC에서 Remote-SSH로 작업하던 중 연결이 끊겨 커밋 전 상태로 유실된 2026-09-15 결정사항(등급 1~4→1~10 확장, 5장 포커 핸드, 주목도 기반 페널티, 토큰 1종 통합, 상점/규약 재작성)을 평택 로컬 체크아웃에서 전체 재구현했다. 그 과정에서 라운드/회기 구조를 오해해서 잘못 반영했던 부분을 다시 고쳤다. **데이터** - cards.csv 43개 선택지, pollution_pool.csv 재매핑 — 등급 1·3 공백을 없애고 1~10 전 구간을 채움 (평균 등급 4.14, 8결재 기준 예상 주목도 33) - pollution_pool.csv에 등급 1·3 전용 오염 카드 8개 신규 추가 (축별 2개) **게임 루프** - 라운드/회기 이층 구조 도입 → 원래 의도(라운드마다 정산·의회를 거치는 것)와 어긋난 오해로 판명, 단일 라운드 구조로 환원 - 라운드 종료 조건을 "결재 8건 고정"에서 블랙잭식 하드 캡으로 교체 — 주목도가 라운드 한도(21 + 라운드당 +5)를 넘으면 합본 기회 없이 즉시 강제 종료(버스트), 한도 밑에서는 "정산하기"로 언제든 자율 종료 가능 - CouncilScreen: 징벌 규약 5개 초과 시 목록 접기/펼치기 (§9.2 UI 요건) **문서 체계** - CLAUDE.md: 흩어진 기획 문서 7종 참조를 코어시스템 기획서 단일 참조(§ 매핑 포함)로 교체, Phase 진행 표 폐지 후 §17 체크박스를 진행 상황 원본으로 지정 - CLAUDE.md에 "결정 노트" 규칙 신설 — T-decision.md 양식 + DEVLOG 위키링크 연동 - docs/DEVLOG.md 신규 작성 (구 버전은 old/2026.09.04/ 보관) - 결정 노트 2건 작성: 등급확장-주목도시스템, 라운드-주목도-하드캡-복원 - ProjectSS_코어시스템_기획서.md §2/§4.2-B/§17/§19/§20을 현재 결정에 맞게 갱신 Playwright로 등급 1·3 카드 실등장, 라운드 번호 증가, 주목도 초과 시 버스트→ 상점 강제 전환까지 실제 브라우저에서 확인. 콘솔 에러 0건. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
254 lines
4.5 KiB
CSS
254 lines
4.5 KiB
CSS
.council-screen {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 16px;
|
|
padding: 20px;
|
|
max-width: 560px;
|
|
margin: 0 auto;
|
|
width: 100%;
|
|
overflow-y: auto;
|
|
font-family: var(--font-ui);
|
|
}
|
|
|
|
.council-screen h2 {
|
|
font-family: var(--font-doc-title);
|
|
margin: 0;
|
|
}
|
|
|
|
.council-screen h3 {
|
|
font-size: 13px;
|
|
margin: 0 0 8px;
|
|
opacity: 0.75;
|
|
font-family: var(--font-typewriter);
|
|
}
|
|
|
|
.council-audit {
|
|
background: var(--color-surface);
|
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
border-radius: 8px;
|
|
padding: 14px;
|
|
}
|
|
|
|
.council-audit-row {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
font-family: var(--font-typewriter);
|
|
font-size: 14px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.audit-met { color: var(--color-token-budget); }
|
|
.audit-short { color: var(--color-risk-critical); }
|
|
|
|
.council-audit-breakdown {
|
|
font-size: 11px;
|
|
opacity: 0.6;
|
|
margin: 6px 0 12px;
|
|
}
|
|
|
|
.council-token-pay {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
flex-wrap: wrap;
|
|
font-family: var(--font-typewriter);
|
|
font-size: 12px;
|
|
background: rgba(255, 255, 255, 0.04);
|
|
padding: 6px 10px;
|
|
border-radius: 5px;
|
|
}
|
|
|
|
.council-token-pay button {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
border: none;
|
|
color: var(--color-text);
|
|
width: 22px;
|
|
height: 22px;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.council-token-pay button:disabled {
|
|
opacity: 0.3;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
.council-token-committed {
|
|
min-width: 14px;
|
|
text-align: center;
|
|
color: var(--color-token-budget);
|
|
}
|
|
|
|
.council-token-note {
|
|
opacity: 0.5;
|
|
font-size: 11px;
|
|
}
|
|
|
|
.council-penalties {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.council-penalty-chip {
|
|
font-size: 12px;
|
|
padding: 6px 10px;
|
|
background: rgba(255, 68, 68, 0.08);
|
|
border: 1px solid rgba(255, 68, 68, 0.25);
|
|
border-radius: 5px;
|
|
color: var(--color-risk-critical);
|
|
}
|
|
|
|
.council-penalty-chip.targetable {
|
|
cursor: pointer;
|
|
outline: 1px dashed var(--color-risk-critical);
|
|
}
|
|
|
|
.council-penalty-more {
|
|
align-self: flex-start;
|
|
background: transparent;
|
|
border: none;
|
|
color: var(--color-text);
|
|
opacity: 0.6;
|
|
font-size: 11px;
|
|
font-family: var(--font-typewriter);
|
|
cursor: pointer;
|
|
padding: 2px 0;
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.council-justifications {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
}
|
|
|
|
.council-empty {
|
|
font-size: 12px;
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.council-justification-item {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
flex-wrap: wrap;
|
|
background: rgba(255, 255, 255, 0.03);
|
|
padding: 8px;
|
|
border-radius: 6px;
|
|
}
|
|
|
|
.justification-badge {
|
|
font-family: var(--font-typewriter);
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
padding: 2px 8px;
|
|
border-radius: 10px;
|
|
background: rgba(255, 255, 255, 0.08);
|
|
}
|
|
|
|
.justification-partial {
|
|
font-size: 10px;
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.council-justification-item button {
|
|
font-family: var(--font-typewriter);
|
|
font-size: 11px;
|
|
background: transparent;
|
|
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
color: var(--color-text);
|
|
border-radius: 4px;
|
|
padding: 4px 8px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.council-justification-item button:hover {
|
|
border-color: var(--color-token-budget);
|
|
}
|
|
|
|
.council-justification-item button:disabled {
|
|
opacity: 0.35;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
.council-pending-hint {
|
|
font-size: 11px;
|
|
color: var(--color-risk-critical);
|
|
}
|
|
|
|
.council-cancel-btn {
|
|
margin-left: 8px;
|
|
background: transparent;
|
|
border: 1px solid rgba(255, 255, 255, 0.25);
|
|
color: var(--color-text);
|
|
border-radius: 4px;
|
|
padding: 2px 8px;
|
|
font-size: 10px;
|
|
cursor: pointer;
|
|
font-family: var(--font-typewriter);
|
|
}
|
|
|
|
.council-candidates {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
}
|
|
|
|
.council-pool {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
}
|
|
|
|
.council-candidate {
|
|
background: var(--color-surface);
|
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
border-radius: 6px;
|
|
padding: 10px 12px;
|
|
}
|
|
|
|
.council-candidate.targetable {
|
|
cursor: pointer;
|
|
outline: 1px dashed var(--color-token-info);
|
|
}
|
|
|
|
.council-candidate.removed {
|
|
opacity: 0.4;
|
|
text-decoration: line-through;
|
|
}
|
|
|
|
.council-candidate.forced {
|
|
border-color: var(--color-token-budget);
|
|
}
|
|
|
|
.candidate-name {
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.candidate-flavor {
|
|
font-size: 11px;
|
|
opacity: 0.6;
|
|
margin-top: 3px;
|
|
}
|
|
|
|
.council-deferred-note {
|
|
font-size: 12px;
|
|
opacity: 0.7;
|
|
}
|
|
|
|
.council-confirm-btn {
|
|
font-family: var(--font-typewriter);
|
|
background: var(--color-token-info);
|
|
color: #fff;
|
|
border: none;
|
|
border-radius: 6px;
|
|
padding: 12px;
|
|
font-weight: 700;
|
|
cursor: pointer;
|
|
font-size: 14px;
|
|
margin-top: 4px;
|
|
}
|