Streamingle_URP/Assets/Resources/StreamingleUI/StreamingleControlPanel.uss
user 41270a34f5 Refactor: 전체 에디터 UXML 전환 + 대시보드/런타임 UI + 한글화 + NanumGothic 폰트
- 모든 컨트롤러 에디터를 IMGUI → UI Toolkit(UXML/USS)으로 전환
  (Camera, Item, Event, Avatar, System, StreamDeck, OptiTrack, Facial)
- StreamingleCommon.uss 공통 테마 + 개별 에디터 USS 스타일시트
- SystemController 서브매니저 분리 (OptiTrack, Facial, Recording, Screenshot 등)
- 런타임 컨트롤 패널 (ESC 토글, 좌측 오버레이, 150% 스케일)
- 웹 대시보드 서버 (StreamingleDashboardServer) + 리타게팅 통합
- 설정 도구(StreamingleControllerSetupTool) UXML 재작성 + 원클릭 설정
- SimplePoseTransfer UXML 에디터 추가
- 전체 UXML 한글화 + NanumGothic 폰트 적용
- Streamingle.Debug → Streamingle.Debugging 네임스페이스 변경 (Debug.Log 충돌 해결)
- 불필요 코드 제거 (rawkey.cs, RetargetingHTTPServer, OptitrackSkeletonAnimator 등)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 02:51:43 +09:00

363 lines
7.4 KiB
Plaintext

/* ======== Streamingle Runtime Control Panel — Left Overlay (150%) ======== */
/* Font — NanumGothic */
.panel-root, .panel-root Label, .panel-root Button {
-unity-font: resource('Fonts/NanumGothic');
}
.panel-title, .cat-title, .cat-btn--active, .action-btn, .status-value {
-unity-font: resource('Fonts/NanumGothicBold');
}
/* Root — left-docked, full height, ~1/3 screen */
.panel-root {
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 520px;
background-color: rgba(15, 23, 42, 0.96);
border-right-width: 1px;
border-right-color: rgba(99, 102, 241, 0.25);
flex-direction: column;
}
/* ---- Header ---- */
.header {
flex-direction: row;
justify-content: space-between;
align-items: center;
padding: 14px 20px;
background-color: rgba(0, 0, 0, 0.3);
border-bottom-width: 1px;
border-bottom-color: rgba(255, 255, 255, 0.06);
}
.panel-title {
font-size: 18px;
-unity-font-style: bold;
color: rgb(99, 102, 241);
letter-spacing: 3px;
}
.esc-badge {
color: rgb(100, 116, 139);
font-size: 14px;
background-color: rgba(255, 255, 255, 0.07);
border-radius: 6px;
padding: 4px 12px;
border-width: 1px;
border-color: rgba(255, 255, 255, 0.08);
}
/* ---- Tab Bar ---- */
.tab-bar {
flex-direction: row;
background-color: rgba(0, 0, 0, 0.2);
border-bottom-width: 1px;
border-bottom-color: rgba(255, 255, 255, 0.06);
}
.cat-btn {
flex-grow: 1;
height: 48px;
background-color: transparent;
border-width: 0;
border-bottom-width: 3px;
border-bottom-color: transparent;
border-radius: 0;
color: rgb(100, 116, 139);
font-size: 15px;
-unity-font-style: normal;
-unity-text-align: middle-center;
padding: 0 4px;
margin: 0;
transition-duration: 0.12s;
transition-property: color, border-bottom-color, background-color;
}
.cat-btn:hover {
color: rgb(203, 213, 225);
background-color: rgba(99, 102, 241, 0.08);
}
.cat-btn--active {
color: rgb(129, 140, 248);
border-bottom-color: rgb(99, 102, 241);
-unity-font-style: bold;
background-color: rgba(99, 102, 241, 0.06);
}
/* ---- Content ---- */
.content {
flex-grow: 1;
padding: 16px 18px 0 18px;
overflow: hidden;
}
.cat-title {
font-size: 20px;
-unity-font-style: bold;
color: rgb(241, 245, 249);
margin-bottom: 4px;
}
.cat-desc {
font-size: 14px;
color: rgb(100, 116, 139);
margin-bottom: 14px;
}
.action-list {
flex-grow: 1;
}
/* ---- Action Items ---- */
.action-item {
background-color: rgba(255, 255, 255, 0.04);
border-radius: 8px;
padding: 12px 14px;
margin-bottom: 6px;
flex-direction: row;
align-items: center;
border-width: 1px;
border-color: transparent;
transition-duration: 0.1s;
transition-property: background-color, border-color;
}
.action-item:hover {
background-color: rgba(255, 255, 255, 0.07);
}
.action-item--active {
border-color: rgba(34, 197, 94, 0.5);
background-color: rgba(34, 197, 94, 0.08);
}
.action-item-index {
color: rgb(71, 85, 105);
font-size: 14px;
min-width: 36px;
-unity-text-align: middle-right;
margin-right: 10px;
}
.action-item-label {
flex-grow: 1;
color: rgb(226, 232, 240);
font-size: 16px;
}
.action-item-status {
color: rgb(34, 197, 94);
font-size: 14px;
margin-right: 10px;
-unity-font-style: bold;
}
/* ---- Buttons ---- */
.action-btn {
background-color: rgb(99, 102, 241);
color: white;
border-radius: 6px;
border-width: 0;
padding: 6px 16px;
font-size: 14px;
-unity-font-style: bold;
min-width: 80px;
height: 34px;
transition-duration: 0.1s;
transition-property: background-color;
}
.action-btn:hover {
background-color: rgb(79, 70, 229);
}
.action-btn:active {
background-color: rgb(67, 56, 202);
}
.action-btn--secondary {
background-color: rgb(51, 65, 85);
}
.action-btn--secondary:hover {
background-color: rgb(71, 85, 105);
}
.action-btn--danger {
background-color: rgb(220, 38, 38);
}
.action-btn--danger:hover {
background-color: rgb(185, 28, 28);
}
.action-btn--success {
background-color: rgb(22, 163, 74);
}
.action-btn--success:hover {
background-color: rgb(21, 128, 61);
}
/* Action row */
.action-row {
flex-direction: row;
flex-wrap: wrap;
margin-bottom: 6px;
}
.action-row > .action-btn {
margin-right: 6px;
margin-bottom: 4px;
}
/* Section group title */
.group-title {
font-size: 14px;
color: rgb(100, 116, 139);
margin-top: 14px;
margin-bottom: 6px;
padding-bottom: 4px;
border-bottom-width: 1px;
border-bottom-color: rgba(255, 255, 255, 0.05);
-unity-font-style: bold;
letter-spacing: 1px;
}
/* Avatar group */
.avatar-group {
margin-bottom: 10px;
padding-bottom: 8px;
border-bottom-width: 1px;
border-bottom-color: rgba(255, 255, 255, 0.03);
}
.avatar-group-name {
font-size: 16px;
color: rgb(148, 163, 184);
-unity-font-style: bold;
margin-bottom: 6px;
}
.outfit-row {
flex-direction: row;
flex-wrap: wrap;
}
.outfit-btn {
background-color: rgba(255, 255, 255, 0.05);
color: rgb(203, 213, 225);
border-radius: 6px;
border-width: 1px;
border-color: transparent;
padding: 6px 14px;
font-size: 14px;
margin-right: 4px;
margin-bottom: 4px;
transition-duration: 0.1s;
transition-property: background-color, border-color;
}
.outfit-btn:hover {
background-color: rgba(255, 255, 255, 0.1);
}
.outfit-btn--active {
background-color: rgba(99, 102, 241, 0.2);
border-color: rgb(99, 102, 241);
color: white;
-unity-font-style: bold;
}
/* ---- Status Bar ---- */
.status-bar {
height: 44px;
background-color: rgba(0, 0, 0, 0.4);
border-top-width: 1px;
border-top-color: rgba(255, 255, 255, 0.06);
flex-direction: row;
align-items: center;
padding-left: 18px;
padding-right: 18px;
justify-content: flex-start;
flex-shrink: 0;
}
.status-group {
flex-direction: row;
align-items: center;
margin-right: 20px;
}
.status-label {
color: rgb(71, 85, 105);
font-size: 13px;
margin-right: 5px;
}
.status-dot {
width: 10px;
height: 10px;
border-radius: 5px;
background-color: rgb(51, 65, 85);
margin-right: 5px;
}
.status-dot--on {
background-color: rgb(34, 197, 94);
}
.status-dot--rec {
background-color: rgb(239, 68, 68);
}
.status-value {
color: rgb(203, 213, 225);
font-size: 13px;
-unity-font-style: bold;
}
/* ---- Scrollbar ---- */
.unity-scroller--vertical {
width: 6px;
margin-left: 4px;
}
.unity-scroller--vertical .unity-base-slider__tracker {
background-color: rgba(255, 255, 255, 0.03);
border-width: 0;
border-radius: 3px;
}
.unity-scroller--vertical .unity-base-slider__dragger {
background-color: rgba(148, 163, 184, 0.25);
border-width: 0;
border-radius: 3px;
min-height: 30px;
transition-duration: 0.15s;
transition-property: background-color;
}
.unity-scroller--vertical .unity-base-slider__dragger:hover {
background-color: rgba(148, 163, 184, 0.45);
}
.unity-scroller--vertical .unity-base-slider__dragger:active {
background-color: rgba(99, 102, 241, 0.6);
}
/* Hide scrollbar arrow buttons */
.unity-scroller--vertical .unity-repeat-button {
display: none;
}
/* Horizontal scrollbar (hide if any) */
.unity-scroller--horizontal {
height: 0;
display: none;
}