Files
Aislo/A00_Common/spreadsheet/spreadsheet_toolbar.css
eomsangdonandClaude Sonnet 5 2d70be32ea 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
2026-09-28 19:42:25 +09:00

325 lines
6.9 KiB
CSS

/* =============================================================================
* spreadsheet_toolbar.css (주인 E)
* 도구 모음 · 시트 탭 · 우클릭 메뉴 · 클립보드 안내 토스트 — 화면 스타일 한 벌.
* 색 · 간격은 테마 토큰만(`ui_template_theme.css`).
* ========================================================================== */
.ss-toolbar {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: var(--spacing-8);
padding: var(--spacing-4) var(--spacing-8);
border-bottom: 1px solid var(--color-border);
background: var(--color-surface);
}
.ss-toolbar__group {
position: relative;
display: flex;
align-items: center;
gap: var(--spacing-4);
padding-right: var(--spacing-8);
border-right: 1px solid var(--color-border);
}
.ss-toolbar__group:last-child {
border-right: 0;
}
.ss-toolbar .ui-btn {
padding: 4px 8px;
font-size: 0.82rem;
}
.ss-toolbar .ui-btn.is-on {
background: var(--color-mist-violet);
box-shadow: inset 0 0 0 1px var(--color-royal-amethyst);
}
.ss-toolbar__select {
height: 28px;
padding: 0 4px;
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
background: var(--color-canvas);
color: var(--color-text-body);
font-size: 0.8rem;
}
.ss-toolbar__select option {
background: var(--color-canvas);
color: var(--color-text-body);
}
.ss-toolbar__input {
height: 28px;
width: 72px;
padding: 0 4px;
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
background: var(--color-canvas);
color: var(--color-text-body);
font-size: 0.8rem;
}
.ss-toolbar__input--font {
width: 96px;
}
.ss-toolbar__input--size {
width: 48px;
}
.ss-toolbar__input--numfmt {
width: 140px;
}
.ss-toolbar__color {
width: 22px;
height: 22px;
padding: 0;
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
background: none;
cursor: pointer;
}
.ss-toolbar__clear {
padding: 0 4px;
border: 0;
background: none;
color: var(--color-text-muted);
font-size: 0.72rem;
cursor: pointer;
}
.ss-toolbar__popover {
position: absolute;
z-index: var(--z-dropdown);
display: flex;
flex-direction: column;
gap: var(--spacing-8);
min-width: 180px;
padding: var(--spacing-8);
border: 1px solid var(--color-border);
border-radius: var(--radius-cards);
background: var(--color-surface-raised);
box-shadow: var(--shadow-lg);
}
.ss-toolbar__popover[hidden] {
display: none;
}
.ss-toolbar__popover-row {
display: flex;
align-items: center;
gap: var(--spacing-4);
}
.ss-toolbar__popover-presets {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--spacing-4);
}
.ss-toolbar__unit-pop {
max-height: 340px;
overflow-y: auto;
}
.ss-toolbar__unit-section + .ss-toolbar__unit-section {
margin-top: var(--spacing-8);
}
.ss-toolbar__unit-label {
margin-bottom: var(--spacing-4);
color: var(--color-text-muted);
font-size: 0.72rem;
}
.ss-toolbar__unit-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: var(--spacing-4);
}
.ss-toolbar__unit-btn {
min-width: 0;
padding: 4px 2px;
}
.ss-toolbar__hint {
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 2px;
margin-left: auto;
max-width: 320px;
}
.ss-toolbar__formula-hint {
border: 0;
padding: 0;
background: none;
color: var(--color-text-muted);
font-size: 0.72rem;
text-align: right;
opacity: 0.6;
cursor: pointer;
}
.ss-toolbar__formula-hint:hover {
opacity: 1;
}
.ss-toolbar__formula-hint-detail {
color: var(--color-text-muted);
font-size: 0.68rem;
text-align: right;
}
.ss-toolbar__formula-hint-detail[hidden] {
display: none;
}
/* ── 시트 탭 ─────────────────────────────────────────────────────────────── */
.ss-tabs {
position: relative;
display: flex;
align-items: center;
gap: 2px;
overflow-x: auto;
padding: var(--spacing-4) var(--spacing-8);
border-bottom: 1px solid var(--color-border);
background: var(--color-surface);
}
.ss-tabs__tab {
display: flex;
align-items: center;
gap: var(--spacing-4);
padding: 4px 10px;
border: 1px solid var(--color-border);
border-bottom: 0;
border-radius: var(--radius-sm) var(--radius-sm) 0 0;
background: var(--color-paper);
color: var(--color-text-secondary);
font-size: 0.82rem;
white-space: nowrap;
cursor: pointer;
}
.ss-tabs__tab.is-active {
background: var(--color-canvas);
color: var(--color-text-body);
font-weight: 600;
}
.ss-tabs__tab.is-dragover {
box-shadow: inset 2px 0 0 var(--color-accent);
}
.ss-tabs__tab input {
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;
}
.ss-tabs__add {
padding: 2px 8px;
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
background: var(--color-canvas);
color: var(--color-text-secondary);
cursor: pointer;
}
/* ── 우클릭 메뉴(그리드 · 탭 공용, `ui_template_context_menu.ts`) ───────────── */
.ss__context-menu {
position: absolute;
z-index: var(--z-dropdown);
display: flex;
flex-direction: column;
min-width: 160px;
padding: var(--spacing-4);
border: 1px solid var(--color-border);
border-radius: var(--radius-cards);
background: var(--color-surface-raised);
box-shadow: var(--shadow-lg);
}
.ss__context-menu[hidden] {
display: none;
}
.ss__context-menu-item {
padding: var(--spacing-8) var(--spacing-12);
border: 0;
border-radius: var(--radius-sm);
background: transparent;
color: var(--color-text-body);
font-size: 13px;
text-align: left;
cursor: pointer;
}
.ss__context-menu-item:hover {
background: var(--color-surface-sunken, var(--color-mist-violet));
}
.ss__context-menu-item.is-danger {
color: var(--color-danger);
}
.ss__context-menu-sep {
margin: 2px 4px;
border-top: 1px solid var(--color-border);
}
/* ── 메모 편집 창(칸 우클릭 [메모 삽입 · 편집]) ──────────────────────────────── */
.ss-comment-editor {
position: fixed;
inset: 0;
z-index: var(--z-modal);
display: flex;
align-items: center;
justify-content: center;
background: rgb(0 0 0 / 35%);
}
.ss-comment-editor__panel {
display: flex;
flex-direction: column;
gap: var(--spacing-8);
width: 280px;
padding: var(--spacing-16);
border-radius: var(--radius-cards);
background: var(--color-surface-raised);
box-shadow: var(--shadow-lg);
}
.ss-comment-editor__input {
min-height: 80px;
padding: var(--spacing-8);
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
background: var(--color-canvas);
color: var(--color-text-body);
font: inherit;
resize: vertical;
}
.ss-comment-editor__actions {
display: flex;
justify-content: flex-end;
gap: var(--spacing-8);
}