:root { --primary-color: #1E5149; --bg-color: #FFFFFF; --text-main: #222222; --text-sub: #666666; --border-color: #E5E7EB; /* 매우 연한 회색 라인 */ --hover-bg: #F9FAFB; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Pretendard', sans-serif; font-size: 13px; color: var(--text-main); background-color: var(--bg-color); display: flex; min-height: 100vh; } /* Topbar */ .topbar { width: 100%; background-color: #1E5149; /* sample.png 탑바 다크 슬레이트 배경색 */ color: #FFFFFF; padding: 0 1.5rem; position: fixed; top: 0; left: 0; height: 36px; display: flex; align-items: center; z-index: 100; } .topbar-header { margin-right: 2.5rem; } .topbar-header h2 { font-size: 15px; font-weight: 600; letter-spacing: -0.3px; } .nav-list { list-style: none; display: flex; align-items: center; height: 100%; } .nav-item { padding: 0 1rem; height: 28px; border-radius: 4px; margin: 0 2px; cursor: pointer; transition: all 0.2s; color: rgba(255, 255, 255, 0.7); display: flex; justify-content: center; align-items: center; gap: 6px; font-size: 13px; } .nav-item:hover, .nav-item.active { background-color: #E9EEED; color: #1E5149; font-weight: 500; } /* Main Content */ .main-content { margin-top: 36px; flex: 1; padding: 2rem 2.5rem; width: 100%; max-width: 1400px; margin-left: auto; margin-right: auto; } header { margin-bottom: 2rem; display: flex; justify-content: space-between; align-items: flex-end; padding-bottom: 0.8rem; border-bottom: 1px solid var(--border-color); /* 선 굵기와 색상 얇게 */ } header h1 { font-size: 18px; font-weight: 700; color: var(--primary-color); } .admin-info { color: var(--text-sub); font-size: 12px; } /* Multi-level Accordion (Minimalist/No Box Design) */ .continent-group { margin-bottom: 3rem; } .continent-header { color: var(--text-main); padding: 0.5rem 0; font-size: 16px; font-weight: 700; cursor: pointer; display: flex; justify-content: flex-start; align-items: center; border-bottom: 2px solid var(--text-main); margin-bottom: 1rem; } .continent-body { display: none; } .continent-group.active > .continent-body { display: block; } .country-group { margin-bottom: 2rem; padding-bottom: 2rem; border-bottom: 1px dashed var(--border-color); /* 국가 사이 구분선 */ } .country-group:last-child { margin-bottom: 1rem; padding-bottom: 0; border-bottom: none; } .country-header { color: var(--primary-color); padding: 0.5rem 0; font-size: 14px; font-weight: 700; cursor: pointer; display: flex; justify-content: flex-start; align-items: center; margin-bottom: 0.5rem; } .country-body { display: none; padding-left: 0.5rem; /* Slight indent instead of borders */ } .country-group.active > .country-body { display: block; } .toggle-icon { font-size: 10px; margin-left: 8px; color: #999; } /* Accordion Styles (Projects - Row Based) */ .accordion-container { display: flex; flex-direction: column; width: 100%; } .accordion-item { border-bottom: 1px solid var(--border-color); } .accordion-item:last-child { border-bottom: none; } .accordion-header { display: grid; grid-template-columns: 2.5fr 1fr 1fr 1fr 1fr 2fr; gap: 1rem; padding: 1rem 0; cursor: pointer; align-items: center; background-color: transparent; transition: opacity 0.2s; } .accordion-item:hover .accordion-header { opacity: 0.7; } .accordion-item.active .accordion-header { /* No border-bottom or background change for active */ } .accordion-header > div { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .header-label { font-size: 11px; color: var(--text-sub); margin-bottom: 3px; display: block; font-weight: 400; } .header-value { font-weight: 500; font-size: 13px; color: var(--text-main); } .accordion-body { display: none; padding: 1.5rem 0; background-color: transparent; } .accordion-item.active .accordion-body { display: block; } .detail-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; } .detail-section h4 { margin-bottom: 1rem; color: var(--text-main); font-size: 13px; font-weight: 600; border-bottom: 1px solid var(--border-color); padding-bottom: 0.5rem; } /* Table Styles - Super Minimal Line Style */ .data-table { width: 100%; border-collapse: collapse; } .data-table th, .data-table td { padding: 8px 4px; border-bottom: 1px solid var(--border-color); text-align: left; } .data-table th { color: var(--text-sub); font-weight: 400; font-size: 12px; } .data-table td { font-size: 12px; color: var(--text-main); } .data-table tr:last-child td { border-bottom: none; } /* General Utilities */ .badge { background: #EEEEEE; color: #555555; padding: 2px 6px; border-radius: 2px; /* 라운드 거의 없앰 */ font-size: 11px; font-weight: 500; } .status-up { color: #D32F2F; font-weight: 500; } .status-down { color: #1976D2; font-weight: 500; } /* Sync Button */ .sync-btn { background-color: var(--primary-color); color: #FFFFFF; border: 1px solid var(--primary-color); padding: 6px 14px; border-radius: 4px; font-size: 12px; font-weight: 600; cursor: pointer; transition: background-color 0.2s, opacity 0.2s; margin-right: 1rem; display: flex; align-items: center; gap: 6px; } .sync-btn:hover { background-color: #153A34; } .sync-btn:disabled { background-color: #A0B2AF; border-color: #A0B2AF; cursor: not-allowed; } /* Spinner */ .spinner { display: none; width: 12px; height: 12px; border: 2px solid rgba(255,255,255,0.3); border-radius: 50%; border-top-color: #fff; animation: spin 1s ease-in-out infinite; } @keyframes spin { to { transform: rotate(360deg); } } .sync-btn.loading .spinner { display: inline-block; } /* --- Responsive Design --- */ @media screen and (max-width: 1024px) { .accordion-header { grid-template-columns: 2fr 1fr 1fr 1fr 1fr 1.5fr; } } @media screen and (max-width: 768px) { .topbar { overflow-x: auto; white-space: nowrap; padding: 0 1rem; } /* 스크롤바 숨김 */ .topbar::-webkit-scrollbar { display: none; } .main-content { padding: 1.5rem 1rem; } header { flex-direction: column; align-items: flex-start; gap: 0.5rem; } .detail-grid { grid-template-columns: 1fr; gap: 1.5rem; } /* 모바일에서 아코디언 헤더를 다단으로 배치 */ .accordion-header { grid-template-columns: 1fr 1fr; row-gap: 1rem; } /* 프로젝트 명과 최근 로그는 공간을 넓게 쓰도록 설정 */ .accordion-header > div:nth-child(1), .accordion-header > div:nth-child(6) { grid-column: span 2; } .continent-header { font-size: 15px; } } @media screen and (max-width: 480px) { /* 아주 작은 화면에서는 1열로 배치 */ .accordion-header { grid-template-columns: 1fr; } .accordion-header > div { grid-column: span 1 !important; } .topbar-header h2 { font-size: 13px; margin-right: 1rem; } .nav-item { padding: 0 0.5rem; font-size: 12px; } }