434 lines
9.9 KiB
CSS
434 lines
9.9 KiB
CSS
@import "tailwindcss";
|
|
/* 색 토큰의 정의처는 앱과 같은 파일 하나 — 여기서 색을 새로 정하지 않는다. */
|
|
@import "../../../ui_template/ui_template_theme.css";
|
|
|
|
:root {
|
|
/* 제목줄 없음(요구 280-6) — 칸들이 이 변수로 자리 잡아 0 으로 둠 */
|
|
--cad-title-height: 0px;
|
|
/* 116px 에서는 리본 줄의 내용(85px)이 보이는 높이(81px)를 넘어 세로 스크롤바가
|
|
생겼다(2026-09-04 실측) — 모자란 4px + 여유 2px 를 더한다. */
|
|
--cad-ribbon-height: 122px;
|
|
/* 명령행 높이 — 상태막대의 [명령행] 토글이 0px로 바꾼다 */
|
|
--cad-command-height: 86px;
|
|
--cad-status-height: 28px;
|
|
/* 도면층 한 행에 아이콘 6개와 이름이 함께 들어가는 폭. 248px에서는 이름 몫이
|
|
21px밖에 남지 않아 글자가 뭉개졌다(2026-09-01 실측). */
|
|
--cad-panel-width: 300px;
|
|
font-family: var(--font-body);
|
|
color: var(--color-text-body);
|
|
background: var(--color-bg);
|
|
|
|
/* CAD 표면 단계 — 앱 토큰을 CAD 골격(툴바·리본·패널)에 이름만 붙여 쓴다. */
|
|
--cad-chrome: var(--color-surface);
|
|
--cad-chrome-raised: var(--color-surface-raised);
|
|
--cad-chrome-sunken: var(--color-bg);
|
|
--cad-line: var(--color-border);
|
|
--cad-text: var(--color-text-body);
|
|
--cad-text-dim: var(--color-text-secondary);
|
|
--cad-text-muted: var(--color-text-muted);
|
|
--cad-accent: var(--color-accent);
|
|
--cad-hover: var(--color-mist-violet);
|
|
--cad-canvas: var(--color-canvas);
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
html,
|
|
body,
|
|
#root {
|
|
width: 100%;
|
|
height: 100%;
|
|
margin: 0;
|
|
overflow: hidden;
|
|
}
|
|
button,
|
|
input {
|
|
font: inherit;
|
|
}
|
|
button {
|
|
color: inherit;
|
|
}
|
|
|
|
.cad-app {
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: 2;
|
|
pointer-events: none;
|
|
}
|
|
.cad-bare {
|
|
--cad-status-height: 0px;
|
|
}
|
|
.controls {
|
|
pointer-events: auto;
|
|
}
|
|
|
|
body > canvas[data-id="canvas"] {
|
|
position: fixed;
|
|
z-index: 1;
|
|
top: calc(var(--cad-title-height) + var(--cad-ribbon-height));
|
|
right: 0;
|
|
bottom: calc(var(--cad-command-height) + var(--cad-status-height));
|
|
left: var(--cad-panel-width);
|
|
width: calc(100vw - var(--cad-panel-width));
|
|
height: calc(
|
|
100dvh -
|
|
var(--cad-title-height) -
|
|
var(--cad-ribbon-height) -
|
|
var(--cad-command-height) -
|
|
var(--cad-status-height)
|
|
);
|
|
background: var(--cad-canvas);
|
|
cursor: none;
|
|
}
|
|
|
|
.cad-ribbon {
|
|
position: fixed;
|
|
top: var(--cad-title-height);
|
|
right: 0;
|
|
left: 0;
|
|
height: var(--cad-ribbon-height);
|
|
display: flex;
|
|
flex-direction: column;
|
|
background: var(--cad-chrome-raised);
|
|
border-bottom: 1px solid var(--cad-line);
|
|
transition: height 120ms ease;
|
|
}
|
|
/* 접힘 모드에서 탭으로 잠깐 펼침 — 도면 자리는 그대로 두고 위에 겹쳐 뜸(122px = 펼친 리본 높이) */
|
|
.cad-ribbon[data-peek="true"] {
|
|
z-index: 10;
|
|
height: 122px;
|
|
box-shadow: var(--shadow-lg);
|
|
}
|
|
.cad-ribbon-tabs {
|
|
display: flex;
|
|
gap: 2px;
|
|
height: 26px;
|
|
padding: 0 8px;
|
|
border-bottom: 1px solid var(--color-smoke);
|
|
}
|
|
.cad-ribbon-tabs__slot {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
.cad-ribbon-tabs__collapse {
|
|
width: 24px;
|
|
height: 20px;
|
|
align-self: center;
|
|
padding: 0;
|
|
border: 1px solid transparent;
|
|
border-radius: 4px;
|
|
background: transparent;
|
|
color: var(--cad-text-dim);
|
|
font-size: 11px;
|
|
}
|
|
.cad-ribbon-tabs__collapse:hover {
|
|
background: var(--cad-hover);
|
|
}
|
|
.cad-ribbon-tabs button {
|
|
padding: 0 14px;
|
|
border: 1px solid transparent;
|
|
border-bottom: 0;
|
|
border-radius: 4px 4px 0 0;
|
|
background: transparent;
|
|
color: var(--cad-text-dim);
|
|
font-size: 12px;
|
|
}
|
|
.cad-ribbon-tabs button:hover {
|
|
background: var(--cad-hover);
|
|
}
|
|
.cad-ribbon-tabs button[data-active="true"] {
|
|
background: var(--cad-chrome);
|
|
border-color: var(--cad-line);
|
|
color: var(--color-text);
|
|
}
|
|
.cad-ribbon-panels {
|
|
display: flex;
|
|
flex: 1;
|
|
align-items: stretch;
|
|
padding: 4px 8px 2px;
|
|
overflow-x: auto;
|
|
overflow-y: visible;
|
|
}
|
|
.cad-ribbon-group {
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-width: max-content;
|
|
padding: 0 9px;
|
|
border-right: 1px solid var(--cad-line);
|
|
}
|
|
.cad-ribbon-tools {
|
|
display: flex;
|
|
gap: 3px;
|
|
align-items: flex-start;
|
|
height: 66px;
|
|
}
|
|
.cad-ribbon-tools__grid {
|
|
display: grid;
|
|
grid-template-rows: 1fr 1fr;
|
|
grid-auto-flow: column;
|
|
gap: 1px;
|
|
}
|
|
.cad-ribbon-group__label {
|
|
margin-top: auto;
|
|
padding: 0;
|
|
border: 0;
|
|
background: transparent;
|
|
color: var(--cad-text-muted);
|
|
font-size: 10px;
|
|
text-align: center;
|
|
}
|
|
.cad-ribbon-group__label[data-expandable="true"] {
|
|
cursor: pointer;
|
|
}
|
|
.cad-ribbon-group__label[data-expandable="true"]:hover {
|
|
color: var(--cad-accent);
|
|
}
|
|
.cad-ribbon-overflow {
|
|
/* 리본 패널 줄이 가로 스크롤 상자라 그 안에서는 잘린다 — 화면 좌표로 띄운다 */
|
|
position: fixed;
|
|
z-index: 20;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-width: 170px;
|
|
max-height: 72vh;
|
|
padding: 4px;
|
|
overflow-y: auto;
|
|
background: var(--cad-chrome-raised);
|
|
border: 1px solid var(--cad-line);
|
|
border-radius: 4px;
|
|
box-shadow: var(--shadow-lg);
|
|
}
|
|
.cad-ribbon-overflow button {
|
|
display: flex;
|
|
gap: 8px;
|
|
align-items: center;
|
|
padding: 5px 8px;
|
|
border: 0;
|
|
border-radius: 3px;
|
|
background: transparent;
|
|
font-size: 11px;
|
|
text-align: left;
|
|
}
|
|
.cad-ribbon-overflow button:hover {
|
|
background: var(--cad-hover);
|
|
}
|
|
.cad-quick-access {
|
|
display: flex;
|
|
gap: 2px;
|
|
align-self: center;
|
|
}
|
|
.cad-ribbon-tabs .cad-quick-access button {
|
|
width: 24px;
|
|
height: 20px;
|
|
padding: 0;
|
|
border: 1px solid transparent;
|
|
border-radius: 4px;
|
|
line-height: 1;
|
|
font-size: 13px;
|
|
}
|
|
.cad-quick-access button:hover {
|
|
border-color: var(--cad-line);
|
|
background: var(--cad-hover);
|
|
}
|
|
.cad-ribbon-props {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 3px;
|
|
align-items: stretch;
|
|
justify-content: flex-start;
|
|
}
|
|
/* 위젯 패널은 한 줄에 라벨+입력을 놓고 세로로 쌓는다 (리본 높이 안에 들어가야 한다) */
|
|
.cad-prop {
|
|
display: flex;
|
|
flex-direction: row;
|
|
gap: 6px;
|
|
align-items: center;
|
|
font-size: 10px;
|
|
color: var(--cad-text-muted);
|
|
}
|
|
.cad-prop > span {
|
|
width: 52px;
|
|
text-align: left;
|
|
}
|
|
.cad-prop select,
|
|
.cad-prop input[type="number"] {
|
|
height: 19px;
|
|
min-width: 78px;
|
|
padding: 0 3px;
|
|
color: var(--cad-text);
|
|
background: var(--cad-chrome-sunken);
|
|
border: 1px solid var(--cad-line);
|
|
border-radius: 3px;
|
|
font-size: 11px;
|
|
}
|
|
.cad-prop input[type="number"] {
|
|
min-width: 52px;
|
|
width: 52px;
|
|
}
|
|
.cad-prop input[type="color"] {
|
|
height: 19px;
|
|
width: 44px;
|
|
padding: 1px;
|
|
background: var(--cad-chrome-sunken);
|
|
/* 흰색을 골라도 스와치 자리가 보이게 테두리를 진하게 준다 (2026-09-01) */
|
|
border: 1px solid var(--cad-text-muted);
|
|
border-radius: 3px;
|
|
cursor: pointer;
|
|
}
|
|
/* 고른 것들 색이 다름(488) — 빈 견본(투명 · 점선 테두리) */
|
|
input[type="color"][data-mixed="true"]::-webkit-color-swatch { background: transparent !important; border: 1px dashed var(--cad-text-muted); }
|
|
/* 위젯 패널 안의 작은 명령 버튼은 한 줄 높이에 맞춘다 */
|
|
.cad-ribbon-props .cad-tool[data-size="small"] {
|
|
height: 22px;
|
|
min-width: 0;
|
|
}
|
|
.cad-tool {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 2px;
|
|
min-width: 48px;
|
|
padding: 3px 6px;
|
|
border: 1px solid transparent;
|
|
border-radius: 3px;
|
|
background: transparent;
|
|
font-size: 10px;
|
|
white-space: nowrap;
|
|
}
|
|
.cad-tool[data-size="big"] {
|
|
min-width: 58px;
|
|
height: 66px;
|
|
}
|
|
.cad-tool[data-size="big"] .cad-tool__glyph {
|
|
height: 32px;
|
|
font-size: 26px;
|
|
line-height: 32px;
|
|
}
|
|
.cad-tool[data-size="small"] {
|
|
flex-direction: row;
|
|
justify-content: flex-start;
|
|
gap: 4px;
|
|
min-width: 78px;
|
|
height: 32px;
|
|
padding: 0 5px;
|
|
}
|
|
.cad-tool[data-size="small"] .cad-tool__glyph {
|
|
height: auto;
|
|
font-size: 15px;
|
|
line-height: 1;
|
|
}
|
|
/* 켜짐 = 테두리 + 바탕 + 밑줄 · 스침 = 바탕만(마우스 기기만) — 켜진 단추가 늘 하나로 보이게(487) */
|
|
@media (hover: hover) {
|
|
.cad-tool:hover:not(:disabled) {
|
|
background: var(--cad-hover);
|
|
}
|
|
}
|
|
.cad-tool[data-active="true"] {
|
|
border-color: var(--cad-accent);
|
|
background: var(--cad-hover);
|
|
box-shadow: inset 0 -2px var(--cad-accent);
|
|
}
|
|
.cad-tool:disabled {
|
|
color: var(--color-smoke);
|
|
cursor: not-allowed;
|
|
}
|
|
.cad-tool__glyph {
|
|
height: 27px;
|
|
color: var(--cad-accent);
|
|
font-size: 22px;
|
|
line-height: 27px;
|
|
}
|
|
.cad-tool:disabled .cad-tool__glyph {
|
|
color: var(--color-smoke);
|
|
}
|
|
|
|
.cad-inspector {
|
|
position: fixed;
|
|
z-index: 3;
|
|
top: calc(var(--cad-title-height) + var(--cad-ribbon-height));
|
|
/* 좌측 팔레트가 상위 — 명령행 토글에 높이가 흔들리지 않게 상태막대까지 내린다 */
|
|
bottom: var(--cad-status-height);
|
|
left: 0;
|
|
width: var(--cad-panel-width);
|
|
background: var(--cad-chrome);
|
|
border-right: 1px solid var(--cad-line);
|
|
transition: width 120ms ease;
|
|
}
|
|
.cad-inspector[data-collapsed="true"] {
|
|
width: 0;
|
|
}
|
|
.cad-inspector__collapse {
|
|
position: absolute;
|
|
z-index: 4;
|
|
top: 10px;
|
|
left: 100%;
|
|
width: 20px;
|
|
height: 38px;
|
|
border: 1px solid var(--cad-line);
|
|
border-left: 0;
|
|
border-radius: 0 4px 4px 0;
|
|
background: var(--cad-chrome-raised);
|
|
color: var(--cad-text-dim);
|
|
}
|
|
.cad-inspector-tabs {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
height: 38px;
|
|
border-bottom: 1px solid var(--cad-line);
|
|
}
|
|
.cad-inspector-tabs button {
|
|
border: 0;
|
|
border-bottom: 2px solid transparent;
|
|
background: var(--cad-chrome-sunken);
|
|
color: var(--cad-text-dim);
|
|
font-size: 12px;
|
|
}
|
|
.cad-inspector-tabs button[data-active="true"] {
|
|
border-bottom-color: var(--cad-accent);
|
|
background: var(--cad-chrome-raised);
|
|
color: var(--color-text);
|
|
}
|
|
.cad-properties {
|
|
padding: 14px 12px;
|
|
}
|
|
.cad-properties h2 {
|
|
margin: 0 0 14px;
|
|
color: var(--color-text);
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
}
|
|
.cad-properties dl {
|
|
margin: 0;
|
|
border-top: 1px solid var(--cad-line);
|
|
}
|
|
.cad-properties dl div {
|
|
display: grid;
|
|
grid-template-columns: 92px 1fr;
|
|
padding: 8px 0;
|
|
border-bottom: 1px solid var(--cad-line);
|
|
font-size: 11px;
|
|
}
|
|
.cad-properties dt {
|
|
color: var(--cad-text-dim);
|
|
}
|
|
.cad-properties dd {
|
|
margin: 0;
|
|
overflow: hidden;
|
|
color: var(--cad-text);
|
|
text-overflow: ellipsis;
|
|
}
|
|
.cad-layer-manager {
|
|
max-height: calc(100dvh - 250px);
|
|
padding: 9px;
|
|
overflow-y: auto;
|
|
overflow-x: hidden;
|
|
}
|
|
.cad-layer-manager button {
|
|
min-height: 36px;
|
|
padding-top: 6px;
|
|
padding-bottom: 6px;
|
|
}
|