fix(spreadsheet): 어두운 테마에서 글자가 검정으로 남던 메뉴 · 팝업을 테마 토큰으로

브레인 지시로 M02 면적산출(SA01010100) · 재료산출(SM01010100) 화면의 메뉴 · 팝업을 ORCA eval 로
전수로 열어 글자색 대 실제 바탕색 대비를 잼(투명이면 조상으로 올라가 겹침 · 4.5 미만 + 어두운
테마에서 흰 바탕 폼 칸 표시). 원인은 color 를 안 준 브라우저 기본 색(button · input · textarea)과
없는 토큰 · 검정 고정.
- spreadsheet.css: 서식 붓 단추(.ss-brush · 서식… 붓 ↑ ↓ 필터 Σ 데이터 ▾) · 찾기/바꾸기 입력 ·
  찾기 단추 · 메모 · 골라 붙여넣기 단추 · 목록 ▼ 단추에 color 를 줌 · 주소 상자(.ss-addr) ·
  수식 입력줄(.ss-formula)은 흰 바탕 · 검정 글이던 것을 투명 바탕 · 글 상속으로
- spreadsheet_links.css: 자재 찾기 입력 바탕 · 글 토큰
- spreadsheet_toolbar.css: 시트 탭 이름 바꾸기 입력 · select 의 option 바탕 · 글 토큰
- spreadsheet_sortfilter.css · spreadsheet_analysis.css · spreadsheet_links.css: 정의 안 된
  --color-surface-sunken(마우스 올림 바탕이 안 나오던 것)을 --color-mist-violet 로(색 줄만 ·
  주인 A · D 파일이라 최소로)
- spreadsheet_sortfilter.css: 정렬 창 select 의 option 바탕 · 글 토큰
- spreadsheet_format_dialog.ts: 글꼴 미리보기 글자색 · 테두리 미리보기 기본 선색이 검정 고정이던 것을
  「자동」(검정 · windowtext · auto)이면 테마 글자색으로(isAutoInk 재사용)
- spreadsheet_data_tools.ts: 텍스트 나누기 · 연속 채우기 창의 select 두 곳에 ss-toolbar__select 를 붙여
  흰 바탕 · 검정 글이던 것을 테마로

ORCA(IP http://100.72.32.27:5181 · 전환 애니메이션 끄고 잼) — 어두운 테마: 기본 화면 · 셀/행 머리/열 머리
우클릭 메뉴 · 데이터 메뉴와 하위 · 조건부 서식 · 유효성 · 이름 관리 · 정렬 · 텍스트 나누기 · 중복 제거 ·
연속 채우기 · 칸 넣기/지우기 · 이동 · 셀 서식 창 여섯 탭 · 찾기/바꾸기 · 수식 편집 + 함수 자동완성 ·
메모 창 · 단위 · 테두리 패널 · 자재 알약 찾기 · 자동 필터 값 목록 · 풍선 · 붙여넣기 선택 · 유효성 목록 ·
오류 ⚠ 메뉴 · 수식 계산 · 알림, SM · SA 두 시트 모두 대비 4.5 미만 · 흰 바탕 폼 칸 0 건(고치기 전에는
서식 붓 계열 7 개가 글 rgb(0,0,0) 대 바탕 rgb(37,31,56) 대비 1.33 등). 밝은 테마도 같은 목록으로
재서 새로 깨진 곳 없음(남은 것은 --color-text-muted 가 밝은 테마 바탕에서 3.08 인 기존 토큰 값).
css 8KB 한도: 가장 큰 spreadsheet_toolbar.css 7432 바이트.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9YEkMnYQnNnRZRPXoxFsw
This commit is contained in:
2026-09-28 19:42:25 +09:00
co-authored by Claude Sonnet 5
parent 1c371fca85
commit 2d70be32ea
7 changed files with 33 additions and 5 deletions
+11
View File
@@ -29,6 +29,8 @@
padding: 0 6px;
border: none;
border-right: 1px solid var(--color-border);
background: transparent;
color: inherit;
font: inherit;
outline: none;
}
@@ -50,6 +52,8 @@
padding: 4px 6px;
border: none;
border-left: 1px solid var(--color-border);
background: transparent;
color: inherit;
font: inherit;
line-height: 18px;
white-space: pre;
@@ -117,6 +121,7 @@
border: none;
border-right: 1px solid var(--color-border);
background: none;
color: inherit;
font: inherit;
cursor: pointer;
}
@@ -163,6 +168,8 @@
width: 180px;
padding: 2px 6px;
border: 1px solid var(--color-border);
background: var(--color-surface-raised);
color: var(--color-text-body);
font: inherit;
}
@@ -171,6 +178,7 @@
border: 1px solid var(--color-border);
border-radius: 4px;
background: var(--color-surface);
color: var(--color-text-body);
font: inherit;
cursor: pointer;
}
@@ -196,6 +204,7 @@
padding: 4px 6px;
border: 1px solid var(--color-warning);
background: color-mix(in srgb, var(--color-warning) 15%, var(--color-surface-raised));
color: var(--color-text-body);
font: inherit;
white-space: pre-wrap;
box-shadow: var(--shadow-sm);
@@ -222,6 +231,7 @@
padding: 2px 8px;
border: 1px solid var(--color-border);
background: var(--color-surface);
color: var(--color-text-body);
font: inherit;
cursor: pointer;
}
@@ -298,6 +308,7 @@
padding: 0;
border: 1px solid var(--color-border);
background: var(--color-surface);
color: var(--color-text-body);
font-size: 9px;
cursor: pointer;
}
@@ -183,5 +183,5 @@
}
.ss-errtip__item:hover {
background: var(--color-surface-sunken);
background: var(--color-mist-violet);
}
@@ -168,6 +168,7 @@ export function openTextToColumnsDialog(ctx: SpreadsheetContext): void {
let breaksText = "";
const modeSelect = el("select", {
className: "ss-toolbar__select",
children: [
el("option", { attrs: { value: "구분" }, text: TEXT.byDelimiter }),
el("option", { attrs: { value: "고정" }, text: TEXT.byFixedWidth }),
@@ -394,6 +395,7 @@ export function openFillSeriesDialog(ctx: SpreadsheetContext): void {
let stop: number | null = null;
const dirSelect = el("select", {
className: "ss-toolbar__select",
children: [
el("option", { attrs: { value: "열" }, text: TEXT.down }),
el("option", { attrs: { value: "행" }, text: TEXT.right }),
@@ -22,6 +22,7 @@ import {
type Category,
type NegStyle,
} from "./spreadsheet_format_code";
import { isAutoInk } from "./spreadsheet_cellstyle";
import { formatValue } from "./spreadsheet_numfmt";
import type { BorderLine, BorderSide, CellStyle, HAlign, VAlign } from "./spreadsheet_types";
import type { SpreadsheetContext } from "./spreadsheet_view_types";
@@ -87,7 +88,7 @@ function row(label: string, ...controls: HTMLElement[]): HTMLElement {
function borderCss(side?: BorderSide): string {
if (!side) return "none";
const color = side.색 ?? "#000000";
const color = isAutoInk(side.색) ? "var(--color-text-body)" : (side.색 as string);
const width = side.선 === "medium" ? 2 : side.선 === "thick" || side.선 === "double" ? 3 : 1;
const style = side.선 === "hair" ? "dotted" : side.선 === "double" ? "double" : side.선;
return `${width}px ${style} ${color}`;
@@ -302,7 +303,7 @@ export function openFormatDialog(ctx: SpreadsheetContext): void {
]
.filter(Boolean)
.join(" ");
sample.style.color = colorInput.value;
sample.style.color = isAutoInk(colorInput.value) ? "" : colorInput.value;
}
nameInput.addEventListener("input", () => {
draft.글꼴 = nameInput.value || undefined;
+3 -1
View File
@@ -77,6 +77,8 @@
padding: 4px 6px;
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
background: var(--color-canvas);
color: var(--color-text-body);
font: inherit;
}
@@ -101,7 +103,7 @@
}
.ss-links__row:hover {
background: var(--color-surface-sunken);
background: var(--color-mist-violet);
}
.ss-links__note {
@@ -55,6 +55,11 @@
color: inherit;
}
.ss-sort__row option {
background: var(--color-canvas);
color: var(--color-text-body);
}
.ss-sort__foot,
.ss-filter__foot {
justify-content: flex-end;
@@ -124,5 +129,5 @@
}
.ss-filter__link:hover {
background: var(--color-surface-sunken);
background: var(--color-mist-violet);
}
@@ -47,6 +47,11 @@
font-size: 0.8rem;
}
.ss-toolbar__select option {
background: var(--color-canvas);
color: var(--color-text-body);
}
.ss-toolbar__input {
height: 28px;
width: 72px;
@@ -221,6 +226,8 @@
width: 96px;
border: 1px solid var(--color-focus-ring);
border-radius: var(--radius-sm);
background: var(--color-canvas);
color: var(--color-text-body);
font: inherit;
}