- 추적 화살표(spreadsheet_trace.ts): 누를 때마다 한 단계 · 범위는 상자 · 오류 칸 화살 빨강 · 다른 시트 점선 · 지우기 - 수식 계산 창(spreadsheet_eval_steps.ts): 왼쪽부터 한 마디씩 값으로 · 밑줄 · IF 류 첫 인자만 먼저 · 값은 엔진 풀이 - 오류 검사(spreadsheet_errcheck.ts): 순환 · 식 오류 · 숫자처럼 보이는 글 까닭 · ⚠ 메뉴(숫자로 변환 · 계산 단계 · 선행 추적 · 오류 무시) - 격자 초록 세모는 C(sub6) · 잇기는 sub7 — 머리 주석에 잇는 법 - 엔진: evalSafe 내보냄 · formulaToText 에 갈음 · 밑줄 자리 · 계약 파일 목록 줄만 더함 - 시험: test_spreadsheet_analysis.py(3 묶음) · harness_analysis(ORCA) · 시험 틀은 inspect 로 문맥 꺼냄 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TULoa94ZFL26KU6ZqVpjkF
188 lines
3.6 KiB
CSS
188 lines
3.6 KiB
CSS
/* spreadsheet_analysis.css (주인 A) — 추적 화살표 겹판 · 수식 계산 창 · 오류 ⚠ 단추 */
|
|
|
|
/* 추적 화살표 — 크기 0 겹판(격자 조작을 막지 않음) */
|
|
.ss-trace {
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
width: 1px;
|
|
height: 1px;
|
|
overflow: visible;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.ss-trace__line {
|
|
stroke-width: 1.5;
|
|
}
|
|
|
|
.ss-trace__line.is-plain,
|
|
.ss-trace__dot.is-plain,
|
|
.ss-trace__head.is-plain {
|
|
stroke: var(--color-info);
|
|
fill: var(--color-info);
|
|
}
|
|
|
|
.ss-trace__line.is-error,
|
|
.ss-trace__dot.is-error,
|
|
.ss-trace__head.is-error {
|
|
stroke: var(--color-danger);
|
|
fill: var(--color-danger);
|
|
}
|
|
|
|
.ss-trace__line.is-sheet,
|
|
.ss-trace__dot.is-sheet,
|
|
.ss-trace__head.is-sheet {
|
|
stroke: var(--color-text-body);
|
|
fill: var(--color-text-body);
|
|
}
|
|
|
|
.ss-trace__line.is-sheet {
|
|
stroke-dasharray: 4 3;
|
|
}
|
|
|
|
.ss-trace__box {
|
|
fill: none;
|
|
stroke-width: 2;
|
|
stroke: var(--color-info);
|
|
}
|
|
|
|
.ss-trace__box.is-error {
|
|
stroke: var(--color-danger);
|
|
}
|
|
|
|
.ss-trace__sheet {
|
|
fill: var(--color-surface);
|
|
stroke: var(--color-text-body);
|
|
}
|
|
|
|
/* 수식 계산 창 */
|
|
.ss-steps {
|
|
position: absolute;
|
|
inset: 0;
|
|
z-index: var(--z-dropdown);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
background: rgb(0 0 0 / 18%);
|
|
}
|
|
|
|
.ss-steps__box {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: var(--spacing-8);
|
|
min-width: 420px;
|
|
max-width: 90%;
|
|
padding: var(--spacing-12);
|
|
background: var(--color-surface-raised);
|
|
color: var(--color-text-body);
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-cards);
|
|
box-shadow: var(--shadow-lg);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.ss-steps__title {
|
|
font-weight: 600;
|
|
}
|
|
|
|
.ss-steps__meta {
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
.ss-steps__text {
|
|
min-height: 60px;
|
|
padding: var(--spacing-8);
|
|
font-family: var(--font-mono, monospace);
|
|
white-space: pre-wrap;
|
|
word-break: break-all;
|
|
background: var(--color-canvas);
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-sm);
|
|
}
|
|
|
|
.ss-steps__foot {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
gap: var(--spacing-8);
|
|
}
|
|
|
|
/* 오류 ⚠ 단추 · 풍선 · 메뉴 */
|
|
.ss-errtip {
|
|
position: absolute;
|
|
z-index: var(--z-dropdown);
|
|
width: 0;
|
|
height: 0;
|
|
overflow: visible;
|
|
}
|
|
|
|
.ss-errtip__btn {
|
|
position: absolute;
|
|
width: 18px;
|
|
height: 18px;
|
|
padding: 0;
|
|
font-size: 11px;
|
|
line-height: 16px;
|
|
cursor: pointer;
|
|
color: var(--color-warning);
|
|
background: var(--color-surface);
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-sm);
|
|
}
|
|
|
|
.ss-errtip__balloon {
|
|
display: none;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 22px;
|
|
z-index: var(--z-dropdown);
|
|
width: max-content;
|
|
max-width: 320px;
|
|
padding: var(--spacing-4) var(--spacing-8);
|
|
font-size: 12px;
|
|
color: var(--color-text-body);
|
|
background: var(--color-surface-raised);
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-sm);
|
|
box-shadow: var(--shadow-lg);
|
|
}
|
|
|
|
.ss-errtip__btn:hover + .ss-errtip__balloon {
|
|
display: block;
|
|
}
|
|
|
|
.ss-errtip__menu {
|
|
position: absolute;
|
|
left: 0;
|
|
top: 22px;
|
|
z-index: var(--z-dropdown);
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-width: 200px;
|
|
max-width: 320px;
|
|
padding: var(--spacing-4);
|
|
font-size: 13px;
|
|
color: var(--color-text-body);
|
|
background: var(--color-surface-raised);
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-sm);
|
|
box-shadow: var(--shadow-lg);
|
|
}
|
|
|
|
.ss-errtip__head {
|
|
padding: var(--spacing-4);
|
|
font-weight: 600;
|
|
}
|
|
|
|
.ss-errtip__item {
|
|
padding: var(--spacing-4);
|
|
text-align: left;
|
|
color: inherit;
|
|
background: none;
|
|
border: none;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.ss-errtip__item:hover {
|
|
background: var(--color-surface-sunken);
|
|
}
|