- UI 개선: 모든 아이콘/이모지 제거(미니멀리즘), 목록 행 하이라이트 추가, 요약 레이아웃 최적화 - 경고 시스템: 위치 부적절/형식 부적절 사유별 세분화 및 상단 통계 배지 적용 - 정보 강화: 우측 패널 '상세 보기' 버튼 복구 및 '자산 유형' 정보 추가 노출 - 표준화: 위치명(기술개발센터, 한맥빌딩) 및 자산번호 접두사(STO/NAS/DAS -> DSS/STM) 통합 - 데이터: realServerData.ts 및 SharedData.ts 내 유형/접두사 표준 체계 전면 반영 - 레이아웃: 헤더 역할 스위처 및 가이드 버튼 일렬 정렬 수정
196 lines
8.6 KiB
CSS
196 lines
8.6 KiB
CSS
:root {
|
|
/* --- System Colors --- */
|
|
--color-red: #F21D0D;
|
|
--color-pink: #E8175E;
|
|
--color-magenta: #B92ED1;
|
|
--color-purple: #6D3DC2;
|
|
--color-navy: #4255bd;
|
|
--color-blue: #0D8DF2;
|
|
--color-cyan: #03AEFC;
|
|
--color-green: #4DB251;
|
|
--color-yellow: #FFBF00;
|
|
--color-orange: #FF9800;
|
|
--color-dahong: #FF3D00;
|
|
--color-brown: #A0705F;
|
|
--color-iron: #7F7F7F;
|
|
--color-steel: #688897;
|
|
|
|
/* --- Primary Brand Levels --- */
|
|
--primary-lv-0: #E9EEED;
|
|
--primary-lv-1: #D2DCDB;
|
|
--primary-lv-2: #A5B9B6;
|
|
--primary-lv-3: #789792;
|
|
--primary-lv-4: #4B746D;
|
|
--primary-lv-5: #35635C;
|
|
--primary-lv-6: #1E5149;
|
|
--primary-lv-7: #1B443D;
|
|
--primary-lv-8: #193833;
|
|
--primary-lv-9: #162A27;
|
|
|
|
/* --- Semantic Colors --- */
|
|
--primary-color: var(--primary-lv-6);
|
|
--primary-hover: var(--primary-lv-5);
|
|
--primary-light: var(--primary-lv-0);
|
|
|
|
--edit-mode-color: var(--color-dahong);
|
|
--edit-mode-light: rgba(255, 61, 0, 0.1);
|
|
--edit-mode-focus: rgba(255, 61, 0, 0.3);
|
|
--edit-mode-dark: #cc3100;
|
|
|
|
--text-main: #111827;
|
|
--text-muted: #6B7280;
|
|
--border-color: #E5E7EB;
|
|
--bg-color: #F9FAFB;
|
|
--bg-light: #FAFAFA;
|
|
--white: #FFFFFF;
|
|
--danger: var(--color-red);
|
|
--success: var(--color-green);
|
|
--header-height: 52px;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
margin: 0;
|
|
padding: 0;
|
|
letter-spacing: -0.02em;
|
|
}
|
|
|
|
body {
|
|
font-family: 'Pretendard Variable', Pretendard, sans-serif;
|
|
color: var(--text-main);
|
|
background-color: var(--bg-color);
|
|
line-height: 1.5;
|
|
font-size: 14px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.app-layout {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100vh;
|
|
width: 100%;
|
|
}
|
|
|
|
/* --- Header --- */
|
|
.main-header {
|
|
background-color: var(--white);
|
|
border-bottom: 1px solid var(--border-color);
|
|
z-index: 100;
|
|
height: var(--header-height);
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.header-container {
|
|
height: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 0 1.5rem;
|
|
gap: 1.5rem;
|
|
}
|
|
|
|
.brand { display: flex; align-items: center; gap: 0.75rem; }
|
|
.main-logo { height: 34px; width: auto; }
|
|
.brand h1 { font-size: 1.1rem; font-weight: 800; color: var(--text-main); white-space: nowrap; }
|
|
.brand h1 .sub-title { font-size: 0.85rem; color: var(--primary-color); font-weight: 600; margin-left: 0.25rem; }
|
|
|
|
.integrated-nav { flex: 1; height: 100%; display: flex; align-items: center; gap: 0.25rem; overflow: hidden; }
|
|
.nav-group { display: flex; align-items: center; height: 100%; position: relative; flex-shrink: 0; }
|
|
.gnb-trigger { font-size: 14px; font-weight: 700; color: var(--text-muted); padding: 0 0.75rem; cursor: pointer; height: 100%; display: flex; align-items: center; white-space: nowrap; transition: color 0.2s; }
|
|
.nav-group.active .gnb-trigger, .nav-group:hover .gnb-trigger { color: var(--text-main); }
|
|
.lnb-shelf { display: none; align-items: center; gap: 0.2rem; padding: 0 0.5rem; height: 60%; border-left: 1px solid var(--border-color); margin-left: 0.2rem; }
|
|
|
|
/* 기본적으로 활성 탭의 서브메뉴 표시 */
|
|
.nav-group.active.is-showing-shelf .lnb-shelf { display: flex; }
|
|
|
|
/* GNB 전체 영역에 마우스가 올라가면 활성 탭의 서브메뉴를 일단 숨김 (다른 메뉴 탐색 우선) */
|
|
.integrated-nav:hover .nav-group.active.is-showing-shelf .lnb-shelf { display: none; }
|
|
|
|
/* 마우스가 올라간 메뉴의 서브메뉴만 표시 */
|
|
.nav-group:hover .lnb-shelf { display: flex !important; }
|
|
|
|
.lnb-item { font-size: 13px; font-weight: 500; color: var(--text-muted); cursor: pointer; padding: 0.2rem 0.6rem; border-radius: 4px; white-space: nowrap; transition: all 0.2s; }
|
|
.lnb-item:hover { color: var(--primary-color); background-color: var(--primary-light); }
|
|
.lnb-item.active { color: var(--primary-color); background-color: var(--primary-light); font-weight: 700; }
|
|
|
|
.header-actions { display: flex; align-items: center; gap: 1rem; }
|
|
.role-switcher { display: flex; align-items: center; gap: 0.75rem; padding: 0 0.75rem; border-right: 1px solid var(--border-color); height: 24px; }
|
|
.role-label { font-size: 11px; font-weight: 700; color: var(--text-muted); }
|
|
.role-label.active { color: var(--primary-color); }
|
|
.switch { position: relative; display: inline-block; width: 34px; height: 18px; }
|
|
.switch input { opacity: 0; width: 0; height: 0; }
|
|
.slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; transition: .4s; border-radius: 34px; }
|
|
.slider:before { position: absolute; content: ""; height: 12px; width: 12px; left: 3px; bottom: 3px; background-color: white; transition: .4s; border-radius: 50%; }
|
|
input:checked + .slider { background-color: var(--color-orange); }
|
|
input:checked + .slider:before { transform: translateX(16px); }
|
|
|
|
/* --- Layout Content --- */
|
|
.content-area {
|
|
flex: 1;
|
|
padding: 1.25rem 2rem 0;
|
|
overflow: hidden;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.view-container {
|
|
flex: 1;
|
|
width: 100%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.view-content-wrapper {
|
|
flex: 1;
|
|
overflow-y: auto;
|
|
padding-bottom: 2rem;
|
|
}
|
|
|
|
/* --- View Toggle --- */
|
|
.view-toggle-container { margin-bottom: 1rem; display: flex; justify-content: flex-start; }
|
|
.view-toggle { display: inline-flex; background-color: var(--primary-lv-0); padding: 4px; border-radius: 8px; border: 1px solid var(--border-color); }
|
|
.toggle-btn { padding: 6px 16px; font-size: 13px; font-weight: 600; color: var(--text-muted); background: none; border: none; border-radius: 6px; cursor: pointer; }
|
|
.toggle-btn.active { background-color: var(--white); color: var(--primary-color); box-shadow: 0 2px 4px rgba(0,0,0,0.05); }
|
|
|
|
/* --- System Status List (Docker Style) --- */
|
|
.system-status-list { display: flex; flex-direction: column; gap: 0.5rem; }
|
|
.system-list-header { display: flex; align-items: center; padding: 0.75rem 1.25rem; background-color: var(--bg-light); border-bottom: 1px solid var(--border-color); font-size: 11px; font-weight: 700; color: var(--text-muted); text-transform: uppercase; }
|
|
.system-row { display: flex; align-items: center; padding: 1rem 1.25rem; background-color: var(--white); border: 1px solid var(--border-color); border-radius: 6px; transition: all 0.2s; }
|
|
.system-row:hover { border-color: var(--primary-lv-3); box-shadow: 0 4px 12px rgba(0,0,0,0.03); }
|
|
.col-status { width: 100px; display: flex; align-items: center; gap: 0.5rem; }
|
|
.col-info { flex: 1.5; }
|
|
.col-network { flex: 1; }
|
|
.col-remote { flex: 1; display: flex; align-items: center; gap: 0.5rem; }
|
|
.col-traffic { flex: 1.2; }
|
|
.col-actions { width: 120px; display: flex; justify-content: flex-end; }
|
|
.status-dot { width: 10px; height: 10px; border-radius: 50%; }
|
|
.status-dot.online { background-color: var(--success); box-shadow: 0 0 6px var(--success); }
|
|
.status-text { font-size: 11px; font-weight: 600; color: var(--success); }
|
|
.asset-primary { font-weight: 700; font-size: 14px; }
|
|
.asset-secondary { font-size: 12px; color: var(--text-muted); }
|
|
.ip-address { font-weight: 600; font-family: monospace; color: var(--primary-color); }
|
|
.traffic-mini-chart { display: flex; flex-direction: column; gap: 4px; }
|
|
.traffic-info { display: flex; justify-content: space-between; font-size: 11px; }
|
|
.progress-bg { height: 4px; background: var(--primary-lv-0); border-radius: 2px; overflow: hidden; }
|
|
.progress-fill { height: 100%; background: var(--primary-color); }
|
|
.icon-btn { width: 28px; height: 28px; display: flex; align-items: center; justify-content: center; border-radius: 4px; border: 1px solid var(--border-color); background: var(--white); color: var(--text-muted); cursor: pointer; }
|
|
.icon-btn:hover { background-color: var(--primary-light); border-color: var(--primary-color); color: var(--primary-color); }
|
|
|
|
/* --- Footer --- */
|
|
.main-footer { height: 40px; background-color: var(--white); border-top: 1px solid var(--border-color); display: flex; align-items: center; justify-content: flex-end; padding: 0 1.5rem; flex-shrink: 0; }
|
|
.main-footer p { font-size: 0.75rem; color: var(--text-muted); }
|
|
|
|
/* --- Utility --- */
|
|
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.35rem; padding: 0 0.8rem; font-size: 12px; font-weight: 600; border-radius: 4px; cursor: pointer; height: 28px; }
|
|
.btn-primary { background-color: var(--primary-color); color: var(--white); border: none; }
|
|
.btn-outline { background-color: transparent; color: var(--text-muted); border: 1px solid var(--border-color); }
|
|
.badge { padding: 2px 6px; border-radius: 4px; font-size: 11px; font-weight: 700; }
|
|
.badge-primary { background-color: var(--primary-color); color: white; }
|
|
.badge-light { background: var(--bg-color); color: var(--text-muted); border: 1px solid var(--border-color); }
|
|
.hidden { display: none !important; }
|
|
|
|
@media (max-width: 768px) {
|
|
.brand h1 .sub-title { display: none; }
|
|
.header-actions .btn span { display: none; }
|
|
}
|