mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 17:16:25 +00:00
UI 개선: 하단 여백 통일 및 가로 스크롤 제거
## 주요 변경사항
### 1. 하단 액션 바 여백 표준화 (common.css)
- `.has-action-bar` 클래스 신규 추가 (padding-bottom: 90px)
- 기존 개별 padding-bottom 설정 제거하여 중복 방지
- 액션 바 높이(80px) + 최소 여유 공간(10px)로 일관성 확보
### 2. 05-회의진행 화면 하단 여백 수정
- Flexbox 레이아웃으로 인한 과도한 여백 문제 해결
- `.main-content`를 flex container로 변경
- 자식 요소 `flex-shrink: 0` 적용으로 불필요한 공간 확장 방지
- 플로팅 버튼 위치 조정 (bottom: 96px)
### 3. 가로 스크롤 제거 (common.css)
- `body { overflow-x: hidden; }` 추가
- 세로 스크롤바로 인한 가로 스크롤 발생 방지
- 02-대시보드, 09-Todo관리 등 모든 화면에 적용
### 4. 액션 바 화면 통일 (03, 05, 06, 07, 10, 11)
- 모든 하단 액션 바 화면에 `has-action-bar` 클래스 적용
- 일관된 하단 여백(90px) 적용
## 영향 범위
- 전체 화면: 가로 스크롤 제거
- 액션 바 화면(6개): 하단 여백 통일
- 05번 화면: Flexbox 레이아웃 개선
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
0b3a73b6b8
commit
743a753364
@ -287,7 +287,7 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<!-- 메인 콘텐츠 -->
|
<!-- 메인 콘텐츠 -->
|
||||||
<main class="main-content">
|
<main class="main-content has-action-bar">
|
||||||
<form id="meeting-form" class="meeting-form">
|
<form id="meeting-form" class="meeting-form">
|
||||||
<!-- 기본 정보 -->
|
<!-- 기본 정보 -->
|
||||||
<section class="form-section">
|
<section class="form-section">
|
||||||
|
|||||||
@ -33,14 +33,22 @@
|
|||||||
gap: 0;
|
gap: 0;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
min-height: 0; /* Flexbox shrink 허용 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.main-content {
|
.main-content {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
padding: 0 var(--space-md) var(--space-md);
|
padding: 0 var(--space-md) 0;
|
||||||
background: var(--gray-50);
|
background: var(--gray-50);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 콘텐츠 영역이 남은 공간을 채우지 않도록 */
|
||||||
|
.main-content > * {
|
||||||
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.right-sidebar {
|
.right-sidebar {
|
||||||
@ -411,7 +419,7 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 100px;
|
bottom: 96px; /* 액션바(80px) + 여유(16px) */
|
||||||
right: 16px;
|
right: 16px;
|
||||||
width: 56px;
|
width: 56px;
|
||||||
height: 56px;
|
height: 56px;
|
||||||
@ -624,7 +632,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="main-layout">
|
<div class="main-layout">
|
||||||
<!-- Left: Main Content -->
|
<!-- Left: Main Content -->
|
||||||
<div class="main-content" style="margin-top: 0px;;">
|
<div class="main-content has-action-bar" style="margin-top: 0px;">
|
||||||
<!-- Meeting Sections (Tabs) -->
|
<!-- Meeting Sections (Tabs) -->
|
||||||
<div class="tabs" id="sectionTamain-contentbs">
|
<div class="tabs" id="sectionTamain-contentbs">
|
||||||
<div class="tab active" data-section="0" onclick="switchSection(0)">회의 개요</div>
|
<div class="tab active" data-section="0" onclick="switchSection(0)">회의 개요</div>
|
||||||
|
|||||||
@ -112,7 +112,7 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<!-- Main Content -->
|
<!-- Main Content -->
|
||||||
<main class="main-content">
|
<main class="main-content has-action-bar">
|
||||||
<!-- Progress Bar -->
|
<!-- Progress Bar -->
|
||||||
<div class="progress-container">
|
<div class="progress-container">
|
||||||
<div class="progress-header">
|
<div class="progress-header">
|
||||||
|
|||||||
@ -225,7 +225,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="page">
|
<div class="page">
|
||||||
<div class="container">
|
<div class="container has-action-bar">
|
||||||
<!-- 페이지 헤더 -->
|
<!-- 페이지 헤더 -->
|
||||||
<div class="page-header">
|
<div class="page-header">
|
||||||
<h1>✅ 회의가 종료되었습니다</h1>
|
<h1>✅ 회의가 종료되었습니다</h1>
|
||||||
|
|||||||
@ -82,14 +82,12 @@
|
|||||||
.main-content {
|
.main-content {
|
||||||
margin-top: 112px;
|
margin-top: 112px;
|
||||||
padding: var(--space-md);
|
padding: var(--space-md);
|
||||||
padding-bottom: 120px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 데스크톱: 메인 콘텐츠 조정 */
|
/* 데스크톱: 메인 콘텐츠 조정 */
|
||||||
@media (min-width: 768px) {
|
@media (min-width: 768px) {
|
||||||
.main-content {
|
.main-content {
|
||||||
padding: var(--space-xl);
|
padding: var(--space-xl);
|
||||||
padding-bottom: var(--space-xl);
|
|
||||||
max-width: 1200px;
|
max-width: 1200px;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
@ -460,20 +458,24 @@
|
|||||||
|
|
||||||
.filter-btn {
|
.filter-btn {
|
||||||
padding: 8px 16px;
|
padding: 8px 16px;
|
||||||
border: 1px solid var(--gray-300);
|
border: none;
|
||||||
background: var(--white);
|
background: var(--gray-100);
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
font-size: var(--font-small);
|
font-size: var(--font-small);
|
||||||
color: var(--gray-700);
|
color: var(--gray-700);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
transition: all var(--transition-fast);
|
transition: all var(--transition-fast);
|
||||||
|
font-weight: var(--font-weight-medium);
|
||||||
}
|
}
|
||||||
|
|
||||||
.filter-btn.active {
|
.filter-btn.active {
|
||||||
background: var(--primary);
|
background: var(--primary);
|
||||||
color: var(--white);
|
color: var(--white);
|
||||||
border-color: var(--primary);
|
}
|
||||||
|
|
||||||
|
.filter-btn:hover:not(.active) {
|
||||||
|
background: var(--gray-200);
|
||||||
}
|
}
|
||||||
|
|
||||||
.todo-group {
|
.todo-group {
|
||||||
@ -507,63 +509,6 @@
|
|||||||
margin-bottom: var(--space-xs);
|
margin-bottom: var(--space-xs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 원형 진행 바 - 모바일에서 축소 */
|
|
||||||
.circular-progress {
|
|
||||||
width: 60px;
|
|
||||||
height: 60px;
|
|
||||||
margin: 0 auto;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.circular-progress svg {
|
|
||||||
width: 80px;
|
|
||||||
height: 80px;
|
|
||||||
transform: rotate(-90deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
.circular-progress circle {
|
|
||||||
fill: none;
|
|
||||||
stroke-width: 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.circular-progress .bg-circle {
|
|
||||||
stroke: var(--gray-300);
|
|
||||||
}
|
|
||||||
|
|
||||||
.circular-progress .progress-circle {
|
|
||||||
stroke: var(--primary);
|
|
||||||
stroke-linecap: round;
|
|
||||||
transition: stroke-dashoffset 1s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.circular-progress-text {
|
|
||||||
position: absolute;
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
transform: translate(-50%, -50%);
|
|
||||||
font-size: var(--font-h3);
|
|
||||||
font-weight: var(--font-weight-bold);
|
|
||||||
color: var(--primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 데스크톱에서 원형 진행 바 크기 복원 */
|
|
||||||
@media (min-width: 768px) {
|
|
||||||
.circular-progress {
|
|
||||||
width: 80px;
|
|
||||||
height: 80px;
|
|
||||||
margin-bottom: var(--space-sm);
|
|
||||||
}
|
|
||||||
|
|
||||||
.circular-progress svg {
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.circular-progress circle {
|
|
||||||
stroke-width: 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Todo 진행상황 - 09-Todo관리 스타일 적용 */
|
/* Todo 진행상황 - 09-Todo관리 스타일 적용 */
|
||||||
.todo-filters {
|
.todo-filters {
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -775,7 +720,7 @@
|
|||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<!-- 메인 콘텐츠 -->
|
<!-- 메인 콘텐츠 -->
|
||||||
<main class="main-content">
|
<main class="main-content has-action-bar">
|
||||||
<!-- 기본 정보 카드 -->
|
<!-- 기본 정보 카드 -->
|
||||||
<div class="info-card">
|
<div class="info-card">
|
||||||
<div class="meeting-basic-info">
|
<div class="meeting-basic-info">
|
||||||
@ -1094,14 +1039,13 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 전체 진행률 -->
|
<!-- 전체 진행률 -->
|
||||||
<div style="text-align: center; margin-bottom: var(--space-lg);">
|
<div style="margin-bottom: var(--space-lg);">
|
||||||
<div class="circular-progress">
|
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-xs);">
|
||||||
<svg>
|
<span style="font-size: var(--font-body); font-weight: var(--font-weight-medium); color: var(--gray-900);">전체 진행률</span>
|
||||||
<circle class="bg-circle" cx="40" cy="40" r="36"></circle>
|
<span style="font-size: var(--font-body); font-weight: var(--font-weight-bold); color: var(--primary);">40%</span>
|
||||||
<circle class="progress-circle" cx="40" cy="40" r="36"
|
</div>
|
||||||
stroke-dasharray="226" stroke-dashoffset="90"></circle>
|
<div style="width: 100%; height: 8px; background: var(--gray-200); border: 1px solid var(--gray-300); border-radius: 4px; overflow: hidden;">
|
||||||
</svg>
|
<div style="width: 40%; height: 100%; background: var(--primary); transition: width 0.3s ease;"></div>
|
||||||
<div class="circular-progress-text">40%</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div style="font-size: var(--font-caption); color: var(--gray-600); margin-top: var(--space-xs);">
|
<div style="font-size: var(--font-caption); color: var(--gray-600); margin-top: var(--space-xs);">
|
||||||
2 / 5 완료
|
2 / 5 완료
|
||||||
@ -1109,11 +1053,18 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="todo-filters">
|
<div class="todo-filters">
|
||||||
<button class="filter-btn active">전체 (5)</button>
|
<button class="filter-btn active" data-filter="all" onclick="filterTodos('all')">
|
||||||
<button class="filter-btn">시작 전 (1)</button>
|
전체 (<span id="filterAllCount">5</span>)
|
||||||
<button class="filter-btn">지연 (1)</button>
|
</button>
|
||||||
<button class="filter-btn">진행 중 (2)</button>
|
<button class="filter-btn" data-filter="overdue" onclick="filterTodos('overdue')">
|
||||||
<button class="filter-btn">완료 (2)</button>
|
지연 (<span id="filterOverdueCount">1</span>)
|
||||||
|
</button>
|
||||||
|
<button class="filter-btn" data-filter="urgent" onclick="filterTodos('urgent')">
|
||||||
|
마감 임박 (<span id="filterUrgentCount">2</span>)
|
||||||
|
</button>
|
||||||
|
<button class="filter-btn" data-filter="completed" onclick="filterTodos('completed')">
|
||||||
|
완료 (<span id="filterCompletedCount">2</span>)
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Todo 카드 리스트 -->
|
<!-- Todo 카드 리스트 -->
|
||||||
@ -1468,6 +1419,9 @@
|
|||||||
// Todo 편집 ID
|
// Todo 편집 ID
|
||||||
let editingTodoId = null;
|
let editingTodoId = null;
|
||||||
|
|
||||||
|
// 현재 필터
|
||||||
|
let currentFilter = 'all';
|
||||||
|
|
||||||
// 탭 전환
|
// 탭 전환
|
||||||
const tabs = document.querySelectorAll('.tab');
|
const tabs = document.querySelectorAll('.tab');
|
||||||
const tabContents = document.querySelectorAll('.tab-content');
|
const tabContents = document.querySelectorAll('.tab-content');
|
||||||
@ -1486,15 +1440,33 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// 필터 버튼
|
/**
|
||||||
const filterBtns = document.querySelectorAll('.filter-btn');
|
* D-day 계산 (09-Todo관리와 동일)
|
||||||
filterBtns.forEach(btn => {
|
*/
|
||||||
btn.addEventListener('click', () => {
|
function calculateDday(dueDate) {
|
||||||
const group = btn.parentElement;
|
const today = new Date();
|
||||||
group.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
|
today.setHours(0, 0, 0, 0);
|
||||||
btn.classList.add('active');
|
const due = new Date(dueDate);
|
||||||
|
due.setHours(0, 0, 0, 0);
|
||||||
|
const diffTime = due - today;
|
||||||
|
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
||||||
|
return diffDays;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Todo 필터링 (09-Todo관리와 동일)
|
||||||
|
*/
|
||||||
|
function filterTodos(filter) {
|
||||||
|
currentFilter = filter;
|
||||||
|
|
||||||
|
// 탭 활성화
|
||||||
|
document.querySelectorAll('.filter-btn').forEach(btn => {
|
||||||
|
btn.classList.remove('active');
|
||||||
});
|
});
|
||||||
});
|
document.querySelector(`.filter-btn[data-filter="${filter}"]`).classList.add('active');
|
||||||
|
|
||||||
|
renderTodoList();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Todo 편집 모달 열기
|
* Todo 편집 모달 열기
|
||||||
@ -1670,44 +1642,87 @@
|
|||||||
const completed = meetingTodos.filter(t => t.status === 'completed').length;
|
const completed = meetingTodos.filter(t => t.status === 'completed').length;
|
||||||
const percent = total > 0 ? Math.round((completed / total) * 100) : 0;
|
const percent = total > 0 ? Math.round((completed / total) * 100) : 0;
|
||||||
|
|
||||||
// 원형 진행 바 업데이트
|
// 수평 진행 바 업데이트 (선택자를 더 구체적으로 지정)
|
||||||
const progressCircle = document.querySelector('.progress-circle');
|
const progressSection = document.querySelector('.dashboard-section:nth-child(3)');
|
||||||
const progressText = document.querySelector('.circular-progress-text');
|
if (progressSection) {
|
||||||
const completionText = document.querySelector('.circular-progress').nextElementSibling;
|
const progressBar = progressSection.querySelector('div[style*="width: 40%"]');
|
||||||
|
const progressPercent = progressSection.querySelector('span[style*="color: var(--primary)"]');
|
||||||
|
const completionText = progressSection.querySelector('div[style*="font-size: var(--font-caption)"]');
|
||||||
|
|
||||||
if (progressCircle && progressText) {
|
if (progressBar) {
|
||||||
const circumference = 2 * Math.PI * 36; // r=36
|
progressBar.style.width = `${percent}%`;
|
||||||
const offset = circumference - (percent / 100) * circumference;
|
}
|
||||||
progressCircle.style.strokeDashoffset = offset;
|
|
||||||
progressText.textContent = `${percent}%`;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (completionText) {
|
if (progressPercent) {
|
||||||
completionText.querySelector('div').textContent = `${completed} / ${total} 완료`;
|
progressPercent.textContent = `${percent}%`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (completionText) {
|
||||||
|
completionText.textContent = `${completed} / ${total} 완료`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Todo 리스트 렌더링 (필터 적용)
|
* Todo 리스트 렌더링 (09-Todo관리와 동일한 필터 및 정렬)
|
||||||
*/
|
*/
|
||||||
function renderTodoList() {
|
function renderTodoList() {
|
||||||
// 현재 활성 필터 확인
|
|
||||||
const activeFilterBtn = document.querySelector('.filter-group .filter-btn.active');
|
|
||||||
const currentFilter = activeFilterBtn ? activeFilterBtn.textContent.trim().split(' ')[0] : '전체';
|
|
||||||
|
|
||||||
// 필터 적용된 Todo 목록 가져오기
|
|
||||||
let filteredTodos = meetingTodos;
|
let filteredTodos = meetingTodos;
|
||||||
|
|
||||||
if (currentFilter === '완료') {
|
// 필터 적용 (09-Todo관리와 동일)
|
||||||
|
if (currentFilter === 'completed') {
|
||||||
filteredTodos = meetingTodos.filter(t => t.status === 'completed');
|
filteredTodos = meetingTodos.filter(t => t.status === 'completed');
|
||||||
} else if (currentFilter === '진행') {
|
} else if (currentFilter === 'overdue') {
|
||||||
filteredTodos = meetingTodos.filter(t => t.status === 'in_progress');
|
filteredTodos = meetingTodos.filter(t => {
|
||||||
} else if (currentFilter === '시작') {
|
const dday = calculateDday(t.dueDate);
|
||||||
filteredTodos = meetingTodos.filter(t => t.status === 'not_started');
|
return dday < 0 && t.status !== 'completed';
|
||||||
|
});
|
||||||
|
} else if (currentFilter === 'urgent') {
|
||||||
|
filteredTodos = meetingTodos.filter(t => {
|
||||||
|
const dday = calculateDday(t.dueDate);
|
||||||
|
return dday >= 0 && dday <= 3 && t.status !== 'completed';
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 정렬: 완료되지 않은 것 우선, 마감일 순 (09-Todo관리와 동일)
|
||||||
|
filteredTodos.sort((a, b) => {
|
||||||
|
if (a.status === 'completed' && b.status !== 'completed') return 1;
|
||||||
|
if (a.status !== 'completed' && b.status === 'completed') return -1;
|
||||||
|
return new Date(a.dueDate) - new Date(b.dueDate);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 필터별 개수 업데이트
|
||||||
|
updateFilterCounts();
|
||||||
|
|
||||||
// 실제 DOM 업데이트는 필요시 구현
|
// 실제 DOM 업데이트는 필요시 구현
|
||||||
// 프로토타입에서는 페이지 새로고침이나 동적 렌더링 로직 추가 필요
|
// 프로토타입에서는 페이지 새로고침이나 동적 렌더링 로직 추가 필요
|
||||||
|
console.log('Filtered Todos:', filteredTodos);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 필터별 개수 업데이트
|
||||||
|
*/
|
||||||
|
function updateFilterCounts() {
|
||||||
|
const total = meetingTodos.length;
|
||||||
|
const completed = meetingTodos.filter(t => t.status === 'completed').length;
|
||||||
|
const urgent = meetingTodos.filter(t => {
|
||||||
|
const dday = calculateDday(t.dueDate);
|
||||||
|
return dday >= 0 && dday <= 3 && t.status !== 'completed';
|
||||||
|
}).length;
|
||||||
|
const overdue = meetingTodos.filter(t => {
|
||||||
|
const dday = calculateDday(t.dueDate);
|
||||||
|
return dday < 0 && t.status !== 'completed';
|
||||||
|
}).length;
|
||||||
|
|
||||||
|
const filterAllCount = document.getElementById('filterAllCount');
|
||||||
|
const filterOverdueCount = document.getElementById('filterOverdueCount');
|
||||||
|
const filterUrgentCount = document.getElementById('filterUrgentCount');
|
||||||
|
const filterCompletedCount = document.getElementById('filterCompletedCount');
|
||||||
|
|
||||||
|
if (filterAllCount) filterAllCount.textContent = total;
|
||||||
|
if (filterOverdueCount) filterOverdueCount.textContent = overdue;
|
||||||
|
if (filterUrgentCount) filterUrgentCount.textContent = urgent;
|
||||||
|
if (filterCompletedCount) filterCompletedCount.textContent = completed;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1715,6 +1730,7 @@
|
|||||||
*/
|
*/
|
||||||
function initPage() {
|
function initPage() {
|
||||||
updateTodoProgress();
|
updateTodoProgress();
|
||||||
|
updateFilterCounts();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 페이지 로드 시 초기화
|
// 페이지 로드 시 초기화
|
||||||
|
|||||||
@ -275,7 +275,7 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<!-- 메인 콘텐츠 -->
|
<!-- 메인 콘텐츠 -->
|
||||||
<main class="main-content">
|
<main class="main-content has-action-bar">
|
||||||
<!-- 기본 정보 -->
|
<!-- 기본 정보 -->
|
||||||
<div class="info-card">
|
<div class="info-card">
|
||||||
<!-- 회의 제목 (편집 가능) -->
|
<!-- 회의 제목 (편집 가능) -->
|
||||||
|
|||||||
@ -98,6 +98,7 @@ body {
|
|||||||
color: var(--gray-700);
|
color: var(--gray-700);
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
background: var(--gray-100);
|
background: var(--gray-100);
|
||||||
|
overflow-x: hidden; /* 가로 스크롤 방지 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========================================
|
/* ========================================
|
||||||
@ -1216,7 +1217,6 @@ input[type="date"]::-webkit-calendar-picker-indicator {
|
|||||||
.main-content {
|
.main-content {
|
||||||
margin-top: 64px;
|
margin-top: 64px;
|
||||||
padding: var(--space-md);
|
padding: var(--space-md);
|
||||||
padding-bottom: 100px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 반응형: 데스크톱에서 중앙 정렬 */
|
/* 반응형: 데스크톱에서 중앙 정렬 */
|
||||||
@ -1225,7 +1225,6 @@ input[type="date"]::-webkit-calendar-picker-indicator {
|
|||||||
max-width: 900px;
|
max-width: 900px;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
padding-bottom: var(--space-xxl);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 사이드바가 있는 경우 */
|
/* 사이드바가 있는 경우 */
|
||||||
@ -1611,6 +1610,18 @@ input[type="date"]::-webkit-calendar-picker-indicator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 하단 액션 바가 있는 페이지를 위한 공통 여백 */
|
||||||
|
.has-action-bar {
|
||||||
|
padding-bottom: 90px !important; /* 액션 바 높이(80px) + 최소 여유 공간(10px) */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 데스크톱에서도 동일한 여백 유지 */
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.has-action-bar {
|
||||||
|
padding-bottom: 90px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* ========================================
|
/* ========================================
|
||||||
LAYOUT PATTERNS
|
LAYOUT PATTERNS
|
||||||
======================================== */
|
======================================== */
|
||||||
@ -1647,7 +1658,6 @@ input[type="date"]::-webkit-calendar-picker-indicator {
|
|||||||
.layout-sidebar-header .main-content {
|
.layout-sidebar-header .main-content {
|
||||||
margin-top: 64px;
|
margin-top: 64px;
|
||||||
padding: var(--space-md);
|
padding: var(--space-md);
|
||||||
padding-bottom: 80px;
|
|
||||||
background: var(--gray-50);
|
background: var(--gray-50);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
@ -1663,7 +1673,6 @@ input[type="date"]::-webkit-calendar-picker-indicator {
|
|||||||
.layout-sidebar-header .main-content {
|
.layout-sidebar-header .main-content {
|
||||||
margin-left: 240px; /* 사이드바 너비만큼 왼쪽 여백 추가 */
|
margin-left: 240px; /* 사이드바 너비만큼 왼쪽 여백 추가 */
|
||||||
padding: var(--space-lg);
|
padding: var(--space-lg);
|
||||||
padding-bottom: var(--space-xl);
|
|
||||||
max-width: calc(100vw - 240px);
|
max-width: calc(100vw - 240px);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1766,7 +1775,6 @@ input[type="date"]::-webkit-calendar-picker-indicator {
|
|||||||
.layout-header-only .main-content {
|
.layout-header-only .main-content {
|
||||||
margin-top: 64px;
|
margin-top: 64px;
|
||||||
padding: var(--space-md);
|
padding: var(--space-md);
|
||||||
padding-bottom: 80px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 768px) {
|
@media (min-width: 768px) {
|
||||||
@ -1776,7 +1784,6 @@ input[type="date"]::-webkit-calendar-picker-indicator {
|
|||||||
|
|
||||||
.layout-header-only .main-content {
|
.layout-header-only .main-content {
|
||||||
padding: var(--space-xl);
|
padding: var(--space-xl);
|
||||||
padding-bottom: var(--space-xl);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user