.m02-labordg { --dg-노무비: #2f9e8f; --dg-재료비: #d98a1d; --dg-경비: #8a63d2; --dg-값: #7a8699; display: flex; flex-direction: column; gap: var(--spacing-8); font-size: var(--text-body-sm); color: var(--color-text-body); } .m02-labordg__bar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-8); } .m02-labordg__zoom { min-width: 3em; font-weight: var(--font-weight-bold); } .m02-labordg__hint { color: var(--color-text-muted); } .m02-labordg__viewport { position: relative; height: clamp(320px, 62vh, 640px); border: 1px solid var(--color-border); border-radius: var(--radius-cards); background: var(--color-surface); overflow: hidden; cursor: default; } .m02-labordg__viewport.is-space, .m02-labordg__viewport.is-panning { cursor: grab; } .m02-labordg__viewport.is-panning { cursor: grabbing; } .m02-labordg__world { position: absolute; top: 0; left: 0; width: max-content; transform-origin: 0 0; } .m02-labordg__lines { position: absolute; top: 0; left: 0; pointer-events: none; } .m02-labordg__grid { position: relative; display: grid; column-gap: 0; row-gap: 0; padding: var(--spacing-16); } .m02-labordg__head { padding: var(--spacing-4) var(--spacing-8); font-weight: var(--font-weight-bold); } .m02-labordg__head.is-bin, .m02-labordg__cell { border-left: 2px solid var(--dg-노무비); border-right: 2px solid var(--dg-노무비); } .m02-labordg__head.is-bin { border-top: 2px solid var(--dg-노무비); border-radius: var(--radius-cards) var(--radius-cards) 0 0; text-align: center; background: color-mix(in srgb, var(--dg-노무비) 22%, var(--color-surface)); } .m02-labordg__cell { display: flex; flex-direction: column; justify-content: center; min-height: 4rem; padding: var(--spacing-4) var(--spacing-8); background: color-mix(in srgb, var(--dg-노무비) 8%, var(--color-surface)); border-bottom: 1px solid var(--color-border); } .m02-labordg__cell.is-total { border-bottom: 2px solid var(--dg-노무비); border-radius: 0 0 var(--radius-cards) var(--radius-cards); font-weight: var(--font-weight-bold); } .m02-labordg__cell.is-zero { opacity: 0.45; } .m02-labordg__cell-name { color: var(--color-text-secondary); } .m02-labordg__cell-amount { font-weight: var(--font-weight-bold); } .m02-labordg__head.is-재료비, .m02-labordg__cell.is-재료비 { border-color: var(--dg-재료비); } .m02-labordg__head.is-재료비 { background: color-mix(in srgb, var(--dg-재료비) 22%, var(--color-surface)); } .m02-labordg__cell.is-재료비 { background: color-mix(in srgb, var(--dg-재료비) 8%, var(--color-surface)); } .m02-labordg__head.is-경비, .m02-labordg__cell.is-경비 { border-color: var(--dg-경비); } .m02-labordg__head.is-경비 { background: color-mix(in srgb, var(--dg-경비) 22%, var(--color-surface)); } .m02-labordg__cell.is-경비 { background: color-mix(in srgb, var(--dg-경비) 8%, var(--color-surface)); } .m02-labordg__head.is-값, .m02-labordg__cell.is-값 { border-color: var(--dg-값); } .m02-labordg__head.is-값 { background: color-mix(in srgb, var(--dg-값) 22%, var(--color-surface)); } .m02-labordg__cell.is-값 { background: color-mix(in srgb, var(--dg-값) 8%, var(--color-surface)); } /* 넣을 값 묶음 */ .m02-labordg__group { display: flex; flex-direction: column; align-items: stretch; justify-content: center; gap: var(--spacing-4); padding: var(--spacing-8); min-width: 13rem; } .m02-labordg__pill { display: flex; justify-content: space-between; gap: var(--spacing-8); padding: 2px var(--spacing-8); border: 1px solid var(--color-border); border-radius: var(--radius-pills); background: var(--color-surface-raised); color: inherit; font: inherit; text-align: left; cursor: pointer; } .m02-labordg__pill.is-empty { border: 2px dashed var(--color-danger); } .m02-labordg__pill.is-empty .m02-labordg__pill-value { color: var(--color-danger); font-weight: var(--font-weight-bold); } .m02-labordg__pill-name { font-weight: var(--font-weight-medium); } .m02-labordg__pill:focus-visible, .m02-labordg__card:focus-visible { outline: 2px solid var(--color-focus-ring); } .m02-labordg__pill.is-hot { border-color: var(--color-primary); background: color-mix(in srgb, var(--color-primary) 18%, var(--color-surface)); } /* 로직 카드 — 둥근 카드 */ .m02-labordg__card { display: flex; flex-direction: column; align-self: center; gap: 2px; margin: var(--spacing-8) 0; padding: var(--spacing-8) var(--spacing-12); border: 2px solid var(--color-border); border-radius: 1.2rem; background: var(--color-surface-raised); color: inherit; font: inherit; text-align: left; cursor: pointer; } .m02-labordg__card:hover { border-color: var(--color-primary); } .m02-labordg__card.is-stop { border-style: dashed; border-color: var(--color-danger); } .m02-labordg__card-key { color: var(--color-text-muted); } .m02-labordg__card-name { font-size: var(--text-body); } .m02-labordg__card-unit { color: var(--color-text-secondary); } .m02-labordg__card-out { margin-top: 2px; font-weight: var(--font-weight-bold); } /* 선 */ .m02-labordg__wire { fill: none; stroke: var(--color-border); stroke-width: 2; } .m02-labordg__out { fill: none; stroke: var(--dg-노무비); stroke-width: 2.5; } .m02-labordg__out.is-재료비 { stroke: var(--dg-재료비); } .m02-labordg__out.is-경비 { stroke: var(--dg-경비); } .m02-labordg__out.is-값 { stroke: var(--dg-값); } .m02-labordg__out.is-zero { opacity: 0.2; } .m02-labordg__same { fill: none; stroke: var(--color-text-muted); stroke-width: 1.5; stroke-dasharray: 4 4; opacity: 0.55; } .m02-labordg__same.is-hot { stroke: var(--color-primary); stroke-width: 2.5; opacity: 1; } .m02-labordg__none { margin: var(--spacing-16); color: var(--color-text-muted); } /* 다이어그램에서 눌러 찾아온 미리 보기 입력 칸 */ .m02-labor__flash { outline: 3px solid var(--color-primary); outline-offset: 2px; animation: m02-labor-flash 0.4s ease-in-out 3; } @keyframes m02-labor-flash { 50% { outline-color: transparent; } } .m02-labor__dg > summary { cursor: pointer; font-weight: var(--font-weight-bold); }