:root { --color-primary: #1B4F8A; --color-primary-dark: #133970; --color-primary-light: #2E5FA3; --color-accent: #C9A227; --color-cta: #E05A2B; --color-cta-dark: #D45A1F; --color-bg: #F7F9FC; --color-text: #1A1A2E; --color-text-muted: #5A6A7A; --color-border: #D8E2EE; --color-success: #2E7D32; --color-warning: #F57C00; --color-danger: #C62828; --spacing-xs: 0.25rem; --spacing-sm: 0.5rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem; --spacing-2xl: 3rem; --radius-sm: 4px; --radius-md: 8px; --radius-lg: 12px; --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-normal: 300ms cubic-bezier(0.4, 0, 0.2, 1); } * { font-family: 'Noto Sans KR', 'Apple SD Gothic Neo', sans-serif; } html { font-size: 16px; scroll-behavior: smooth; } body { color: var(--color-text); background-color: #fff; line-height: 1.75; font-size: clamp(0.875rem, 2.5vw, 1rem); } /* 버튼 스타일 */ .btn { border-radius: var(--radius-md); font-weight: 500; transition: all var(--transition-fast); cursor: pointer; border: none; padding: 0.625rem 1.5rem; font-size: 1rem; } .btn:active { transform: scale(0.98); } .btn-primary { background-color: var(--color-primary); border-color: var(--color-primary); color: white; } .btn-primary:hover { background-color: var(--color-primary-dark); border-color: var(--color-primary-dark); box-shadow: 0 4px 12px rgba(27, 79, 138, 0.25); } .btn-warning { background-color: var(--color-cta); border-color: var(--color-cta); color: white; } .btn-warning:hover { background-color: var(--color-cta-dark); border-color: var(--color-cta-dark); box-shadow: 0 4px 12px rgba(224, 90, 43, 0.25); } .btn-outline-primary { color: var(--color-primary); border-color: var(--color-primary); background: transparent; } .btn-outline-primary:hover { background-color: var(--color-primary); color: white; } /* 배경 및 텍스트 */ .bg-primary { background-color: var(--color-primary) !important; } .bg-primary-light { background-color: #E8F1F8 !important; } .text-primary { color: var(--color-primary) !important; } .text-muted { color: var(--color-text-muted) !important; } /* 히어로 섹션 */ .hero-section { padding: clamp(2rem, 15vh, 5rem) 0; background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-dark) 100%); color: white; position: relative; overflow: hidden; } .hero-section::before { content: ''; position: absolute; top: 0; right: 0; width: 500px; height: 500px; background: rgba(255, 255, 255, 0.05); border-radius: 50%; transform: translate(30%, -30%); } .hero-section h1 { font-size: clamp(1.5rem, 5vw, 3rem); font-weight: 700; margin-bottom: var(--spacing-lg); position: relative; z-index: 1; } /* 카드 스타일 */ .card { border: 1px solid var(--color-border); border-radius: var(--radius-lg); transition: all var(--transition-normal); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); } .card:hover { transform: translateY(-4px); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); } .card-body { padding: var(--spacing-xl); } .card-title { font-weight: 600; color: var(--color-primary); margin-bottom: var(--spacing-md); } /* 네비게이션 */ .navbar-brand { font-size: 1.25rem; font-weight: 700; color: var(--color-primary) !important; } .navbar { box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08); background-color: white; padding: var(--spacing-md) 0; } .navbar.sticky { position: sticky; top: 0; z-index: 999; } .nav-link { color: var(--color-text) !important; font-weight: 500; transition: color var(--transition-fast); margin: 0 var(--spacing-sm); } .nav-link:hover { color: var(--color-primary) !important; } .nav-link.active { color: var(--color-cta) !important; } /* 모바일 CTA 바 */ .mobile-cta-bar { position: fixed; bottom: 0; left: 0; right: 0; background: white; border-top: 2px solid var(--color-border); padding: var(--spacing-md); z-index: 1000; box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.05); } .btn-kakao-mobile { display: block; width: 100%; padding: var(--spacing-md); background: #FFE812; color: #000; text-decoration: none; border-radius: var(--radius-md); font-weight: 600; text-align: center; border: none; cursor: pointer; font-size: 0.95rem; transition: background var(--transition-fast); } .btn-kakao-mobile:hover { background: #FDD835; text-decoration: none; } .btn-kakao-mobile:active { transform: scale(0.98); } /* 페이지 스페이싱 */ body.with-mobile-cta { padding-bottom: 70px; } /* 섹션 */ .section { padding: var(--spacing-2xl) 0; } .section-title { font-size: clamp(1.5rem, 4vw, 2.5rem); font-weight: 700; color: var(--color-primary); margin-bottom: var(--spacing-xl); text-align: center; } /* 배지 */ .badge { border-radius: var(--radius-sm); padding: var(--spacing-xs) var(--spacing-sm); font-size: 0.875rem; font-weight: 500; } .badge-success { background-color: #E8F5E9; color: var(--color-success); } /* 폼 요소 */ .form-control, .form-select { border: 1px solid var(--color-border); border-radius: var(--radius-md); padding: 0.625rem 1rem; font-size: 1rem; transition: border-color var(--transition-fast); } .form-control:focus, .form-select:focus { border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(27, 79, 138, 0.1); } /* 이미지 최적화 */ img { max-width: 100%; height: auto; display: block; } img[loading="lazy"] { background-color: #f0f0f0; } /* 타이포그래피 */ h1, h2, h3, h4, h5, h6 { font-weight: 700; line-height: 1.25; color: var(--color-text); } h1 { font-size: clamp(1.75rem, 5vw, 3rem); } h2 { font-size: clamp(1.5rem, 4vw, 2.25rem); } h3 { font-size: clamp(1.25rem, 3vw, 1.75rem); } h4 { font-size: 1.25rem; } h5 { font-size: 1.1rem; } h6 { font-size: 1rem; } p { margin-bottom: var(--spacing-md); } a { color: var(--color-primary); text-decoration: none; transition: color var(--transition-fast); } a:hover { color: var(--color-cta); text-decoration: underline; } /* 리스트 */ .list-group-item { border-color: var(--color-border); padding: var(--spacing-md) var(--spacing-lg); } /* 모달 */ .modal-content { border: 1px solid var(--color-border); border-radius: var(--radius-lg); box-shadow: 0 10px 40px rgba(0, 0, 0, 0.16); } .modal-header { border-bottom: 1px solid var(--color-border); padding: var(--spacing-xl); } .modal-footer { border-top: 1px solid var(--color-border); padding: var(--spacing-xl); } /* 탭 */ .nav-tabs .nav-link { color: var(--color-text-muted); border-bottom: 3px solid transparent; margin-bottom: -3px; padding: var(--spacing-md) var(--spacing-lg); } .nav-tabs .nav-link:hover { color: var(--color-primary); border-color: transparent; } .nav-tabs .nav-link.active { color: var(--color-primary); border-bottom-color: var(--color-primary); background-color: transparent; } /* 페이지네이션 */ .pagination .page-link { border-color: var(--color-border); color: var(--color-primary); } .pagination .page-link:hover { background-color: var(--color-bg); border-color: var(--color-border); } .pagination .page-item.active .page-link { background-color: var(--color-primary); border-color: var(--color-primary); } /* 반응형 — 태블릿 이상 */ @media (min-width: 768px) { .container { max-width: 960px; } } /* 반응형 — 모바일 (375px ~) */ @media (max-width: 767.98px) { .hero-section { padding-top: 2rem; padding-bottom: 2rem; } .section { padding: 1.5rem 0; } .card-body { padding: 1rem; } .modal { padding: 0 !important; } .modal-dialog { margin: 0.5rem; } .btn { padding: 0.5rem 1rem; font-size: 0.95rem; } .nav-link { padding: 0.5rem 0.75rem !important; margin: 0 !important; } .section-title { font-size: 1.5rem; } } /* 초소형 화면 (max 375px) */ @media (max-width: 375px) { html { font-size: 14px; } .hero-section h1 { font-size: 1.25rem; } .card { margin-bottom: 1rem; } .container-fluid { padding-left: 0.75rem; padding-right: 0.75rem; } } /* 도움말 텍스트 */ .form-text { color: var(--color-text-muted); font-size: 0.875rem; margin-top: 0.25rem; }