507 lines
11 KiB
Plaintext
507 lines
11 KiB
Plaintext
/*
|
|
* ===================================
|
|
* UTKComponents.uss
|
|
* 재사용 가능한 컴포넌트 클래스 정의
|
|
* ===================================
|
|
*
|
|
* 이 파일은 C# 인라인 스타일을 대체하는 USS 클래스를 정의합니다.
|
|
* 모든 색상은 테마 변수를 참조하여 테마 전환 시 자동 반영됩니다.
|
|
*
|
|
* 네이밍 컨벤션:
|
|
* - .utk-{component} : 컴포넌트 루트
|
|
* - .utk-{component}__{element} : 자식 요소
|
|
* - .utk-{component}--{modifier} : 상태/변형
|
|
*/
|
|
|
|
|
|
/* ===================================
|
|
Modal / Panel Base
|
|
=================================== */
|
|
|
|
.utk-modal {
|
|
position: absolute;
|
|
background-color: var(--color-bg-modal);
|
|
border-radius: var(--radius-l);
|
|
border-width: var(--border-width);
|
|
border-color: var(--color-border);
|
|
min-width: var(--size-modal-min-width);
|
|
}
|
|
|
|
.utk-modal--draggable {
|
|
/* 드래그 가능한 모달 */
|
|
}
|
|
|
|
.utk-panel {
|
|
background-color: var(--color-bg-panel);
|
|
border-radius: var(--radius-m);
|
|
border-width: var(--border-width);
|
|
border-color: var(--color-border);
|
|
}
|
|
|
|
.utk-overlay {
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background-color: var(--color-bg-overlay);
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
Header
|
|
=================================== */
|
|
|
|
.utk-header {
|
|
flex-direction: row;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
height: 32px;
|
|
padding-left: var(--space-l);
|
|
padding-right: var(--space-s);
|
|
background-color: var(--color-bg-elevated);
|
|
border-bottom-width: var(--border-width);
|
|
border-bottom-color: var(--color-border);
|
|
}
|
|
|
|
.utk-header--rounded {
|
|
border-top-left-radius: var(--radius-l);
|
|
border-top-right-radius: var(--radius-l);
|
|
}
|
|
|
|
.utk-header__title {
|
|
color: var(--color-text-primary);
|
|
font-size: var(--font-size-body1);
|
|
-unity-font-style: bold;
|
|
}
|
|
|
|
.utk-header__subtitle {
|
|
color: var(--color-text-secondary);
|
|
font-size: var(--font-size-body2);
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
Buttons
|
|
=================================== */
|
|
|
|
.utk-btn {
|
|
height: var(--size-btn-height);
|
|
min-width: var(--size-btn-min-width);
|
|
padding-left: var(--space-l);
|
|
padding-right: var(--space-l);
|
|
background-color: var(--color-btn-normal);
|
|
border-width: 0;
|
|
border-radius: var(--radius-m);
|
|
color: var(--color-text-primary);
|
|
font-size: var(--font-size-body2);
|
|
transition-duration: var(--anim-fast);
|
|
transition-property: background-color;
|
|
}
|
|
|
|
.utk-btn:hover {
|
|
background-color: var(--color-btn-hover);
|
|
}
|
|
|
|
.utk-btn:active {
|
|
background-color: var(--color-btn-pressed);
|
|
}
|
|
|
|
.utk-btn:disabled {
|
|
background-color: var(--color-btn-disabled);
|
|
color: var(--color-text-disabled);
|
|
}
|
|
|
|
.utk-btn--primary {
|
|
background-color: var(--color-btn-primary);
|
|
color: var(--color-base-01);
|
|
}
|
|
|
|
.utk-btn--primary:hover {
|
|
background-color: var(--color-btn-primary-hover);
|
|
}
|
|
|
|
.utk-btn--secondary {
|
|
background-color: var(--color-btn-secondary);
|
|
}
|
|
|
|
.utk-btn--secondary:hover {
|
|
background-color: var(--color-btn-secondary-hover);
|
|
}
|
|
|
|
.utk-btn--ghost {
|
|
background-color: transparent;
|
|
border-width: 0;
|
|
}
|
|
|
|
.utk-btn--ghost:hover {
|
|
background-color: rgba(255, 255, 255, 0.1);
|
|
}
|
|
|
|
.utk-btn--icon {
|
|
width: var(--size-icon-btn);
|
|
height: var(--size-icon-btn);
|
|
min-width: var(--size-icon-btn);
|
|
padding: 0;
|
|
background-color: transparent;
|
|
border-width: 0;
|
|
}
|
|
|
|
.utk-btn--icon:hover {
|
|
background-color: rgba(255, 255, 255, 0.1);
|
|
border-radius: var(--radius-m);
|
|
}
|
|
|
|
.utk-btn--close {
|
|
width: 24px;
|
|
height: 24px;
|
|
min-width: 24px;
|
|
padding: 0;
|
|
background-color: transparent;
|
|
border-width: 0;
|
|
color: var(--color-text-secondary);
|
|
font-size: 14px;
|
|
}
|
|
|
|
.utk-btn--close:hover {
|
|
color: var(--color-text-primary);
|
|
background-color: rgba(255, 255, 255, 0.1);
|
|
border-radius: var(--radius-m);
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
Text / Labels
|
|
=================================== */
|
|
|
|
.utk-text--primary {
|
|
color: var(--color-text-primary);
|
|
}
|
|
|
|
.utk-text--secondary {
|
|
color: var(--color-text-secondary);
|
|
}
|
|
|
|
.utk-text--disabled {
|
|
color: var(--color-text-disabled);
|
|
}
|
|
|
|
.utk-text--placeholder {
|
|
color: var(--color-text-placeholder);
|
|
}
|
|
|
|
.utk-text--error {
|
|
color: var(--color-state-error);
|
|
}
|
|
|
|
.utk-text--success {
|
|
color: var(--color-state-success);
|
|
}
|
|
|
|
.utk-text--warning {
|
|
color: var(--color-state-warning);
|
|
}
|
|
|
|
.utk-text--h1 {
|
|
font-size: var(--font-size-h1);
|
|
-unity-font-style: bold;
|
|
}
|
|
|
|
.utk-text--h2 {
|
|
font-size: var(--font-size-h2);
|
|
-unity-font-style: bold;
|
|
}
|
|
|
|
.utk-text--body1 {
|
|
font-size: var(--font-size-body1);
|
|
}
|
|
|
|
.utk-text--body2 {
|
|
font-size: var(--font-size-body2);
|
|
}
|
|
|
|
.utk-text--label {
|
|
font-size: var(--font-size-label2);
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
Input Fields
|
|
=================================== */
|
|
|
|
.utk-input {
|
|
height: var(--size-input-height);
|
|
color: var(--color-text-primary);
|
|
font-size: var(--font-size-body1);
|
|
}
|
|
|
|
.utk-input:focus {
|
|
border-color: var(--color-border-focus);
|
|
}
|
|
|
|
.utk-input--error {
|
|
border-color: var(--color-border-error);
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
Vector Fields (X, Y, Z)
|
|
=================================== */
|
|
|
|
.utk-vector-label--x {
|
|
color: var(--color-vector-x);
|
|
min-width: 16px;
|
|
-unity-text-align: middle-center;
|
|
}
|
|
|
|
.utk-vector-label--y {
|
|
color: var(--color-vector-y);
|
|
min-width: 16px;
|
|
-unity-text-align: middle-center;
|
|
}
|
|
|
|
.utk-vector-label--z {
|
|
color: var(--color-vector-z);
|
|
min-width: 16px;
|
|
-unity-text-align: middle-center;
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
Tooltip
|
|
=================================== */
|
|
|
|
.utk-tooltip {
|
|
position: absolute;
|
|
background-color: var(--color-bg-tooltip);
|
|
border-radius: var(--radius-m);
|
|
padding: var(--space-s) var(--space-m);
|
|
max-width: 300px;
|
|
}
|
|
|
|
.utk-tooltip__text {
|
|
color: var(--color-base-01);
|
|
font-size: var(--font-size-body2);
|
|
white-space: normal;
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
Drag Ghost
|
|
=================================== */
|
|
|
|
.utk-drag-ghost {
|
|
position: absolute;
|
|
opacity: 0.8;
|
|
background-color: var(--color-drag-ghost-bg);
|
|
border-radius: var(--radius-m);
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
State Indicators
|
|
=================================== */
|
|
|
|
.utk-state--success {
|
|
background-color: var(--color-state-success);
|
|
}
|
|
|
|
.utk-state--warning {
|
|
background-color: var(--color-state-warning);
|
|
}
|
|
|
|
.utk-state--error {
|
|
background-color: var(--color-state-error);
|
|
}
|
|
|
|
.utk-state--info {
|
|
background-color: var(--color-state-info);
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
Calendar
|
|
=================================== */
|
|
|
|
.utk-calendar__day--sunday {
|
|
color: var(--color-calendar-sunday);
|
|
}
|
|
|
|
.utk-calendar__day--saturday {
|
|
color: var(--color-calendar-saturday);
|
|
}
|
|
|
|
.utk-calendar__day--today {
|
|
background-color: var(--color-calendar-today);
|
|
border-radius: var(--radius-m);
|
|
}
|
|
|
|
.utk-calendar__day--selected {
|
|
background-color: var(--color-calendar-selected);
|
|
border-radius: var(--radius-m);
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
Divider / Separator
|
|
=================================== */
|
|
|
|
.utk-divider {
|
|
height: var(--border-width);
|
|
background-color: var(--color-border);
|
|
margin-top: var(--space-m);
|
|
margin-bottom: var(--space-m);
|
|
}
|
|
|
|
.utk-divider--vertical {
|
|
width: var(--border-width);
|
|
height: auto;
|
|
margin-left: var(--space-m);
|
|
margin-right: var(--space-m);
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
Spacing Utilities
|
|
=================================== */
|
|
|
|
.utk-p-xs { padding: var(--space-xs); }
|
|
.utk-p-s { padding: var(--space-s); }
|
|
.utk-p-m { padding: var(--space-m); }
|
|
.utk-p-l { padding: var(--space-l); }
|
|
.utk-p-xl { padding: var(--space-xl); }
|
|
|
|
.utk-m-xs { margin: var(--space-xs); }
|
|
.utk-m-s { margin: var(--space-s); }
|
|
.utk-m-m { margin: var(--space-m); }
|
|
.utk-m-l { margin: var(--space-l); }
|
|
.utk-m-xl { margin: var(--space-xl); }
|
|
|
|
.utk-gap-xs { margin-bottom: var(--space-xs); }
|
|
.utk-gap-s { margin-bottom: var(--space-s); }
|
|
.utk-gap-m { margin-bottom: var(--space-m); }
|
|
.utk-gap-l { margin-bottom: var(--space-l); }
|
|
|
|
|
|
/* ===================================
|
|
Layout Utilities
|
|
=================================== */
|
|
|
|
.utk-row {
|
|
flex-direction: row;
|
|
}
|
|
|
|
.utk-col {
|
|
flex-direction: column;
|
|
}
|
|
|
|
.utk-center {
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
|
|
.utk-space-between {
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.utk-flex-grow {
|
|
flex-grow: 1;
|
|
}
|
|
|
|
.utk-flex-shrink {
|
|
flex-shrink: 1;
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
Dropdown Popup Menu
|
|
=================================== */
|
|
|
|
.unity-base-dropdown__container-outer {
|
|
border-radius: var(--radius-m);
|
|
border-width: var(--border-width);
|
|
border-color: var(--color-base-06);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.unity-base-dropdown {
|
|
background-color: var(--color-base-01);
|
|
padding: var(--space-xs);
|
|
margin-top: 2px;
|
|
}
|
|
|
|
.unity-base-dropdown__item {
|
|
height: 28px;
|
|
padding-left: var(--space-m);
|
|
padding-right: var(--space-m);
|
|
padding-top: var(--space-xs);
|
|
padding-bottom: var(--space-xs);
|
|
background-color: transparent;
|
|
border-radius: var(--radius-xs);
|
|
transition-duration: var(--anim-fast);
|
|
transition-property: background-color;
|
|
cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
|
|
}
|
|
|
|
.unity-base-dropdown__item:hover:enabled {
|
|
background-color: var(--color-collection-item-hover) ;
|
|
}
|
|
|
|
.unity-base-dropdown__item:checked {
|
|
background-color: var(--color-blue-05);
|
|
}
|
|
|
|
.unity-base-dropdown__item:checked:hover {
|
|
background-color: var(--color-blue-06);
|
|
}
|
|
|
|
/* 드롭다운 항목 콘텐츠 */
|
|
.unity-base-dropdown__item-content {
|
|
flex-direction: row;
|
|
align-items: center;
|
|
}
|
|
|
|
.unity-base-dropdown__item:hover .unity-base-dropdown__item-content {
|
|
background-color: var(--color-collection-item-hover);
|
|
}
|
|
|
|
.unity-base-dropdown__item:checked .unity-base-dropdown__item-content {
|
|
background-color: var(--color-blue-05);
|
|
}
|
|
|
|
.unity-base-dropdown__item:checked:hover .unity-base-dropdown__item-content {
|
|
background-color: var(--color-blue-06);
|
|
}
|
|
|
|
/* 드롭다운 항목 라벨 */
|
|
.unity-base-dropdown__label {
|
|
font-size: 12px;
|
|
color: var(--color-base-20);
|
|
-unity-text-align: middle-left;
|
|
padding-left: 0;
|
|
padding-right: 0;
|
|
}
|
|
|
|
.unity-base-dropdown__item:checked .unity-base-dropdown__label {
|
|
color: var(--color-base-01);
|
|
}
|
|
|
|
/* 드롭다운 체크마크 */
|
|
.unity-base-dropdown__item .unity-base-dropdown__checkmark {
|
|
width: 16px;
|
|
height: 16px;
|
|
min-width: 16px;
|
|
min-height: 16px;
|
|
-unity-background-image-tint-color: var(--color-base-01);
|
|
}
|
|
|
|
|
|
/* ===================================
|
|
Border Radius Utilities
|
|
=================================== */
|
|
|
|
.utk-rounded-s { border-radius: var(--radius-s); }
|
|
.utk-rounded-m { border-radius: var(--radius-m); }
|
|
.utk-rounded-l { border-radius: var(--radius-l); }
|
|
.utk-rounded-full { border-radius: var(--radius-full); }
|