Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D2nUMUMTsqm93PbQtipo6c
312 lines
6.2 KiB
CSS
312 lines
6.2 KiB
CSS
.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);
|
|
}
|