@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; }