@charset "utf-8";
/* [2026-08 메인 인덱스 리뉴얼] 히어로 아래 새 섹션 전용 스타일 (Quick Menu ~ 브랜드/뉴스레터).
   본문 컨테이너 폭은 기존 .mainContents(max-width:1200px)를 그대로 재사용하며, 이 파일에서는
   새 폭 변수를 도입하지 않는다. 색상은 기존 main_gallery.css/도네이션 톤(#132b45 남색,
   #c0392b 브랜드 레드, #2f9e44 그린, 회색 계열)을 그대로 따른다. */

/* ===================== 공통 섹션 ===================== */
.ml_sec { margin-bottom: 34px; }
.ml_sec:last-child { margin-bottom: 0; }
.ml_sec_head { display: flex; align-items: center; gap: 10px; margin: 0 0 16px; }
.ml_sec_head h3 { font-size: 20px; font-weight: 800; color: #222; margin: 0; flex-shrink: 0; }
.ml_sec_head .ml_more { margin-left: auto; font-size: 13px; color: #999; flex-shrink: 0; }
.ml_sec_head .ml_more:hover { color: #666; }
/* [2026-08] 관리자 진입 버튼 - 히어로 슬라이더(.mainVisualImage, main.css에서 이미
   position:relative + overflow:hidden 지정됨) 우하단에 떠 있는 오버레이 톱니바퀴 버튼.
   히어로 자체 마크업/로직은 건드리지 않고 버튼 한 개만 그 안에 배치 - 위치만
   .ml_admin_gear_hero로 지정하고, 크기/색 등 기본 모양은 기존 .ml_admin_gear를 그대로 재사용. */
.ml_admin_gear {
	width: 32px; height: 32px; padding: 0;
	display: flex; align-items: center; justify-content: center;
	font-size: 15px;
	background: #999; color: #fff; border: none; border-radius: 50%; cursor: pointer;
}
.ml_admin_gear:hover { background: #777; }
.ml_admin_gear_hero {
	position: absolute; right: 16px; bottom: 16px; z-index: 20;
	background: rgba(0,0,0,0.45);
}
.ml_admin_gear_hero:hover { background: rgba(0,0,0,0.65); }
.ml_empty { padding: 26px 10px; text-align: center; color: #aaa; font-size: 13px; background: #f7f8fa; border-radius: 10px; margin: 0; }

/* ===================== Quick Menu =====================
   [2026-08 수정] 카미앤베스_메인화면_소스/app/globals.css의 .shortcut-wrap/.shortcut/.shortcut-icon을
   그대로 반영 - 박스 6개를 따로 띄우던 것에서 흰 카드 하나 + 세로 구분선, 아이콘(좌)-텍스트(우)
   가로 배치, 둥근 사각형 아이콘 + 자연스러운 그린/골드 톤 배색으로 변경. 아이콘 자체는 원본이
   장식용 유니코드 기호(♟▣◇♥⌂◆)였던 자리를 그대로 각 서비스에 맞는 fontawesome 아이콘으로 대체. */
/* [2026-08-22 수정] 관리자가 항목을 자유롭게 추가/삭제할 수 있게 되면서, 고정 6칸 그리드
   (grid-template-columns: repeat(6,1fr))는 항목 수가 6개가 아닐 때 빈 칸이 생기거나 항목이
   한쪽으로 몰리는 문제가 있었다. flex + flex-basis 방식으로 바꿔 몇 개가 오든 한 줄 안에서는
   flex-grow가 남는 공간을 항목 수만큼 똑같이 나눠줘서 항상 같은 비율로 정렬되고, 다 못 들어가면
   다음 줄로 자연스럽게 넘어간다(그 줄 안에서도 동일 비율 유지) - 항목 수를 아는 PHP/JS 쪽 계산이
   전혀 필요 없다. */
.ml_quickmenu {
	min-height: 86px; margin: 0 0 40px; padding: 11px 14px;
	display: flex; flex-wrap: wrap;
	border-radius: 12px; background: #fff; box-shadow: 0 5px 18px rgba(38,49,37,0.08);
}
.ml_qm_item {
	min-height: 62px; padding: 0 16px;
	display: flex; align-items: center; gap: 14px;
	flex: 1 0 160px;
	border-right: 1px solid #ecefe8;
}
.ml_qm_item:last-child { border-right: none; }
/* [2026-08-22 수정] 관리자가 아이콘 이미지를 직접 업로드하고 가로 픽셀까지 지정할 수 있게 되면서,
   고정 크기 원형 배지 + 배경색 클래스(ml_qm_icon1~6) 방식을 버리고, 이미지 자연 비율 그대로
   보여주는 유연한 컨테이너로 바꿨다(가로 크기는 관리자가 입력한 px가 <img> 인라인 style로 그대로
   적용된다 - main_lower_render_quickmenu_item() 참고). */
.ml_qm_icon {
	display: flex; align-items: center; justify-content: center; flex-shrink: 0;
}
.ml_qm_icon img { display: block; border-radius: 8px; }
.ml_qm_text { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.ml_qm_text b { font-size: 14px; color: #222; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ml_qm_text small { color: #747a75; font-size: 11px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ===================== 2단 레이아웃 (본문 + 광고 컬럼) ===================== */
/* [2026-08 버그수정] 테마 공통 css/main.css의 .mainContents{overflow:hidden}(레거시 float
   clearfix용)이 .ml_split의 조상이라, position:sticky를 쓰는 자식(.ml_ad_col)이 전혀 스크롤을
   따라가지 못하고 있었다(조상 중 하나라도 overflow가 visible이 아니면 sticky가 항상 깨짐).
   main_lower.css는 메인 페이지에만 로드되므로 여기서 덮어써도 다른 페이지의 .mainContents에는
   영향이 없다. add_stylesheet() 출력 순서와 무관하게 항상 이기도록 !important를 붙인다. */
.mainContents { overflow: visible !important; }
.ml_split { position: relative; display: flex; gap: 28px; align-items: flex-start; overflow: visible !important; }
/* [2026-08 버그수정 #2 - 진짜 원인] 위 .mainContents 수정 후에도 실제 배포 사이트에서는 여전히
   광고 컬럼이 스크롤을 따라가지 않았다. 실사이트(kaminbeth.com)를 직접 브라우저로 열어 확인한
   결과, <body>에 overflow:auto가 걸려 있었고 이게 sticky의 "스크롤 조상"으로 잡히면서 sticky가
   전혀 동작하지 않는 크롬 특유의 문제였다(조상 체인 어디든 overflow가 visible이 아니면 sticky가
   깨진다는 규칙이 body/html 레벨에도 그대로 적용됨). 관리자 모달 등에서 배경 스크롤을 막을 때
   JS로 body.style.overflow='hidden'을 인라인으로 직접 설정하므로, 그 기능을 깨뜨리지 않도록
   !important 없이 셀렉터 특이성만 살짝 올려서(body.body) 기본 상태에서만 visible로 덮어쓴다 -
   모달이 열려 인라인 스타일이 걸리면 인라인이 항상 이겨서 스크롤 잠금은 그대로 동작한다. */
body.body { overflow: visible; }
.ml_main_col { flex: 1; min-width: 0; }
/* [2026-08] 오른쪽 광고 컬럼이 페이지 스크롤을 따라 함께 움직이도록 position:sticky를 사용한다.
   상단 리밋(히어로 영역)은 top 오프셋 자체가 히어로보다 아래(.ml_split 시작 지점)이므로 자연히
   넘어가지 않고, 하단 리밋(하단 배너)은 sticky의 containing block인 .ml_split의 바닥에서 자동으로
   멈춘다(.ml_main_col이 .ml_ad_col보다 훨씬 길어서 하단 배너 영역과는 항상 떨어져 멈춘다).
   예전에 쓰던 max-height + overflow-y:auto(내부 스크롤) 방식은 광고 컬럼 안에서 마우스를 올려야만
   스크롤되어 "화면을 따라다니는" 느낌이 나지 않았으므로 제거했다. */
.ml_ad_col {
	width: 220px; flex-shrink: 0; display: flex; flex-direction: column; gap: 14px;
	position: sticky; top: 88px; align-self: flex-start; z-index: 5;
}

/* ===================== 커뮤니티 인기 이야기 =====================
   [2026-08 디자인 시안 반영] 시안은 카드 5개가 PC에서 한 줄에 다 보이는 구성이라 3열 →
   5열로 늘리고, 카드가 좁아진 만큼 썸네일을 더 정사각에 가깝게, 제목/메타 폰트를 살짝 줄였다. */
/* [2026-08 개편] 메인화면 노출(관리자 글쓰기 체크) / 커뮤니티 최근글 / 운영자 추천, 3단 구성.
   각 그룹은 동일한 5열 카드 그리드를 그대로 재사용한다. 그룹 타이틀은 화면에 노출하지 않고
   (사용자 요청) 그룹 사이 여백만 남겨 시각적으로 구분한다. */
.ml_popular_group { margin-bottom: 22px; }
.ml_popular_group:last-child { margin-bottom: 0; }
/* [2026-08-22 요청 반영] 가로보기(태블릿/랜드스케이프폭)에서 카드가 트랙 밖으로 밀려 반쯤 잘려
   보이던 버그 - repeat(N, 1fr) 트랙은 기본적으로 min-width:auto라서, 안의 내용(이미지 등)이
   트랙 계산폭보다 크면 그리드 자체가 옆으로 넘쳐버릴 수 있다. minmax(0, 1fr)로 바꿔 각 트랙이
   내용 크기와 무관하게 항상 자기 몫만큼만 차지하도록(넘치는 대신 안에서 줄어들도록) 고정한다. */
.ml_popular_grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 14px; }
.ml_popular_card {
	display: block; border: 1px solid #eee; border-radius: 14px; overflow: hidden; background: #fff;
	transition: box-shadow 0.2s ease;
}
.ml_popular_card:hover { box-shadow: 0 8px 22px rgba(0,0,0,0.09); }
.ml_popular_thumb {
	position: relative; width: 100%; padding-top: 92%;
	background: #f3f4f7 center center / cover no-repeat;
}
/* [2026-08 버그수정] 썸네일(본문 이미지/유튜브)이 없는 글은 회색 박스만 덩그러니 보이던 것을,
   카미앤베스 로고를 작게 중앙에 표시해 빈 느낌을 줄인다. 처음 추가했을 때 로고 원본 이미지가
   그대로(작게 지정 안 된 크기로) 카드 전체를 채워버리는 레이아웃 깨짐이 있었어서, index.php의
   img 태그에도 동일한 값을 인라인 style로 직접 넣어 이중 안전장치를 뒀다 - 여기 CSS는 !important로
   혹시 있을 다른 규칙과의 충돌도 확실히 이기도록 한다. */
.ml_popular_thumb_logo {
	position: absolute !important; top: 50% !important; left: 50% !important;
	transform: translate(-50%, -50%) !important;
	width: 26% !important; max-width: 40px !important; height: auto !important;
	opacity: .32 !important; pointer-events: none !important;
}
.ml_pin_badge {
	position: absolute; left: 10px; top: 10px; width: 26px; height: 26px; border-radius: 50%;
	background: #c0392b; color: #fff; display: flex; align-items: center; justify-content: center;
	font-size: 12px;
}
.ml_popular_body { padding: 12px 13px 14px; }
.ml_popular_cat {
	display: inline-block; margin-bottom: 8px; padding: 3px 10px; border-radius: 20px;
	background: #f3f4f7; color: #666; font-size: 10.5px; font-weight: 700;
}
/* 카테고리 칩 색상 - 시안 이미지의 일상(초록)/질문(주황)/여행(파랑)/정보(회색)/특별한날(보라) 톤을
   실제 데이터 태그(main_lower_category_class())에 매핑
   [2026-08-24 접근성 수정] 글자색을 톤은 유지한 채 살짝 더 진하게 조정 - 배경 대비 명도 대비가
   WCAG AA 기준(작은 텍스트 4.5:1) 이상이 되도록 함. 특히 기존 주황(c2)은 2.56:1로 기준 미달이었음. */
.ml_popular_cat.ml_cat_c1 { background: #eaf3e2; color: #507832; }
.ml_popular_cat.ml_cat_c2 { background: #fdeee0; color: #9c5e1a; }
.ml_popular_cat.ml_cat_c3 { background: #e3eefc; color: #2f6eae; }
.ml_popular_cat.ml_cat_c4 { background: #eef0f2; color: #676d7b; }
.ml_popular_cat.ml_cat_c5 { background: #fdecec; color: #c0392b; }
.ml_popular_cat.ml_cat_c6 { background: #f3ecfa; color: #944eb1; }
.ml_popular_title {
	margin: 0 0 9px; font-size: 13.5px; font-weight: 700; color: #222; line-height: 1.4;
	display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.ml_popular_meta { display: flex; align-items: center; gap: 10px; font-size: 11.5px; color: #999; }
.ml_popular_meta i { margin-right: 3px; }
.ml_popular_nick { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ===================== 우리 아이는 오늘? ===================== */
.ml_daily {
	background: #f7f8fa; border-radius: 16px; padding: 24px 26px;
}
.ml_daily_guest { text-align: center; padding: 18px 10px; }
.ml_daily_guest p { margin: 0 0 14px; font-size: 14.5px; color: #555; }
.ml_daily_login_btn {
	display: inline-block; padding: 10px 24px; background: #132b45; color: #fff;
	border-radius: 24px; font-size: 13.5px; font-weight: 700;
}
.ml_daily_login_btn:hover { background: #0d1e30; }
/* [2026-08 디자인 시안 반영] 제목/펫전환/토글 3개/기록버튼을 한 줄짜리 바로 배치 - 좁아지면
   자연스럽게 줄바꿈되도록 flex-wrap을 허용한다. */
.ml_daily_bar { display: flex; align-items: center; gap: 22px; flex-wrap: wrap; }
.ml_pet_switcher { position: relative; flex-shrink: 0; }
.ml_pet_switch_btn {
	display: flex; align-items: center; gap: 8px; padding: 6px 14px 6px 6px;
	background: #fff; border: 1px solid #e2e2e0; border-radius: 30px; cursor: pointer;
}
.ml_pet_switch_btn b { font-size: 13.5px; color: #222; }
.ml_pet_switch_btn i { color: #999; font-size: 11px; }
.ml_pet_avatar {
	width: 30px; height: 30px; border-radius: 50%; background: #ddd center center / cover no-repeat;
	flex-shrink: 0;
}
.ml_pet_switch_list {
	position: absolute; right: 0; top: calc(100% + 6px); z-index: 20; min-width: 160px;
	background: #fff; border: 1px solid #e2e2e0; border-radius: 10px; box-shadow: 0 8px 22px rgba(0,0,0,0.12);
	padding: 6px; max-height: 220px; overflow-y: auto;
}
.ml_pet_switch_item {
	display: flex; align-items: center; gap: 8px; width: 100%; padding: 8px 10px; border: none;
	background: none; border-radius: 8px; font-size: 13px; color: #333; text-align: left; cursor: pointer;
}
.ml_pet_switch_item:hover { background: #f3f4f7; }
/* [2026-08 디자인 시안 반영] 토글 버튼을 알약 모양 박스에서 "아이콘+텍스트만" 있는 가벼운
   형태로 - 시안처럼 바 배경 위에 바로 얹혀있는 느낌으로 바꾸고, on 상태만 초록 텍스트로
   강조한다(배경/테두리 박스는 없앰). */
.ml_daily_toggles { display: flex; flex: 1; flex-wrap: wrap; gap: 26px; min-width: 200px; position: relative; }
.ml_toggle_btn {
	display: inline-flex; align-items: center; gap: 7px; padding: 0; border: none; background: none;
	font-size: 13.5px; font-weight: 700; color: #888; cursor: pointer;
}
.ml_toggle_btn i { font-size: 14px; color: #c9ab7a; }
.ml_toggle_btn.ml_on { color: #2f9e44; }
.ml_toggle_btn.ml_on i { color: #2f9e44; }
/* "기록하기"는 시안처럼 필박스가 아니라 살짝 각진 주황 버튼으로 오른쪽 끝에 고정 */
.ml_record_btn {
	display: inline-flex; align-items: center; gap: 6px; margin-left: auto; flex-shrink: 0;
	padding: 10px 20px; background: #e6a23d; color: #fff; border: none; border-radius: 8px;
	font-size: 13.5px; font-weight: 700; font-family: inherit; cursor: pointer;
}
.ml_record_btn:hover { background: #cf8c2a; }
/* [2026-08-25 추가] 선택된 동물이 오늘 이미 기록을 저장했으면 "기록하기" 버튼 글자를 흐리게
   표시한다(클릭은 그대로 되고 다시 기록할 수도 있음 - 안내용 표시). 배경/글자색이 화면 폭마다
   다른 여러 버튼 스킨(아래 미디어쿼리들 참고)에 전부 똑같이 먹히도록 특정 색상 대신 opacity를
   쓴다 - .ml_record_btn 클래스 자체는 그대로 유지되므로 하나의 규칙으로 모든 스킨에 적용된다. */
.ml_record_btn.ml_record_btn_done { opacity: 0.5; }

/* [2026-08 추가, 2026-08-22 위치 이동] 며칠 연속 기록 중 텍스트 + "기록 확인" 버튼 + 포인트 토스트.
   요청에 따라 별도 줄(문단)이 아니라 .ml_daily_bar 안에서 '동물 선택' 드롭다운(.ml_pet_switcher)
   바로 다음 자리로 옮김 - 데스크톱/태블릿(가로 한 줄, nowrap)에서는 스위처 옆에 나란히 붙고,
   모바일(.ml_daily_bar가 flex-direction:column으로 바뀌는 768px 이하)에서는 부모의
   align-items:stretch 덕분에 별도 width:100% 지정 없이도 자동으로 스위처 아래 자기 줄을 차지한다. */
.ml_daily_streak {
	font-size: 12.5px; font-weight: 700; color: #e8590c;
	display: inline-flex; align-items: center; gap: 10px; flex-wrap: wrap; flex-shrink: 0; white-space: nowrap;
}
.ml_daily_streak i { font-size: 12px; }
/* [2026-08-22 수정] "기록 확인" 버튼을 없애고 연속기록 문구(#mlDailyStreak) 자체를 클릭/키보드로
   눌러 달력 팝업을 열도록 통합 - 별도 버튼 없이도 클릭 가능함을 커서/포커스 표시로 안내한다. */
#mlDailyStreak {
	cursor: pointer; display: inline-flex; align-items: center; gap: 4px; border-radius: 4px;
}
#mlDailyStreak:hover { color: #cf5600; }
#mlDailyStreak:focus-visible { outline: 2px solid #e8590c; outline-offset: 2px; }
#mlDailyStreak .fa-chevron-right { font-size: 9px; color: #c9ab7a; }
/* [2026-08-25 추가] "다시 오늘부터 / 기록을 시작해보세요" 안내 문구를 두 줄로 표시. 부모(.ml_daily_streak)가
   white-space:nowrap을 쓰고 있어도 명시적 <br>로 강제 줄바꿈은 그대로 적용되지만, 혹시 모를 자동
   줄바꿈까지 정상 동작하도록 이 문구 안에서만 white-space를 normal로 되돌려둔다. */
.ml_daily_streak_start { display: inline-block; white-space: normal; line-height: 1.32; text-align: left; }
/* [2026-08-22 수정] 인라인 토스트를 "레이어(말풍선)" 형태로 교체 - 포인트 적립뿐 아니라 "다른
   가족이 이미 체크했어요" / "오늘의 포인트는 이미 수령하셨어요" 안내까지 같은 컴포넌트를
   재사용한다. 토글 바로 위에 살짝 떠 있는 느낌을 주기 위해 절대 위치 + 꼬리표(::after)로
   말풍선 모양을 만들고, type별로 색만 다르게 준다. */
.ml_layer_bubble {
	position: absolute; left: 0; bottom: calc(100% + 12px); z-index: 30;
	padding: 9px 15px; border-radius: 10px; font-size: 12.5px; font-weight: 700; color: #fff;
	white-space: nowrap; box-shadow: 0 8px 20px rgba(0,0,0,0.18);
	opacity: 0; transform: translateY(6px); pointer-events: none;
	transition: opacity 0.18s ease, transform 0.18s ease;
}
.ml_layer_bubble.ml_layer_show { opacity: 1; transform: translateY(0); }
.ml_layer_bubble::after {
	content: ''; position: absolute; top: 100%; left: 22px;
	border: 7px solid transparent;
}
.ml_layer_bubble--point { background: #e6a23d; }
.ml_layer_bubble--point::after { border-top-color: #e6a23d; }
.ml_layer_bubble--conflict { background: #e8590c; }
.ml_layer_bubble--conflict::after { border-top-color: #e8590c; }
.ml_layer_bubble--info { background: #4263eb; }
.ml_layer_bubble--info::after { border-top-color: #4263eb; }
/* [2026-08 추가] 기록 확인 팝업 - 사이트 다른 곳(현재 접속자 팝업 등)과 같은 시각적 패턴
   (반투명 배경 + 가운데 카드 + 우상단 닫기 버튼)을 재사용한다. */
.ml_daily_modal_overlay {
	position: fixed; inset: 0; z-index: 9999; background: rgba(0,0,0,0.45);
	align-items: center; justify-content: center; padding: 16px;
}
.ml_daily_modal_panel {
	position: relative; width: 100%; max-width: 340px; max-height: 85vh; overflow-y: auto;
	background: #fff; border-radius: 14px; padding: 22px 20px 20px; box-shadow: 0 10px 30px rgba(0,0,0,0.2);
}
.ml_daily_modal_close {
	position: absolute; top: 10px; right: 12px; border: none; background: none;
	font-size: 22px; line-height: 1; cursor: pointer; color: #888;
}
.ml_daily_modal_title { margin: 0 0 14px; font-size: 15px; font-weight: 800; color: #222; }
.ml_daily_cal_dow {
	display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; margin-bottom: 6px;
	font-size: 10.5px; color: #999; text-align: center;
}
.ml_daily_cal_grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.ml_cal_day {
	position: relative; display: flex; align-items: center; justify-content: center; aspect-ratio: 1 / 1;
	border-radius: 7px; font-size: 11.5px; color: #aaa; background: #f1f2f4;
}
.ml_cal_day.ml_cal_blank { background: none; }
.ml_cal_day.ml_cal_c1 { background: #d3f0dc; color: #2f9e44; }
.ml_cal_day.ml_cal_c2 { background: #a8e2bb; color: #22803a; }
.ml_cal_day.ml_cal_c3 { background: #51cf66; color: #fff; font-weight: 800; }
.ml_cal_day.ml_cal_today { box-shadow: inset 0 0 0 2px #132b45; font-weight: 800; }
/* 마일스톤(3·7·14·21·28·30일째) 날짜에만 붙는 작은 별 배지 - 채워진 별=그날 실제로 달성,
   빈 별=아직 오지 않았거나(미래) 이번 달 안에 하루 놓쳐서 못 채운 날짜 */
.ml_cal_star { position: absolute; top: -4px; right: -3px; font-size: 9px; color: #f08c00; }
.ml_daily_point_note { margin: 12px 0 0; font-size: 11px; color: #999; line-height: 1.5; }

/* [2026-08-22 추가] "기록하기" 팝업 - 펫다이어리 글쓰기(제목/본문/사진)를 iframe으로 담는 레이어.
   달력 팝업(.ml_daily_modal_*)과 같은 반투명 배경 + 가운데 카드 패턴을 재사용하되, 글쓰기 폼이라
   세로 공간이 더 필요해서 패널을 더 크게 잡는다. */
.ml_record_popup_overlay {
	/* [2026-08-22 수정] 상단 메뉴(#hd)가 z-index:9999로 고정되어 있어 팝업의 닫기 버튼이 메뉴에
	   가려지는 문제 - 사이트에서 "무조건 최상단"이 필요한 레이어(head.sub.php의 안내 팝업 등)와
	   같은 값으로 확실히 높여 메뉴 위에 오도록 한다. */
	position: fixed; inset: 0; z-index: 999999999; background: rgba(0,0,0,0.45);
	align-items: center; justify-content: center; padding: 16px;
}
.ml_record_popup_panel {
	position: relative; width: 100%; max-width: 520px; height: 85vh; max-height: 720px;
	background: #fff; border-radius: 14px; box-shadow: 0 10px 30px rgba(0,0,0,0.2); overflow: hidden;
}
.ml_record_popup_close {
	position: absolute; top: 8px; right: 10px; z-index: 1; border: none; background: rgba(255,255,255,0.9);
	width: 30px; height: 30px; border-radius: 50%; font-size: 20px; line-height: 1; cursor: pointer;
	color: #888; box-shadow: 0 1px 4px rgba(0,0,0,0.15);
}
#mlRecordPopupIframe { display: block; width: 100%; height: 100%; border: 0; }
@media (max-width: 600px) {
	.ml_record_popup_overlay { padding: 0; }
	.ml_record_popup_panel { max-width: none; width: 100%; height: 100%; max-height: none; border-radius: 0; }
}

/* ===================== 펫 메모리 ===================== */
.ml_sec_head_split { display: flex; gap: 30px; align-items: flex-start; }
.ml_sec_head_split > div:first-child { width: 240px; flex-shrink: 0; }
.ml_memory_badge {
	display: inline-block; margin-bottom: 8px; padding: 3px 10px; border-radius: 20px;
	background: #fdeceb; color: #c0392b; font-size: 11px; font-weight: 800;
}
.ml_sec_head_split h3 { margin: 0 0 10px; font-size: 20px; font-weight: 800; color: #222; }
.ml_memory_desc { margin: 0 0 14px; font-size: 13px; color: #888; line-height: 1.6; }
.ml_memory_btn { font-size: 13px; font-weight: 700; color: #132b45; }
.ml_memory_btn:hover { color: #c0392b; }
/* [2026-08 디자인 시안 반영] 4열 고정 그리드 → 가로 스크롤 행으로 변경(카드 4장이 기본 폭에
   딱 맞게 보이고, 5번째부터는 우측 ">" 버튼으로 넘겨봄). 스크롤바는 시각적으로 숨기고 스냅으로
   카드 단위로 딱딱 멈추게 한다. */
.ml_memory_grid_wrap { flex: 1; min-width: 0; position: relative; }
.ml_memory_grid {
	/* [2026-08-23] 처음에는 이 트랙에만 touch-action:pan-x pan-y를 다시 허용해 가로 스와이프를
	   살려뒀었는데, 그 상태에서도 화면 가장자리 근처에서 밀면 이전 화면으로 튕기는 문제가
	   재현된다는 신고가 있어(신고 접수), 이 트랙도 사이트 기본값(touch-action:pan-y, default.css)을
	   그대로 따르도록 되돌렸다 - 이제 이 카드 트랙도 손가락 가로 스와이프로는 넘어가지 않는다
	   (5번째 카드부터는 우측 ">" 버튼으로만 넘겨봄). */
	display: flex; gap: 14px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth;
	scrollbar-width: none;
}
.ml_memory_grid::-webkit-scrollbar { display: none; }
.ml_memory_card { display: block; flex: 0 0 calc((100% - 3 * 14px) / 4); scroll-snap-align: start; }
.ml_memory_thumb {
	width: 100%; padding-top: 100%; border-radius: 12px; margin-bottom: 8px;
	background: #f3f4f7 center center / cover no-repeat;
	/* [2026-08-22 추가] 이미지 없을 때 중앙 로고(.ml_popular_thumb_logo)가 이 박스 기준으로
	   가운데 위치하도록 - 없으면 조상 중 가장 가까운 position 요소를 기준으로 어긋난다. */
	position: relative;
}
/* [2026-08-22 요청 반영] 한 줄 말줄임(...)으로 제목이 거의 안 보인다는 피드백을 받아, 모바일
   전용 화면(.km-memory h4, mobile_home.css)에 이미 적용한 것과 동일하게 2줄까지 표시하도록 수정. */
.ml_memory_title {
	margin: 0 0 3px; font-size: 13px; font-weight: 700; color: #222;
	overflow: hidden; text-overflow: ellipsis; display: -webkit-box;
	-webkit-line-clamp: 2; -webkit-box-orient: vertical; white-space: normal;
}
/* [2026-08-22 요청 반영] "OO님의 펫 메모리" 소유자 표시줄과는 별도로, 회원이 그 메모리 페이지에
   직접 붙인 실제 제목이 있을 때만 그 아래 한 줄 더 표시한다. */
/* [2026-08-22 요청 반영] 각 메모리 카드의 실제 제목(회원이 직접 붙인 글 제목)을 볼드 → 일반체로 */
.ml_memory_page_title { margin: 0 0 3px; font-size: 11.5px; font-weight: 400; color: #3457A6; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ml_memory_date { font-size: 11.5px; color: #aaa; }
.ml_memory_grid .ml_empty { flex: 1 1 100%; }
.ml_memory_next {
	position: absolute; right: -14px; top: 50%; margin-top: -18px; z-index: 3;
	width: 36px; height: 36px; padding: 0; border-radius: 50%; border: none;
	background: #fff; color: #132b45; box-shadow: 0 4px 14px rgba(0,0,0,0.18); cursor: pointer;
	display: flex; align-items: center; justify-content: center; font-size: 14px;
}
.ml_memory_next:hover { background: #f3f4f7; }

/* ===================== 함께 발견해요 =====================
   [2026-08 디자인 시안 반영] 사진 위에 그라데이션 깔고 글자를 얹던 방식(이미지 안에 글자처럼
   보이는 방식)에서, 시안처럼 "사진 위 원형 아이콘 배지 + 사진 아래 실제 HTML 텍스트 캡션"으로
   변경 - 문구가 이미지 레이어가 아니라 진짜 텍스트라 화면정의서 "이미지 안에 글자 금지" 원칙에
   더 잘 맞는다. */
/* [2026-08 자동추천 리빌드] 카드가 5개 미만일 때 옆이 비어 보이지 않도록, 실제 렌더된 카드 수를
   --dc-count로 index.php에서 인라인 지정해 컬럼 수를 그만큼만 만든다(기본값 5는 변수 미설정 시 대비). */
.ml_discover_grid { display: grid; grid-template-columns: repeat(var(--dc-count, 5), minmax(0, 1fr)); gap: 14px; }
.ml_discover_card { display: block; }
/* [2026-08 지역선택 드롭다운] "함께 발견해요" 타이틀 옆 지역 선택 - .ml_sec_head가 이미
   flex라 h3 옆에 자연스럽게 붙는다. */
.ml_discover_region_select {
	margin-left: 4px; padding: 4px 8px; border: 1px solid #dcdfd8; border-radius: 6px;
	background: #fff; color: #555; font-size: 12px; cursor: pointer;
}
.ml_discover_thumb {
	width: 100%; padding-top: 100%; border-radius: 14px; margin-bottom: 10px;
	background: #f3f4f7 center center / cover no-repeat;
	position: relative;
}
.ml_discover_icon {
	position: absolute; left: 10px; top: 10px; width: 30px; height: 30px; border-radius: 50%;
	background: #fff; color: #132b45; display: flex; align-items: center; justify-content: center;
	font-size: 13px; box-shadow: 0 3px 8px rgba(0,0,0,0.18);
}
.ml_discover_label {
	margin: 0; color: #333; font-size: 12.5px; font-weight: 700; line-height: 1.4;
	display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}

/* ===================== 펫 케어 주요 서비스 ===================== */
.ml_care_grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; margin-bottom: 18px; }
.ml_care_card {
	position: relative; background: #fff; border: 1px solid #eee; border-radius: 14px;
	padding: 22px 18px 20px;
}
.ml_care_badge {
	position: absolute; right: 16px; top: 16px; padding: 3px 9px; border-radius: 20px;
	background: #fdeceb; color: #c0392b; font-size: 10.5px; font-weight: 800;
}
.ml_care_badge_blue { background: #e8f1fb; color: #2f6fb0; }
.ml_care_badge_green { background: #e6f6ea; color: #2f9e44; }
.ml_care_badge_purple { background: #f2e9f9; color: #9b59b6; }
.ml_care_card h4 { margin: 0 0 10px; font-size: 16px; font-weight: 800; color: #222; }
.ml_care_card p { margin: 0 0 16px; font-size: 12.5px; color: #888; line-height: 1.6; min-height: 40px; }
/* [2026-08 시안 반영] 용품추천/간편진단은 게시판 이동 대신 팝업을 여는 <button>으로 바뀌어서,
   <a>였을 때와 똑같아 보이도록 버튼 기본 스타일(배경/폰트/커서 등)을 리셋한다. */
.ml_care_btn {
	display: inline-block; padding: 8px 18px; border: 1px solid #132b45; border-radius: 20px;
	font-size: 12.5px; font-weight: 700; color: #132b45; background: none; font-family: inherit; cursor: pointer;
}
.ml_care_btn:hover { background: #132b45; color: #fff; }
.ml_consult_list { list-style: none; margin: 0 0 14px; padding: 0; }
.ml_consult_list li { margin-bottom: 6px; font-size: 12px; }
.ml_consult_list li.ml_empty { padding: 8px; background: none; }
.ml_consult_list a { color: #666; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; display: block; }
.ml_consult_list a:hover { color: #132b45; }
.ml_care_infobar {
	display: flex; flex-wrap: wrap; gap: 10px; background: #f7f8fa; border-radius: 12px; padding: 14px 18px;
}
.ml_care_infobar a { flex: 1 1 auto; min-width: 160px; font-size: 12.5px; color: #555; font-weight: 600; }
.ml_care_infobar a i { margin-right: 6px; color: #132b45; }
.ml_care_infobar a:hover { color: #132b45; }

/* ===================== 기부 - 포인트 나눔 =====================
   [2026-08 디자인 시안 반영] 진한 남색 통짜 박스 → 시안처럼 밝은 배경 위에 "나의 포인트" 흰 카드
   → 화살표 → "보호소 아이들을 위한 지원" 흰 카드, 두 개의 패널로 재구성. */
.ml_donate { background: #f7f8fa; border-radius: 16px; padding: 26px 28px; }
.ml_donate_desc { margin: 0 0 18px; font-size: 13.5px; color: #888; line-height: 1.6; }
.ml_donate_panels { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
.ml_donate_panel {
	flex: 1; min-width: 240px; display: flex; align-items: center; gap: 16px;
	background: #fff; border-radius: 14px; padding: 18px 20px;
}
.ml_donate_icon {
	width: 46px; height: 46px; flex: 0 0 46px; border-radius: 50%;
	display: flex; align-items: center; justify-content: center; font-size: 19px;
	background: #e6f6ea; color: #2f9e44;
}
.ml_donate_icon_heart { background: #fdeceb; color: #c0392b; }
.ml_donate_stat { display: flex; flex-direction: column; gap: 3px; flex: 1; min-width: 0; }
.ml_donate_stat > span:first-child { font-size: 12.5px; color: #999; }
.ml_donate_stat b { font-size: 22px; font-weight: 800; color: #222; }
.ml_donate_sub { font-size: 11.5px; color: #999; line-height: 1.5; }
.ml_donate_btn {
	padding: 10px 20px; background: #c0392b; color: #fff; border: none; border-radius: 20px;
	font-size: 13px; font-weight: 800; cursor: pointer; flex-shrink: 0;
}
.ml_donate_btn:hover { background: #a5301f; }
.ml_donate_arrow { flex: 0 0 auto; color: #ccc; font-size: 18px; }
.ml_donate_recipient_text { display: flex; flex-direction: column; gap: 4px; }
.ml_donate_recipient_text b { font-size: 14.5px; color: #222; }
.ml_donate_recipient_text span { font-size: 12px; color: #999; line-height: 1.5; }
/* [2026-08] 관리자 설정("기부" 탭)에서 저장한 파트너 단체(기부처) 로고/이름 - "보호소 아이들을
   위한 지원" 텍스트 바로 아래에 표시. 로고/이름 둘 다 비어 있으면 index.php에서 아예 출력하지
   않으므로 여기서는 있을 때의 표시 스타일만 정의한다. */
.ml_donate_partner { display: flex; align-items: center; gap: 6px; margin-top: 2px; text-decoration: none; }
.ml_donate_partner_logo { height: 20px; max-width: 90px; object-fit: contain; }
.ml_donate_partner_name { font-size: 11px; color: #777; font-weight: 700; line-height: 1.3; }
a.ml_donate_partner:hover .ml_donate_partner_name { color: #395a29; text-decoration: underline; }

/* ===================== 광고 (5슬롯) =====================
   [2026-08 반응형 개선] 같은 광고를 PC 오른쪽 컬럼(.ml_ad_desktop_copy)과 모바일 섹션 사이
   (.ml_ad_mobile_copy)에 두 번 렌더링해서 화면 폭에 따라 CSS로만 하나씩 노출/숨김 처리한다
   (노출수 집계는 PHP에서 광고당 1번만 하도록 이미 분리돼 있음).
   [2026-08 수정] 예전에는 PC 우측 컬럼 슬롯마다 aspect-ratio를 고정해두고 object-fit:cover로
   이미지를 그 비율에 맞춰 잘라서 보여줬는데, 요청에 따라 우측 배너는 컬럼 가로폭(220px)만 고정하고
   세로 길이는 실제 업로드한 이미지 원본 비율 그대로 따라가도록(자르지 않고 width:100%; height:auto)
   바꿨다. 모바일 인라인 카피(.ml_ad_mobile_copy)는 이번 요청 범위(우측 배너)가 아니므로
   기존 3.4:1 고정 비율을 그대로 유지한다. */
.ml_ad_item { display: block; border-radius: 12px; overflow: hidden; border: 1px solid #eee; }
.ml_ad_col .ml_ad_item picture { display: block; width: 100%; height: auto; }
.ml_ad_col .ml_ad_item img { display: block; width: 100%; height: auto; }
.ml_ad_mobile_copy { display: none; aspect-ratio: 3.4 / 1; }
.ml_ad_mobile_copy picture,
.ml_ad_mobile_copy img { width: 100%; height: 100%; object-fit: cover; }
.ml_ad_mobile_slot { margin: 20px 0; }
/* [2026-08-22 요청 반영] 화면이 좁아져 우측 배너 컬럼(.ml_ad_col)이 사라지고 이 인라인 카피
   (.ml_ad_mobile_copy)가 대신 노출될 때, 배너 이미지 세로 폭이 고정 상자(3.4:1, object-fit:cover)
   보다 크면 위/아래가 잘려서 안 보이는 문제가 있었다. 모바일 전용 화면(mobile_home.css의
   kmAdBannerPan)과 동일한 방식으로, 이미지를 자르는 대신 object-position을 위쪽 <-> 아래쪽으로
   천천히 자동으로 오가게 해서 시간이 지나면 배너 내용을 전부 확인할 수 있게 한다. 이미지가 상자
   비율과 딱 맞아 잘릴 부분이 없는 배너는 움직여도 실제로는 그대로 보여 무해하다. */
.ml_ad_mobile_copy img {
	animation: mlAdMobileCopyPan 7s ease-in-out infinite alternate;
}
@keyframes mlAdMobileCopyPan {
	0% { object-position: center top; }
	100% { object-position: center bottom; }
}
@media (prefers-reduced-motion: reduce) {
	.ml_ad_mobile_copy img { animation: none; }
}

/* ===================== 사이트 Activity Statistics ===================== */
.ml_stats {
	display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px;
	background: #f7f8fa; border-radius: 16px; padding: 30px 20px; margin-top: 44px;
}
.ml_stat_item { display: flex; flex-direction: column; align-items: center; gap: 8px; text-align: center; }
/* [2026-08 디자인 시안 반영] 아이콘을 단색 텍스트에서 시안처럼 통계 항목마다 다른 색의 원형
   배지로 변경(회원=보라, 이야기=파랑, 일상=초록, 기부=주황) */
.ml_stat_icon {
	width: 40px; height: 40px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
	font-size: 17px; color: #fff;
}
.ml_stat_icon1 { background: #9b59b6; }
.ml_stat_icon2 { background: #2f6fb0; }
.ml_stat_icon3 { background: #2f9e44; }
.ml_stat_icon4 { background: #e6a23d; }
.ml_stat_item span { font-size: 12.5px; color: #888; }
.ml_stat_item b { font-size: 24px; font-weight: 800; color: #222; }

/* ===================== 브랜드 / 뉴스레터 ===================== */
.ml_brand {
	display: flex; align-items: center; justify-content: space-between; gap: 30px;
	margin-top: 34px; padding: 32px 34px; border-radius: 16px;
	background: linear-gradient(135deg, #132b45, #1c3a5e); color: #fff; flex-wrap: wrap;
}
.ml_brand_text h3 { margin: 0 0 10px; font-size: 21px; font-weight: 800; line-height: 1.4; }
.ml_brand_text p { margin: 0; font-size: 13px; color: #c7d2e0; }
.ml_newsletter { flex: 1; min-width: 280px; max-width: 380px; }
.ml_newsletter > p { margin: 0 0 10px; font-size: 13px; color: #c7d2e0; }
.ml_newsletter_row { display: flex; gap: 8px; }
.ml_newsletter_row input {
	flex: 1; min-width: 0; padding: 12px 16px; border: none; border-radius: 24px;
	font-size: 13.5px; box-sizing: border-box;
}
.ml_newsletter_row button {
	flex-shrink: 0; padding: 12px 22px; background: #c0392b; color: #fff; border: none;
	border-radius: 24px; font-size: 13.5px; font-weight: 800; cursor: pointer;
}
.ml_newsletter_row button:hover { background: #a5301f; }
.ml_newsletter_row button[disabled] { opacity: .6; cursor: not-allowed; }
.ml_newsletter_msg { margin: 8px 0 0; font-size: 12px; color: #c7d2e0; min-height: 15px; }
.ml_newsletter_msg.ml_ok { color: #8fe0a8; }
.ml_newsletter_msg.ml_err { color: #f0a99c; }

/* ===================== 관리자 팝업 - 새 그룹(인기글 고정/발견해요/광고/뉴스레터) ===================== */
.ml_admin_result_msg { display: block; font-size: 12.5px; margin-top: 8px; min-height: 15px; }
.ml_admin_result_msg.ml_ok { color: #2f9e44; }
.ml_admin_result_msg.ml_err { color: #c0392b; }
.ml_discover_edit_row {
	display: flex; align-items: center; gap: 8px; flex-wrap: wrap; padding: 8px 0;
	border-bottom: 1px dashed #eee; font-size: 12.5px; color: #666;
}
.ml_discover_edit_row:last-of-type { border-bottom: none; }
.ml_discover_edit_row input { padding: 6px 8px; border: 1px solid #ddd; border-radius: 5px; font-size: 12.5px; }
.ml_ad_edit_row { font-size: 12.5px; color: #555; line-height: 2.1; }
.ml_ad_edit_row input[type="text"],
.ml_ad_edit_row input[type="date"] { padding: 6px 8px; border: 1px solid #ddd; border-radius: 5px; font-size: 12.5px; }
.ml_ad_edit_row .ml_ad_save_btn { display: inline-block; width: auto; padding: 8px 18px; margin-top: 8px; }
.ml_ad_msg { margin-left: 10px; }
/* [2026-08-22 추가] 퀵메뉴 관리자 편집 행 - 기존 광고 슬롯 편집 행(.ml_ad_edit_row)과 동일한
   느낌으로 맞추되, 항목 수가 유동적으로 늘어나므로 행 사이 구분선을 추가했다. */
.ml_qm_edit_row {
	font-size: 12.5px; color: #555; line-height: 2.1;
	padding: 10px 0; border-bottom: 1px dashed #eee;
}
.ml_qm_edit_row:last-of-type { border-bottom: none; }
.ml_qm_edit_row input[type="text"],
.ml_qm_edit_row input[type="number"] { padding: 6px 8px; border: 1px solid #ddd; border-radius: 5px; font-size: 12.5px; }
.ml_qm_edit_row .ml_qm_delete_btn { display: inline-block; width: auto; padding: 5px 12px; margin-left: 10px; font-size: 12px; }
/* [2026-08-22 추가] 퀵메뉴 노출 순서 조정용 ▲/▼ 버튼 - 삭제 버튼과 헷갈리지 않도록 작은 정사각형
   보조 버튼 스타일로 행 맨 앞에 붙인다. */
.ml_qm_move_btn {
	display: inline-flex; align-items: center; justify-content: center;
	width: 26px; height: 26px; margin-right: 4px; padding: 0;
	border: 1px solid #ddd; border-radius: 5px; background: #f7f7f7; color: #555;
	font-size: 11px; cursor: pointer; vertical-align: middle;
}
.ml_qm_move_btn:hover { background: #eee; }
#mlQuickmenuAddBtn { display: inline-block; width: auto; padding: 8px 18px; margin-top: 6px; }

/* ===================== 반응형 (기본 대응 - 세부 최적화는 별도 라운드) ===================== */
/* [2026-08 버그수정 #3] 이 구간이 예전엔 max-width:1180px부터 시작했는데, 사이트 본문 자체가
   1200px 폭으로 설계돼 있다 보니 1180px는 사실상 "거의 모든 데스크탑 창 크기"를 덮어버려서
   광고 컬럼이 sticky로 화면을 따라다니는 걸 거의 아무도 못 보는 상태였다(실제로 사용자가 확인한
   1117px 창 폭에서도 이미 이 구간에 걸려 position:static이 되고 있었음). 오른쪽 광고 컬럼이
   나란히 들어갈 여유가 없는 진짜 좁은 창 폭(900px 이하)부터만 스택형으로 전환하도록 낮췄다 -
   그래야 일반적인 데스크탑/노트북 창 폭에서는 항상 sticky 컬럼이 유지된다. */
@media (max-width: 900px) {
	/* [버그 수정] .ml_split의 기본 align-items:flex-start는 가로(행) 배치일 때는 "두 컬럼 높이를
	   서로 맞추지 않기" 용도였는데, flex-direction:column으로 바뀌는 이 폭부터는 교차축이 가로가
	   되면서 같은 속성이 .ml_main_col을 컨테이너 폭까지 늘어나지 못하게 막아 내용물의 고유 폭만큼만
	   차지하게 됐다(모바일 광고 슬롯 이미지가 화면 밖으로 넘치는 원인). stretch로 되돌려 전체 폭을
	   채우도록 한다. */
	.ml_split { flex-direction: column; align-items: stretch; }
	.ml_ad_col { width: 100%; max-height: none; overflow: visible; flex-direction: row; flex-wrap: wrap; position: static; }
	.ml_ad_col .ml_ad_item { flex: 1 1 200px; }
}
@media (max-width: 960px) {
	.ml_qm_item { flex-basis: 150px; padding: 10px; justify-content: center; }
	/* [2026-08-22 수정] 5열 → 2열로 한 번에 줄어들던 것을 4열로 변경 - 아래 820px/600px 구간에서
	   3열 → 2열로 더 완만하게 줄어들도록 중간 단계를 추가했다(관련 내용은 이 파일 아래
	   "인기 이야기 카드 열 수 완만하게 줄이기" 블록 참고). */
	.ml_popular_grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
	.ml_care_grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	/* [2026-08-22 수정] 함께 발견해요도 인기 이야기와 같은 방식(5→4→3→2)으로 완만하게 줄인다 -
	   나머지 단계는 아래 820px/600px 구간 참고. */
	.ml_discover_grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
	/* .ml_memory_grid는 grid가 아니라 flex 가로 스크롤 행이라 grid-template-columns는 의미가 없음 -
	   대신 카드 폭을 정확히 3장이 보이는 비율로 넓혀서(간격 10px 기준, 반쪽짜리 카드가 가운데서
	   잘려 보이지 않도록) 태블릿 폭에서도 스크롤 카드처럼 보이게 한다 */
	.ml_memory_grid > .ml_memory_card { flex-basis: calc((100% - 2 * 10px) / 3); }
	.ml_sec_head_split { flex-direction: column; }
	.ml_sec_head_split > div:first-child { width: 100%; }
	.ml_stats { grid-template-columns: repeat(2, 1fr); }
	.ml_brand { flex-direction: column; align-items: flex-start; }
}
@media (max-width: 600px) {
	.ml_qm_item { flex-basis: 45%; }
	/* .ml_popular_grid는 아래 전용 블록에서 820px/600px 구간별로 3열→2열을 따로 관리한다 */
	.ml_discover_grid, .ml_care_grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.ml_daily_bar { flex-direction: column; align-items: stretch; }
	/* [2026-08-22 수정] 아래쪽 "2026-08-21 정합 보정" 블록에서 .ml_daily_toggles를 항상 한 줄
	   (flex-wrap:nowrap, 768px 이하에서도 유지)로 재설계했는데, 여기 남아있던 예전 규칙이
	   flex-direction:column을 줘서 토글 3개(산책/식사/기분)가 한 줄에 들어갈 수 있는데도
	   무조건 세로로 한 줄씩 쌓이고 있었다 - 최신 설계와 충돌하므로 제거. */
	.ml_record_btn { margin-left: 0; text-align: center; justify-content: center; }
	/* [2026-08-22 수정] 기부 패널을 세로로 쌓고 화살표를 90도 회전시키던 이 예전 규칙은, 아래쪽
	   "정밀 보정" 구간에서 .ml_donate_panels를 display:grid(가로 한 행)로 재설계하면서
	   flex-direction은 이미 의미가 없어졌지만, transform: rotate(90deg)만은 여전히 적용되어
	   가로 한 행 레이아웃에서 화살표가 세로로 누워 보이는 문제를 만들고 있었다 - 제거. */
}

/* [2026-08-22 수정] 인기 이야기 카드 열 수 완만하게 줄이기
   기존에는 961px 이상 5열 → 960px 이하 2열(위 블록) → 768px 이하부터는 카드 1장이 화면의
   78~84%를 차지하는 가로 스와이프로 급격히 전환되면서, 그 사이 폭(특히 태블릿 세로/랜드스케이프,
   창을 줄인 데스크탑 등 400px 초과 ~ 768px 구간)에서 카드(썸네일)가 화면 폭에 육박할 만큼 커져
   영역을 벗어난 것처럼 보이는 문제가 있었다. 400px 이하는 별도 모바일 전용 화면
   (plugin/websiting/mobile_home.css/php, [2026-08-23] 390px→400px로 상향)이 항상 담당하므로, 그보다 넓은 구간은 가로 스와이프
   없이 그리드 열 수만 5 → 4(960px, 위 블록) → 3 → 2 순서로 줄여 썸네일 크기가 완만하게
   작아지도록 한다. */
@media (max-width: 820px) {
	.ml_popular_grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
	.ml_discover_grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 600px) {
	.ml_popular_grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ===================== 모바일 전용 (768px 이하) — 광고 재배치 + 카드 가로 스와이프 =====================
   [2026-08 반응형 개선] 화면 정의서 요구사항: "모바일에서는 PC 화면을 단순 축소하지 말 것" +
   "카드형 콘텐츠는 가로 스와이프 또는 화면 정의서에 지정된 모바일 배열 사용".
   (1) PC 우측 광고 컬럼(.ml_ad_col)을 숨기고, 각 섹션 사이에 심어둔 인라인 광고 카피
       (.ml_ad_mobile_copy)만 노출한다 - 노출수는 PHP에서 광고당 1회만 집계하므로 중복 카운트 없음.
   (2) 인기 이야기 / 함께 발견해요 / 펫 케어 4카드 / 펫 메모리 그리드를 줄바꿈 그리드 대신
       가로 스크롤 스와이프 행으로 전환한다(scroll-snap으로 카드 단위 정렬).
   위 max-width:600px 블록보다 뒤에 배치해 소스 순서상 이 블록이 그리드 설정을 덮어쓰도록 한다
   (600 < 768이므로 좁은 화면에서는 두 블록이 모두 매치되지만, 나중에 나온 이 블록이 이긴다). */
@media (max-width: 768px) {
	/* 광고: PC 컬럼은 완전히 숨기고, 섹션 사이 인라인 카피만 표시 */
	.ml_ad_col,
	.ml_ad_desktop_copy { display: none; }
	.ml_ad_mobile_copy { display: block; }

	/* [2026-08-22 수정] 커뮤니티 인기 이야기는 가로 스와이프 대신 그리드 열 수 조정(위쪽
	   "인기 이야기 카드 열 수 완만하게 줄이기" 블록, 820px/600px)으로 대응하도록 변경 -
	   이 구간에서 더 이상 별도 규칙이 필요 없다. */

	/* [2026-08-22 수정] 함께 발견해요도 인기 이야기와 동일하게 가로 스와이프 대신 그리드 열 수
	   조정(위쪽 820px/600px 구간)으로 대응하도록 변경 - 이 구간에서 더 이상 별도 규칙이 필요 없다. */

	/* [2026-08-22 수정] 펫 케어 주요 서비스 4카드는 가로 스와이프 대신, 이미 960px/600px 구간에서
	   잡아준 2열 그리드(위쪽 블록)를 그대로 유지한다 - 4개가 한 줄에 다 들어가거나(960px 초과),
	   좁아지면 2열 x 2행으로 정확히 나뉘어 보인다(카드가 잘리거나 스와이프로 숨지 않음). */

	/* [2026-08-22 수정] 카드가 40%(2.x장, 세 번째 카드가 가운데서 잘려 보임)로 어중간하게 보이던
	   것을 정확히 2장이 꽉 차게 보이도록 수정 - 더 보고 싶으면 가로 스크롤/다음 버튼(.ml_memory_next)
	   으로 넘긴다(가로 스크롤 자체는 계속 유지). */
	.ml_memory_grid {
		display: flex; flex-wrap: nowrap; gap: 12px;
		overflow-x: auto; padding-bottom: 6px;
		scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch;
	}
	.ml_memory_grid > .ml_memory_card { flex: 0 0 calc((100% - 10px) / 2); scroll-snap-align: start; }
	.ml_memory_grid .ml_empty { flex: 0 0 100%; }
}

/* =====================================================================
   냥멍 사계절 대전 메인 배너 / 게임 팝업
   ===================================================================== */
.ml_game_banner {
    position: relative;
    display: grid;
    grid-template-columns: minmax(240px, 1.05fr) minmax(230px, .9fr) minmax(205px, .72fr);
    align-items: stretch;
    min-height: 127px;
    margin: 0 0 24px;
    overflow: hidden;
    border: 1px solid #dfe9df;
    border-radius: 24px;
    background: linear-gradient(115deg, #f8fff8 0%, #fff8ec 53%, #f4faf5 100%);
    box-shadow: 0 12px 32px rgba(53, 77, 60, .09);
}
.ml_game_visual {
    position: relative;
    min-height: 127px;
    overflow: hidden;
    border: 0;
    border-radius: 0 72px 72px 0;
    background:
        radial-gradient(circle at 20% 25%, rgba(255,255,255,.85) 0 7%, transparent 8%),
        linear-gradient(145deg, #f9cae0 0 25%, #8fd7ef 25% 50%, #e6a65e 50% 75%, #dceefa 75% 100%);
    cursor: pointer;
}
.ml_game_visual::before,
.ml_game_visual::after {
    content: '';
    position: absolute;
    border-radius: 50%;
    background: rgba(255,255,255,.25);
}
.ml_game_visual::before { width: 150px; height: 150px; left: -45px; bottom: -70px; }
.ml_game_visual::after { width: 110px; height: 110px; right: -25px; top: -35px; }
.ml_game_bubble {
    position: absolute;
    z-index: 1;
    border-radius: 50%;
    background: rgba(255,255,255,.5);
    pointer-events: none;
    animation: ml_game_bubble_float 8s ease-in-out infinite;
}
.ml_game_bubble1 { top: 62%; left: 14%; width: 16px; height: 16px; animation-duration: 7s; }
.ml_game_bubble2 { top: 18%; left: 66%; width: 32px; height: 32px; animation-duration: 9.5s; animation-delay: 1.2s; }
.ml_game_bubble3 { top: 74%; left: 42%; width: 11px; height: 11px; animation-duration: 6.2s; animation-delay: 2.4s; }
.ml_game_bubble4 { top: 48%; left: 85%; width: 22px; height: 22px; animation-duration: 8.4s; animation-delay: .6s; }
.ml_game_bubble5 { top: 38%; left: 30%; width: 44px; height: 44px; animation-duration: 11s; animation-delay: 1.8s; }
@keyframes ml_game_bubble_float {
    0%   { transform: translate(0, 0) scale(1); }
    20%  { transform: translate(20px, -30px) scale(1.1); }
    40%  { transform: translate(38px, -6px) scale(.92); }
    60%  { transform: translate(14px, 26px) scale(1.06); }
    80%  { transform: translate(-28px, 12px) scale(.96); }
    100% { transform: translate(0, 0) scale(1); }
}
@media (prefers-reduced-motion: reduce) {
    .ml_game_bubble { animation: none; }
}
.ml_game_pet,
.ml_game_ufo,
.ml_game_sun,
.ml_game_snow,
.ml_game_items { position: absolute; filter: drop-shadow(0 5px 4px rgba(56,58,48,.18)); }
.ml_game_pet { bottom: 16px; z-index: 3; font-size: 48px; transition: transform .25s ease; }
.ml_game_cat { left: 24%; transform: rotate(-5deg); }
.ml_game_dog { left: 52%; transform: rotate(6deg); }
.ml_game_visual:hover .ml_game_cat { transform: translateY(-5px) rotate(-8deg); }
.ml_game_visual:hover .ml_game_dog { transform: translateY(-7px) rotate(8deg); }
.ml_game_ufo { right: 12%; top: 17px; font-size: 32px; transform: rotate(8deg); }
.ml_game_sun { left: 10%; top: 11px; font-size: 23px; }
.ml_game_snow { right: 7%; bottom: 15px; font-size: 19px; }
.ml_game_items { left: 50%; bottom: 8px; z-index: 4; transform: translateX(-50%); padding: 3px 9px; border-radius: 999px; background: rgba(255,255,255,.72); font-size: 14px; white-space: nowrap; }
.ml_game_copy { display: flex; flex-direction: column; justify-content: center; padding: 16px 22px; }
.ml_game_admin_play_count {
    display: block;
    margin: 0 0 2px;
    color: #9aa89d;
    font-size: 8px;
    font-weight: 700;
    line-height: 1.15;
    letter-spacing: .2px;
}
.ml_game_eyebrow { margin-bottom: 5px; color: #78917e; font-size: 9px; font-weight: 900; letter-spacing: 1.2px; }
.ml_game_copy h3 { margin: 0; color: #2f4938; font-size: clamp(17px, 1.5vw, 21px); line-height: 1.2; letter-spacing: -.8px; }
.ml_game_copy p { margin: 5px 0 0; color: #a45d3e; font-size: 14px; font-weight: 900; }
.ml_game_credit { margin-left: 5px; color: #c9b8ab; font-size: 9px; font-weight: 400; letter-spacing: 0; opacity: .65; }
.ml_game_side { display: flex; flex-direction: column; justify-content: center; margin: 10px 14px; padding: 9px 14px; border-radius: 15px; background: rgba(255,255,255,.8); box-shadow: inset 0 0 0 1px rgba(218,229,217,.85); }
.ml_game_rank_title_row { display: flex; align-items: center; justify-content: space-between; gap: 6px; margin-bottom: 7px; }
.ml_game_rank_title { margin-bottom: 0; color: #42574a; font-size: 12px; font-weight: 900; }
.ml_game_rank_badge { flex: 0 0 auto; border: 0; border-radius: 999px; padding: 3px 10px; background: #de7146; color: #fff; font-size: 10px; font-weight: 900; box-shadow: 0 2px 0 #ad4c2d; white-space: nowrap; cursor: pointer; }
.ml_game_rank_badge:active { transform: translateY(2px); box-shadow: 0 0 0 #ad4c2d; }
.ml_game_rank_rows { min-height: 45px; color: #817265; font-size: 10px; line-height: 1.4; }
.ml_game_rank_row { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ml_game_start { width: 100%; margin-top: 5px; border: 0; border-radius: 999px; padding: 7px 12px; background: #de7146; color: #fff; font-size: 12px; font-weight: 900; box-shadow: 0 3px 0 #ad4c2d; cursor: pointer; }
.ml_game_start:active { transform: translateY(3px); box-shadow: 0 1px 0 #ad4c2d; }
/* [2026-08-25 수정 - "모바일 게임 시작 버튼 글자 흰색으로" 대응] mobile_home.css의
   #kaminbeth-mobile-home button { color: inherit; } 리셋이 .ml_game_start보다 우선순위가
   높아(ID 선택자 포함) 모바일에서만 버튼 글자색이 흰색 대신 상속된 어두운 색으로 보이던 문제.
   같은 ID로 감싸 우선순위를 맞춰 흰색을 다시 강제한다. */
#kaminbeth-mobile-home .ml_game_start { color: #fff; }

.ml_game_modal[hidden] { display: none !important; }
.ml_game_modal { position: fixed; inset: 0; z-index: 100500; display: flex; align-items: center; justify-content: center; padding: 18px; background: rgba(20,30,24,.72); backdrop-filter: blur(5px); }
.ml_game_dialog { display: flex; flex-direction: column; width: min(760px, 100%); height: min(960px, calc(100vh - 36px)); overflow: hidden; border-radius: 22px; background: #fff; box-shadow: 0 28px 80px rgba(0,0,0,.32); }
.ml_game_modal_head { flex: 0 0 58px; display: flex; align-items: center; justify-content: space-between; padding: 8px 12px 8px 18px; border-bottom: 1px solid #e4ebe4; background: #fbfdfb; }
.ml_game_modal_brand { display: flex; align-items: center; min-width: 0; gap: 13px; }
.ml_game_modal_brand img { width: 116px; max-height: 38px; object-fit: contain; }
.ml_game_modal_brand strong { overflow: hidden; color: #42554a; font-size: 14px; text-overflow: ellipsis; white-space: nowrap; }
.ml_game_close { display: grid; place-items: center; flex: 0 0 40px; width: 40px; height: 40px; border: 0; border-radius: 50%; background: #eef3ee; color: #4f6256; font: 300 32px/1 Arial,sans-serif; cursor: pointer; }
.ml_game_close:hover { background: #de7146; color: #fff; }
.ml_game_dialog iframe { display: block; flex: 1 1 auto; width: 100%; min-height: 0; border: 0; background: #222; }

/* 오늘의 랭킹 TOP 20 팝업 - 게임(iframe) 내부의 순위 팝업과 동일한 배색/구성 */
.ml_rank_popup[hidden] { display: none !important; }
.ml_rank_popup { position: fixed; inset: 0; z-index: 100510; display: flex; align-items: center; justify-content: center; padding: 18px; background: rgba(39,32,27,.64); backdrop-filter: blur(4px); }
.ml_rank_popup_panel { display: flex; flex-direction: column; width: min(390px, 100%); max-height: min(680px, calc(100vh - 36px)); overflow: hidden; border-radius: 20px; background: #fffaf3; box-shadow: 0 18px 55px rgba(0,0,0,.28); }
.ml_rank_popup_head { display: flex; align-items: center; justify-content: space-between; padding: 14px 15px 11px 18px; border-bottom: 1px solid #eadcca; }
.ml_rank_popup_head strong { color: #5b4939; font-size: 17px; }
.ml_rank_popup_close { width: 35px; height: 35px; border: 0; border-radius: 50%; background: #f0e4d6; color: #695747; font-size: 25px; line-height: 1; cursor: pointer; }
.ml_rank_popup_list { overflow-y: auto; padding: 8px 16px 15px; }
.ml_rank_popup_row { display: grid; grid-template-columns: 38px minmax(0,1fr) auto; gap: 8px; align-items: center; min-height: 34px; border-bottom: 1px solid #f0e6da; font-size: 12px; }
.ml_rank_popup_num { color: #9a7b62; font-weight: 900; }
.ml_rank_popup_id { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #655446; }
.ml_rank_popup_score { color: #d76b3a; font-weight: 900; }
.ml_rank_popup_empty { padding: 28px 10px; color: #967d68; font-size: 13px; text-align: center; }

@media (max-width: 900px) {
    .ml_game_banner { grid-template-columns: minmax(210px,.95fr) minmax(210px,.9fr) minmax(190px,.7fr); }
    .ml_game_copy { padding: 14px 16px; }
}

@media (max-width: 650px) {
    .ml_game_banner { grid-template-columns: 42% 58%; min-height: 119px; border-radius: 18px; }
    .ml_game_visual { grid-row: 1 / span 2; min-height: 119px; border-radius: 0 38px 38px 0; }
    .ml_game_pet { bottom: 19px; font-size: 35px; }
    .ml_game_cat { left: 13%; }
    .ml_game_dog { left: 48%; }
    .ml_game_ufo { right: 7%; top: 16px; font-size: 25px; }
    .ml_game_copy { padding: 8px 11px 2px; }
    .ml_game_copy h3 { font-size: 14px; }
    .ml_game_copy p { margin-top: 4px; font-size: 12px; }
    .ml_game_eyebrow { margin-bottom: 4px; font-size: 8px; }
    .ml_game_side { margin: 2px 8px 7px; padding: 4px 8px; background: transparent; box-shadow: none; }
    .ml_game_rank_title,
    .ml_game_rank_rows { display: none; }
    .ml_game_start { margin-top: 0; padding: 7px 5px; font-size: 10px; }
    .ml_game_dialog { height: 100%; border-radius: 0; }
    .ml_game_modal { z-index: 2147483000; padding: 0; }
    .ml_game_modal_head {
        position: relative; z-index: 2;
        box-sizing: border-box;
        flex: 0 0 46px;
        height: 46px;
        min-height: 46px;
        padding: 2px max(10px, env(safe-area-inset-right)) 2px 10px;
    }
    .ml_game_modal_brand img { width: 91px; }
    .ml_game_modal_brand strong { font-size: 12px; }
    .ml_game_close {
        position: relative; z-index: 2147483001;
        flex-basis: 42px; width: 42px; height: 42px;
        background: #de7146; color: #fff;
        box-shadow: 0 3px 10px rgba(0,0,0,.2);
    }
}

@media (max-width: 400px) {
    .ml_game_banner { grid-template-columns: 40% 60%; margin: 0 0 14px; }
    .ml_game_visual { min-height: 115px; }
    .ml_game_pet { font-size: 32px; bottom: 20px; }
    .ml_game_items { font-size: 10px; }
    .ml_game_copy h3 { font-size: 15px; }
}

/* ========================================================================
   2026-08-21 디자인 정밀 보정
   - PHP/JS/데이터/관리자 기능은 변경하지 않고 히어로 아래 표현만 보정
   - 관리자 관리 대상인 히어로 및 AD1~AD5(.ml_ad_*)는 이 블록에서 제외
   ======================================================================== */
section.mainContents {
	box-sizing: border-box;
	padding: 10px 0 46px;
	overflow: visible !important;
}
.mainContents, .mainContents * { box-sizing: border-box; }

.ml_sec { margin-bottom: 28px; }
.ml_sec_head { min-height: 25px; margin-bottom: 13px; }
.ml_sec_head h3,
.ml_sec_head_split h3 { color: #171b19; font-size: 18px; line-height: 1.35; letter-spacing: -0.55px; }
.ml_sec_head .ml_more { color: #4d514f; font-size: 11px; font-weight: 700; }

/* Quick Menu: 시안의 하나로 이어진 얕은 흰 카드 */
.ml_quickmenu {
	min-height: 78px; margin: 0 0 24px; padding: 8px 12px;
	border: 1px solid #f0f1ed; border-radius: 11px;
	box-shadow: 0 4px 14px rgba(41, 56, 37, .055);
}
.ml_qm_item { min-height: 60px; padding: 0 15px; gap: 12px; }
/* [2026-08-22 수정] 아이콘별 고정 배경이미지 클래스(ml_qm_icon1~6)는 관리자가 직접 업로드하는
   방식으로 대체되어 제거 - 남은 것은 이미지를 감싸는 살짝 둥근 프레임 느낌뿐이다. */
.ml_qm_icon {
	padding: 3px; border-radius: 10px;
	background-color: #f7f6f1;
	box-shadow: 0 2px 7px rgba(56, 66, 48, .10), inset 0 0 0 1px rgba(255, 255, 255, .72);
}
.ml_qm_text { gap: 4px; }
.ml_qm_text b { font-size: 13px; letter-spacing: -.3px; }
.ml_qm_text small { font-size: 10px; }

/* 본문/우측 관리자 배너 컬럼의 위치 관계만 유지하고 카드 영역을 시안 비율로 보정 */
.ml_split { gap: 18px; }
.ml_popular_grid { gap: 12px; }
.ml_popular_card { border-color: #eceee9; border-radius: 10px; }
.ml_popular_card:hover { box-shadow: 0 7px 18px rgba(35, 45, 34, .08); }
.ml_popular_thumb { padding-top: 68%; }
.ml_popular_body { min-height: 92px; padding: 9px 10px 11px; }
.ml_popular_cat { margin-bottom: 6px; padding: 2px 7px; border-radius: 4px; font-size: 9px; }
.ml_popular_title { min-height: 34px; margin-bottom: 6px; font-size: 11.5px; line-height: 1.45; }
.ml_popular_meta { gap: 7px; font-size: 9.5px; }

/* 오늘 기록 바 */
.ml_daily { padding: 0; background: transparent; border-radius: 0; }
.ml_daily .ml_sec_head { margin-bottom: 9px; }
.ml_daily_bar {
	min-height: 64px; padding: 9px 14px; gap: 14px; flex-wrap: nowrap;
	background: linear-gradient(90deg, #f7f6f2, #faf8f4); border-radius: 10px;
}
.ml_pet_switch_btn { border: 0; background: transparent; padding: 4px 8px 4px 4px; }
.ml_pet_avatar { width: 38px; height: 38px; }
.ml_daily_toggles { gap: 0; min-width: 0; flex-wrap: nowrap; }
.ml_toggle_btn {
	min-height: 38px; flex: 1; justify-content: center; padding: 0 15px;
	border-left: 1px solid #e7e5de; font-size: 11.5px; white-space: nowrap;
}
.ml_toggle_btn i { font-size: 17px; }
.ml_record_btn {
	min-height: 40px; margin-left: 0; padding: 0 17px;
	border-radius: 8px; background: #fff1e7; color: #f06c2d; font-size: 11.5px;
}
.ml_record_btn:hover { background: #ffe7d7; color: #e35d20; }

/* 펫 메모리: 왼쪽 설명 + 오른쪽 4개 카드 */
.ml_memory {
	padding: 15px 17px; border-radius: 12px;
	background: linear-gradient(90deg, #fbf9fd, #fffdfb);
}
.ml_sec_head_split { gap: 20px; align-items: center; }
.ml_sec_head_split > div:first-child { width: 205px; }
.ml_memory_badge { float: right; margin: 1px 0 0 7px; padding: 3px 7px; font-size: 8px; }
.ml_memory_desc { margin-bottom: 10px; color: #5f6461; font-size: 11px; line-height: 1.55; }
.ml_memory_btn { display: inline-flex; padding: 8px 13px; border-radius: 6px; background: #7864ba; color: #fff; font-size: 10px; }
.ml_memory_btn:hover { color: #fff; background: #6652a9; }
.ml_memory_grid { gap: 10px; }
.ml_memory_card { flex-basis: calc((100% - 30px) / 4); }
.ml_memory_thumb { padding-top: 68%; margin-bottom: 7px; border-radius: 8px; }
.ml_memory_title { font-size: 10.5px; }
.ml_memory_date { font-size: 9px; }
.ml_memory_next { right: -10px; width: 30px; height: 30px; margin-top: -15px; }

/* Discover */
.ml_discover_grid { gap: 12px; }
.ml_discover_thumb { padding-top: 67%; margin-bottom: 0; border-radius: 10px; overflow: hidden; }
.ml_discover_thumb:after {
	content: ""; position: absolute; inset: 36% 0 0;
	background: linear-gradient(transparent, rgba(10, 18, 12, .7)); pointer-events: none;
}
.ml_discover_icon { z-index: 1; left: 9px; top: 9px; width: 27px; height: 27px; font-size: 11px; }
.ml_discover_label {
	position: relative; z-index: 2; margin: -34px 10px 0; min-height: 34px;
	color: #fff; font-size: 10.5px; line-height: 1.4;
}

/* 펫 케어 */
.ml_care_grid { gap: 12px; }
.ml_care_card {
	min-height: 276px; padding: 17px 15px 14px; border: 0; border-radius: 11px;
	display: flex; flex-direction: column; overflow: hidden;
	background: linear-gradient(145deg, #fffaf2, #f8f5ee);
}
.ml_care_card:nth-child(2) { background: linear-gradient(145deg, #f7fbff, #eef4fb); }
.ml_care_card:nth-child(3) { background: linear-gradient(145deg, #fffdf6, #f1f0e8); }
.ml_care_card:nth-child(4) { background: linear-gradient(145deg, #f9fbff, #f2f4fb); }
.ml_care_card:after {
	content: ""; display: block; order: 2; width: 100%; height: 112px; margin: auto 0 9px;
	border-radius: 9px; background: transparent center / contain no-repeat; pointer-events: none;
}
.ml_care_card:nth-child(1):after { background-image: url('../../img/main_source/care-card.png'); }
.ml_care_card:nth-child(2):after { background-image: url('../../img/main_source/care-check.png'); }
.ml_care_card:nth-child(3):after { background-image: url('../../img/main_source/care-food.png'); }
.ml_care_card:nth-child(4):after { background-image: url('../../img/main_source/care-ai.png'); }
/* [2026-08-26 추가] "펫 케어카드" 카드(1번째)의 휴대폰 이미지에, 선물 이벤트(tail.sub.php의
   ge_coin_spin)와 동일한 "동전 회전" 효과를 4초마다 한 번씩 재생한다. background-image로 그리는
   가상요소(:after)라 실제 DOM은 없으므로, 부모 카드에 붙는 .ml_care_card_spin 클래스를 스크립트가
   4초마다 껐다 켜서(아래 index.php) 그 순간에만 :after에 애니메이션을 걸어준다. 3D 회전이 납작하게
   보이지 않도록 부모에 perspective를 준다.
   [2026-08-26 수정] 4초 간격 + 회전 속도를 느리게 요청받아 animation-duration을 .7s에서 1.1s로 늘림. */
.ml_care_card:nth-child(1) { perspective: 400px; }
@keyframes mlCareCardCoinSpin {
	0%   { transform: rotateY(0deg) scale(1); }
	55%  { transform: rotateY(560deg) scale(1.12); }
	100% { transform: rotateY(720deg) scale(1); }
}
.ml_care_card:nth-child(1).ml_care_card_spin:after { animation: mlCareCardCoinSpin 1.1s ease-out; }
.ml_care_card h4 { font-size: 15px; }
.ml_care_card p { margin-bottom: 8px; min-height: 35px; font-size: 11px; }
.ml_care_badge { right: 12px; top: 12px; padding: 2px 6px; font-size: 8px; }
.ml_care_btn { display: block; order: 3; width: 100%; margin-top: 0; padding: 7px 12px; text-align: center; font-size: 10px; }
.ml_consult_list { min-height: 35px; margin: 0 0 6px; }
.ml_consult_list li { position: relative; margin: 0; padding: 2px 0 2px 10px; font-size: 9.5px; line-height: 1.35; }
.ml_consult_list li:before { content: ""; position: absolute; left: 0; top: 8px; width: 3px; height: 3px; border-radius: 50%; background: #8796c3; }
.ml_consult_list li.ml_empty { min-height: 30px; padding: 7px 0; }
.ml_consult_list li.ml_empty:before { display: none; }
.ml_care_infobar {
	display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0;
	padding: 9px 10px; border: 1px solid #eceee9; border-radius: 10px; background: #fff;
	box-shadow: 0 3px 12px rgba(42, 52, 39, .035);
}
.ml_care_infobar a {
	position: relative; min-width: 0; min-height: 52px; padding: 4px 12px;
	display: flex; align-items: center; gap: 9px; text-align: left; color: #303532;
}
.ml_care_infobar a:not(:last-child):after {
	content: ""; position: absolute; right: 0; top: 8px; bottom: 8px; width: 1px; background: #edf0eb;
}
.ml_care_info_icon {
	width: 31px; height: 31px; flex: 0 0 31px; border-radius: 9px;
	display: flex; align-items: center; justify-content: center;
	font-size: 14px; color: #fff; box-shadow: inset 0 -2px 0 rgba(0,0,0,.06);
}
.ml_care_info_icon1 {
  background: transparent url('../../img/main_source/care-info-observation.png') center/contain no-repeat;
}
.ml_care_info_icon1 i { display: none; }
.ml_care_info_icon2 {
	background: transparent url('../../img/main_source/care-info-hospital.png') center/contain no-repeat;
}
.ml_care_info_icon3 {
	background: transparent url('../../img/main_source/care-info-print.png') center/contain no-repeat;
}
.ml_care_info_icon4 {
	background: transparent url('../../img/main_source/care-info-family.png') center/contain no-repeat;
}
.ml_care_info_icon5 {
	background: transparent url('../../img/main_source/care-info-transfer.png') center/contain no-repeat;
}
.ml_care_info_icon2 i,
.ml_care_info_icon3 i,
.ml_care_info_icon4 i,
.ml_care_info_icon5 i { display: none; }
.ml_care_info_text { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.ml_care_info_text b { font-size: 9.5px; line-height: 1.25; color: #242925; white-space: nowrap; }
.ml_care_info_text small { font-size: 8px; line-height: 1.3; color: #858b86; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ml_care_infobar a:hover { background: #fafbf8; border-radius: 7px; }

/* 포인트 나눔 */
.ml_donate {
	position: relative; padding: 13px 14px; border: 1px solid #f0f0ed; border-radius: 11px;
	background: linear-gradient(100deg, #f8f8f6 0%, #fafafa 60%, #f7f8f6 100%);
}
/* [2026-08-22 수정] 4개 트랙 중 처음 2개(타이틀/나의 포인트)가 고정 px라서, 화면이 좁아지면
   그 두 칸은 그대로인 채 마지막(기부 정보) 칸만 계속 줄어들다 못해 눌려 보였다 - 4개 트랙 모두
   minmax()로 바꿔 화면 폭에 맞춰 다같이 비례해서 줄어들게 하고(최소값 아래로는 안 줄어듦),
   그 덕분에 타이틀·나의 포인트·기부 정보가 최대한 넓은 구간까지 한 행 안에 같이 들어간다. */
.ml_donate_panels {
	display: grid;
	grid-template-columns: minmax(90px, 180px) minmax(140px, 260px) minmax(18px, 32px) minmax(120px, 1fr);
	align-items: stretch; gap: 9px; flex-wrap: nowrap;
}
/* 서버에 이전 기부 HTML이 남아 있어도 3개 항목이 올바른 칸에 배치되도록 호환 */
.ml_donate > .ml_sec_head + .ml_donate_desc + .ml_donate_panels {
	box-sizing: border-box; width: 100%; padding-left: 180px;
	grid-template-columns: 260px 32px minmax(0, 1fr);
}
.ml_donate > .ml_sec_head { position: absolute; z-index: 2; left: 18px; top: 20px; gap: 7px; margin: 0; }
.ml_donate > .ml_sec_head h3 { order: 1; }
.ml_donate > .ml_sec_head .ml_care_badge { order: 2; }
.ml_donate > .ml_sec_head h3 { font-size: 15px; line-height: 1.3; }
.ml_donate > .ml_sec_head + .ml_donate_desc {
	position: absolute; z-index: 2; left: 18px; top: 52px; width: 145px; margin: 0;
}
.ml_donate_intro { padding: 9px 5px 7px 3px; }
.ml_donate_intro .ml_sec_head { gap: 7px; margin: 0 0 8px; }
.ml_donate_intro .ml_sec_head h3 { font-size: 15px; line-height: 1.3; }
.ml_donate .ml_care_badge { position: static; padding: 2px 5px; font-size: 7px; }
.ml_donate_desc { margin: 0 0 9px; color: #666d67; font-size: 9.5px; line-height: 1.7; }
.ml_donate_panel {
	position: relative; min-width: 0; min-height: 128px; padding: 15px 18px;
	border: 1px solid #f0f0eb; border-radius: 9px; background: rgba(255,255,255,.88);
	box-shadow: 0 3px 11px rgba(51, 56, 45, .025); overflow: hidden;
}
.ml_donate_panel_points { gap: 0; }
.ml_donate_stat { position: relative; z-index: 1; align-self: stretch; justify-content: center; gap: 2px; }
.ml_donate_stat > span:first-child { color: #444a45; font-size: 10px; font-weight: 700; }
.ml_donate_stat b { color: #285323; font-size: 22px; line-height: 1.2; }
.ml_donate_sub { margin-top: 10px; color: #5e6a5e; font-size: 9px; }
.ml_donate_stat strong { color: #285323; font-size: 14px; line-height: 1.2; }
.ml_donate_coin {
	position: absolute; z-index: 0; right: 10px; top: 21px; width: 96px; height: auto;
	object-fit: contain; pointer-events: none;
}
.ml_donate_btn {
	padding: 7px 14px; border-radius: 6px; background: #496f35; color: #fff;
	font-size: 9px; font-weight: 700;
}
.ml_donate_btn:hover { background: #395a29; }
.ml_donate_arrow { display: flex; align-items: center; justify-content: center; color: #315f2c; font-size: 20px; }
.ml_donate_panel_recipient { padding: 19px 18px; align-items: flex-start; }
.ml_donate_panel_recipient:after { content: none; }
.ml_donate > .ml_sec_head + .ml_donate_desc + .ml_donate_panels .ml_donate_panel_recipient:after {
	content: ""; position: absolute; right: 1px; bottom: 4px;
	width: 228px; height: 108px;
	background: url('../../img/main_source/donate-shelter-support.png') right bottom / contain no-repeat;
	pointer-events: none;
}
.ml_donate_recipient_text { position: relative; z-index: 1; flex: 0 0 145px; gap: 7px; }
.ml_donate_recipient_text b { color: #353a36; font-size: 10px; line-height: 1.4; }
.ml_donate_recipient_text span { display: none; }
/* [2026-08] 이 좁은(145px) 카드 폭에 맞춰 파트너 로고/이름 폰트는 작게 조정하되, 위의
   ".ml_donate_recipient_text span{display:none}"이 단체명 span까지 같이 숨기고 있었으므로
   display를 다시 되살린다(안 보인다던 버그의 원인). 로고는 사용자 요청대로 기존 대비 2배로. */
.ml_donate_recipient_text .ml_donate_partner_logo { height: 30px; max-width: 140px; }
.ml_donate_recipient_text .ml_donate_partner_name { display: inline-block; font-size: 8px; }
/* 기부 예정기관(관리자 설정의 "기부 대상" 문구) - 파트너 로고/이름 아래에 항상 표시.
   ".ml_donate_recipient_text span{display:none}"보다 특이성이 높아야 이겨서 실제로
   보이므로, 반드시 ".ml_donate_recipient_text .ml_donate_target_org" 형태로 지정한다. */
.ml_donate_recipient_text .ml_donate_target_org { display: block; margin-top: 4px; font-size: 8px; color: #858b86; line-height: 1.4; }
.ml_donate_target_org b { color: #5e6a5e; font-weight: 700; }
.ml_donate_support {
	position: absolute; right: 3px; bottom: 7px; width: 228px; height: auto;
	object-fit: contain; pointer-events: none;
}
.ml_donate > .ml_sec_head + .ml_donate_desc + .ml_donate_panels .ml_donate_icon { display: none; }
.ml_donate > .ml_sec_head + .ml_donate_desc + .ml_donate_panels .ml_donate_panel_points:after {
	content: ""; position: absolute; right: 10px; top: 21px; width: 96px; height: 72px;
	background: url('../../img/main_source/donate-paw-coins.png') center / contain no-repeat;
}
.ml_donate > .ml_sec_head + .ml_donate_desc + .ml_donate_panels .ml_donate_panel_points {
	overflow: visible;
}
.ml_donate > .ml_sec_head + .ml_donate_desc + .ml_donate_panels .ml_donate_btn {
	position: absolute; z-index: 5; left: -180px; bottom: 4px;
}

/* 통계와 뉴스레터 */
.ml_stats {
	min-height: 62px; margin: 24px 0 18px; padding: 8px 14px; gap: 0;
	border: 1px solid #edf0f4; border-radius: 10px;
	background: linear-gradient(90deg, #eef5ff 0%, #f8f8fb 52%, #fbf4f8 100%);
}
.ml_stat_item {
	position: relative; min-width: 0; flex-direction: row; justify-content: center;
	align-items: center; gap: 10px; text-align: left;
}
.ml_stat_item:not(:last-child):after { content: ""; position: absolute; right: 0; width: 1px; height: 30px; background: #e3e7eb; }
.ml_stat_icon {
	width: 34px; height: 34px; flex: 0 0 34px; border-radius: 11px; font-size: 15px;
	box-shadow: inset 0 0 0 1px rgba(255,255,255,.82), 0 2px 5px rgba(50,60,70,.06);
}
.ml_stat_icon1 { color: #7858a6; background: linear-gradient(145deg, #f2eaff, #e6ddf8); }
.ml_stat_icon2 { color: #3678bd; background: linear-gradient(145deg, #eaf5ff, #dcecff); }
.ml_stat_icon3 { color: #3d8751; background: linear-gradient(145deg, #eaf7ea, #dcefdc); }
.ml_stat_icon4 { color: #dc8b22; background: linear-gradient(145deg, #fff3d9, #ffe7bd); }
.ml_stat_copy { min-width: 0; display: flex; flex-direction: column; align-items: flex-start; gap: 1px; }
.ml_stat_copy > span { color: #555d58; font-size: 9.5px; line-height: 1.2; white-space: nowrap; }
.ml_stat_copy b { color: #171b18; font-size: 17px; font-weight: 800; line-height: 1.15; }
.ml_stat_copy b .ml_stat_num { color: inherit; font-size: inherit; }
.ml_brand {
	position: relative; display: grid; grid-template-columns: 210px 245px minmax(0, 1fr);
	align-items: center; gap: 22px; min-height: 132px; margin-top: 0; padding: 0 28px 0 18px;
	border: 1px solid #f0f0ee; border-radius: 11px;
	background: linear-gradient(100deg, #fbfaf7 0%, #f8f8f7 58%, #f5f7f4 100%); color: #202422;
	overflow: hidden;
}
.ml_brand:before { content: none; }
.ml_brand_art { align-self: end; width: 210px; height: 126px; display: flex; align-items: flex-end; justify-content: center; }
.ml_brand_art img { display: block; width: 210px; height: auto; max-height: 126px; object-fit: contain; object-position: center bottom; }
.ml_brand_text { min-width: 0; }
.ml_brand_text h3 { margin: 0 0 7px; color: #202420; font-size: 17px; font-weight: 800; line-height: 1.4; }
.ml_brand_text p { margin: 0; color: #6f7470; font-size: 9px; line-height: 1.6; }
.ml_newsletter { justify-self: start; width: 100%; max-width: 470px; min-width: 0; }
.ml_newsletter > p { margin: 0 0 7px; color: #555b57; font-size: 9px; }
.ml_newsletter_row { display: flex; gap: 0; padding: 3px; border: 1px solid #edf0eb; border-radius: 7px; background: #fff; }
.ml_newsletter_row input { padding: 7px 10px; border-radius: 5px; font-size: 9px; }
.ml_newsletter_row button { padding: 7px 18px; border-radius: 5px; background: #42652f; font-size: 9px; }
.ml_newsletter_row button:hover { background: #345124; }
.ml_newsletter_msg { min-height: 8px; margin: 2px 0 0; font-size: 8px; }
.ml_newsletter_social { display: flex; align-items: center; gap: 13px; margin-top: 1px; color: #4f5550; font-size: 9px; }
.ml_newsletter_social > span { margin-right: 4px; font-weight: 700; }
.ml_newsletter_social a { color: #5d635e; font-size: 12px; line-height: 1; }
.ml_newsletter_social a:hover { color: #42652f; }

@media (max-width: 1220px) {
	.mainContents { width: calc(100% - 32px); }
}
@media (max-width: 960px) {
	/* [2026-08-24 삭제] 아래 3줄(.ml_daily_bar flex-wrap:wrap / .ml_daily_toggles order:3,width:100% /
	   .ml_toggle_btn:first-child border-left:0)은 "우리 아이는 오늘?" 바를 한 줄 유지+줄바꿈 대신
	   가로 한 줄(nowrap)로 유지하도록 다시 디자인한 아래쪽 "2026-08-21 정합 보정" 구간(그리고 그
	   안의 769~960px 전용 보정)이 생기기 전, 예전 "줄바꿈 허용" 레이아웃 때 쓰던 규칙이었다.
	   두 구간 모두 미디어쿼리 유무와 무관하게 같은 클래스를 겨냥하고 있어서, CSS 소스 순서상
	   나중에 오는(더 아래에 있는) 2026-08-21 구간의 flex-wrap:nowrap이 이 자리의 flex-wrap:wrap을
	   항상 덮어써 왔다 - 즉 "줄바꿈"은 애초에 한 번도 실제로 적용된 적이 없었다. 문제는
	   order:3(기록하기 버튼보다 뒤에 그려지게 만듦)만 아무 데도 재설정되지 않은 채 그대로
	   남아있었던 것 - 769~960px 폭에서 "기록하기" 버튼이 토글 3개보다 앞으로 튀어나오고, 더
	   좁아지면 글자가 겹치는 원인이었다(신고 접수, 2026-08-24). border-left:0 규칙은 아래
	   2026-08-21 구간(.ml_toggle_btn:first-child)에 이미 동일하게 있어 중복이었다. 이제 이 3줄을
	   지워서, 960~769px 구간도 다른 폭들과 동일하게 DOM 순서 그대로(펫 전환→연속기록→토글3개→
	   기록하기) 한 줄로 렌더되고, 진짜로 필요하면(공간이 아주 부족하면) 아래 769~960px 전용
	   구간의 글자크기/여백 축소로 대응한다. */
	.ml_brand { grid-template-columns: 180px 220px minmax(0, 1fr); padding: 0 20px 0 8px; gap: 14px; }
	.ml_brand_art { width: 180px; }
	.ml_brand_art img { width: 180px; }
	.ml_care_infobar { grid-template-columns: repeat(3, minmax(0, 1fr)); }
	.ml_care_infobar a:nth-child(3):after { display: none; }
}
@media (max-width: 768px) {
	.mainContents { width: 100%; padding: 12px 16px 34px; }
	.ml_sec { margin-bottom: 26px; }
	.ml_quickmenu { margin-bottom: 26px; }
	.ml_qm_item { min-height: 66px; flex-basis: 140px; }
	.ml_daily_bar { padding: 12px; }
	.ml_toggle_btn { padding: 0 8px; }
	.ml_sec_head_split { align-items: stretch; }
	.ml_sec_head_split > div:first-child { width: 100%; }
	.ml_memory { padding: 16px; }
	/* [2026-08-22 수정] 42%(카드 2장 + 어중간한 여백)였던 것을, 위쪽 "모바일 전용(768px 이하)"
	   블록에서 이미 잡아준 정확한 2장 폭(calc((100% - 10px) / 2))과 동일하게 맞춘다 - 이 블록이
	   소스 순서상 더 뒤에 있어 실제로는 이 값이 최종 적용되고 있었다. */
	.ml_memory_grid > .ml_memory_card { flex-basis: calc((100% - 10px) / 2); }
	.ml_discover_label { margin-top: -32px; }
	.ml_care_grid > .ml_care_card { min-height: 230px; }
	/* [2026-08-22 수정] 1fr(한 줄에 1개씩, 5줄)로 강제하던 것을 제거 - 위쪽 960px 구간에서 이미
	   잡아준 3열 그리드(5개 → 3+2, 두 줄)를 그대로 물려받게 하고, 세로 구분선 스타일도(가로 구분선
	   으로 바꾸던 것을 제거) 3열 레이아웃에 맞는 원래 스타일을 그대로 쓴다. */
	.ml_care_infobar { padding: 6px 10px; }
	.ml_care_infobar a { min-height: 50px; padding: 6px 4px; }
	.ml_care_info_text b { font-size: 11px; }
	.ml_care_info_text small { font-size: 9px; }
	/* [2026-08-22 수정] 타이틀/나의 포인트/화살표/기부 정보 4칸이 이 구간(768px 이하)에서도
	   계속 한 행에 들어가도록, 1fr 24px 1fr(3칸, 인트로가 전체 폭을 차지)로 강제하던 것을 버리고
	   기본 4칸 minmax 그리드를 유지하되 각 칸 최소값과 패널 안쪽 여백만 더 좁게 조정한다. 장식용
	   이미지(포인트 코인, 보호소 사진)는 패널이 좁아지면 글자와 겹치거나 잘려서 보기 흉해지므로
	   이 구간부터 숨긴다(둘 다 position:absolute 장식 요소라 숨겨도 레이아웃에는 영향 없음). */
	.ml_donate_panels {
		grid-template-columns: minmax(64px, 180px) minmax(96px, 260px) minmax(12px, 32px) minmax(88px, 1fr);
		gap: 6px;
	}
	.ml_donate > .ml_sec_head + .ml_donate_desc + .ml_donate_panels {
		padding-left: 0;
		grid-template-columns: minmax(64px, 180px) minmax(96px, 260px) minmax(12px, 32px) minmax(88px, 1fr);
	}
	.ml_donate > .ml_sec_head { position: static; margin-bottom: 8px; }
	.ml_donate > .ml_sec_head + .ml_donate_desc { position: static; width: auto; margin-bottom: 10px; }
	.ml_donate > .ml_sec_head + .ml_donate_desc + .ml_donate_panels .ml_donate_btn {
		position: static;
	}
	.ml_donate_intro { padding: 5px 5px 8px; }
	.ml_donate_intro .ml_donate_desc br { display: none; }
	.ml_donate_panel { min-height: 110px; padding: 10px 10px; }
	.ml_donate_stat b { font-size: 16px; }
	.ml_donate_recipient_text { flex: 1 1 auto; }
	.ml_donate_recipient_text .ml_donate_partner_logo { height: 22px; max-width: 90px; }
	.ml_donate_recipient_text .ml_donate_partner_name,
	.ml_donate_recipient_text .ml_donate_target_org { font-size: 7.5px; }
	.ml_donate_coin, .ml_donate_support { display: none; }
	.ml_stats { grid-template-columns: repeat(2, 1fr); row-gap: 12px; }
	.ml_stat_item:nth-child(2):after { display: none; }
	/* [2026-08-22 수정] 1fr(한 칸)로 합쳐서 타이틀과 뉴스레터 입력폼이 위아래로 완전히 분리되던
	   것을, 이미지(brand_art)만 숨기고 타이틀|입력폼 2칸 그리드로 바꿔 계속 한 행에 나란히
	   보이게 한다. 입력창 자체는 이미 flex:1 + min-width:0(위 정밀 보정 구간)로 폭에 맞게
	   줄어들도록 되어 있어, 칸 폭만 확보해주면 이 구간에서도 계속 한 행을 유지한다. */
	.ml_brand {
		grid-template-columns: minmax(84px, 1fr) minmax(150px, 1.7fr);
		align-items: center; padding: 14px 16px; gap: 10px;
	}
	.ml_brand_art { display: none; }
	.ml_brand_text h3 { font-size: 13px; margin-bottom: 4px; }
	.ml_brand_text p { font-size: 8px; }
	.ml_newsletter { width: 100%; max-width: none; }
	.ml_newsletter_row button { padding: 7px 12px; }
	.ml_newsletter_social { flex-wrap: wrap; gap: 8px; }
}
@media (max-width: 480px) {
	.ml_qm_item { flex-basis: 44%; }
	.ml_qm_text small { display: none; }
	.ml_daily_toggles { overflow-x: auto; }
	.ml_toggle_btn { flex: 0 0 auto; }
	/* .ml_care_grid는 960px/600px 구간에서 이미 2열 그리드(4장 → 2행)로 고정돼 있어 여기서 더
	   손대지 않는다. .ml_memory_grid는 768px 이하에서 이미 정확히 2장 보이도록 고정돼 있어(위쪽
	   블록) 여기서 더 줄이지 않는다 - 400px(모바일 전용 화면 기준, [2026-08-23] 390px→400px로 상향) 바로 위까지도 카드 2장이
	   잘리지 않고 보인다. .ml_discover_grid도 위쪽 600px 구간에서 이미 정확히 2열 그리드로
	   고정돼 있어 마찬가지로 여기서 더 손대지 않는다. */
	.ml_stats { grid-template-columns: 1fr; }
	.ml_stat_item:after { display: none; }
}

/* 2026-08-21 '우리 아이는 오늘?' 시안 정합 보정
   동작과 저장 로직은 유지하고, 선택부/상태 바의 배치와 긴 이름 표시만 조정한다. */
.ml_daily,
.ml_daily_bar,
.ml_pet_switcher { overflow: visible; }
.ml_daily { position: relative; z-index: 6; }
.ml_daily .ml_sec_head { margin-bottom: 12px; }
.ml_daily_bar {
	position: relative; min-height: 66px; padding: 0; gap: 0; flex-wrap: nowrap;
	background: transparent; border-radius: 0;
}
.ml_daily_bar::before {
	content: ""; position: absolute; z-index: 0;
	left: 225px; right: 0; top: 3px; bottom: 3px;
	border-radius: 12px;
	background: linear-gradient(90deg, #f6f5f1 0%, #faf7f3 100%);
}
.ml_daily_bar > * { position: relative; z-index: 1; }
/* [2026-08-22 추가] "N일 연속 기록 중" 글자가 오른쪽 둥근 박스(.ml_daily_bar::before)의 왼쪽 모서리에
   바로 붙어 보인다는 피드백 - 박스 시작 지점부터 텍스트까지 여백을 준다. */
.ml_daily_streak { padding-left: 14px; }
.ml_pet_switcher {
	flex: 0 0 225px; width: 225px; min-width: 0; padding-right: 24px;
}
.ml_pet_switch_btn {
	width: 100%; min-width: 0; height: 66px; padding: 3px 0;
	gap: 10px; border: 0; border-radius: 0; background: transparent;
	text-align: left;
}
.ml_pet_switch_btn .ml_pet_avatar { width: 52px; height: 52px; }
.ml_pet_switch_btn b {
	flex: 1 1 auto; min-width: 0; overflow: hidden;
	text-overflow: ellipsis; white-space: nowrap;
	font-size: 15px; line-height: 1.3; color: #222; text-align: left;
}
.ml_pet_switch_btn > i { flex: 0 0 auto; margin-left: 1px; color: #222; font-size: 12px; }
.ml_pet_switch_list {
	left: 0; right: auto; top: calc(100% + 6px); z-index: 100;
	width: 225px; min-width: 0; max-width: calc(100vw - 32px);
	padding: 7px; overflow-x: hidden; overflow-y: auto;
}
.ml_pet_switch_item { min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
.ml_pet_switch_item .ml_pet_avatar { width: 34px; height: 34px; }
.ml_daily_toggles { align-self: stretch; gap: 0; min-width: 0; flex-wrap: nowrap; }
.ml_toggle_btn {
	min-width: 0; min-height: 60px; padding: 0 13px; gap: 8px;
	border-left: 1px solid #e6e3dc; font-size: 11.5px; color: #292b29;
}
.ml_toggle_btn:first-child { border-left: 0; }
.ml_toggle_btn i { flex: 0 0 auto; font-size: 20px; color: #222; }
.ml_toggle_btn.ml_on { color: #3e632d; }
.ml_toggle_btn.ml_on i { color: #3e632d; }
.ml_record_btn {
	align-self: stretch; min-width: 116px; min-height: 60px; margin: 3px 0;
	justify-content: center; padding: 0 16px; gap: 8px;
	border-radius: 0 12px 12px 0; background: transparent;
	color: #ff6a2b; font-size: 12px;
}
.ml_record_btn i { font-size: 23px; }
.ml_record_btn:hover { background: #fff0e7; color: #ed5d20; }

@media (max-width: 960px) and (min-width: 769px) {
	.ml_daily_bar { flex-wrap: nowrap; }
	.ml_daily_bar::before { left: 160px; }
	.ml_pet_switcher { flex-basis: 160px; width: 160px; padding-right: 10px; }
	.ml_pet_switch_btn .ml_pet_avatar { width: 40px; height: 40px; }
	.ml_pet_switch_list { width: 160px; }
	/* [2026-08-24 추가] 이 구간(769~960px)에서 펫 전환(고정폭)/기록하기 버튼(고정폭)은 줄어들지
	   않고, 오직 토글 3개(.ml_daily_toggles, flex:1)만 남은 공간을 떠안다 보니 "오늘부터 기록을
	   시작해보세요" 같은 안내 문구가 길 때 토글 3개가 들어갈 공간이 부족해져 글자가 겹쳐 보이는
	   문제가 있었다(신고 접수). 안내 문구는 토글/기록하기 버튼보다 덜 중요한 보조 문구이므로,
	   이 구간에서만 너무 길면 "..."으로 줄여 토글에 공간을 더 준다. */
	.ml_daily_streak { flex-shrink: 1; min-width: 0; overflow: visible; max-width: none; }
	#mlDailyStreak { display: inline-block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 150px; vertical-align: middle; }
	.ml_toggle_btn { padding: 0 8px; font-size: 10.5px; }
	.ml_record_btn { min-width: 84px; padding: 0 8px; font-size: 11px; }
	/* [2026-08-22 수정] 위쪽(960px 이하) 블록에서 .ml_sec_head_split을 flex-direction:column으로
	   바꾸는데, 이 구간(769~960px)에는 768px 이하에서만 걸리는 align-items:stretch 보정이
	   적용되지 않아 "2026-08-21 정합 보정" 블록의 align-items:center(가로 배치 기준으로 만든 값)가
	   그대로 남아 있었다. column으로 바뀌면 그 속성이 교차축(가로) 정렬이 되어 "펫 메모리" 타이틀
	   영역(뱃지/제목/설명/버튼)이 폭 전체로 늘어나지 못하고 가운데로 몰려 보였다 - stretch로
	   되돌려 좌측 정렬 폭 100%를 유지한다. */
	.ml_sec_head_split { align-items: stretch; }
}
@media (max-width: 768px) {
	.ml_daily_bar { display: flex; flex-direction: column; align-items: stretch; gap: 10px; padding: 0; }
	.ml_daily_bar::before { display: none; }
	.ml_daily_streak { padding-left: 0; }
	/* [2026-08-22 수정] 좁은 화면에서 .ml_daily_bar가 세로로 쌓이면서 '동물 선택' 드롭다운
	   (.ml_pet_switch_list)이 바로 아래 형제 요소인 .ml_daily_toggles(토글 버튼 줄) 영역과
	   겹치는데, 두 형제 모두 상위 규칙(.ml_daily_bar > *)에서 동일하게 z-index:1을 받고 있어서
	   드롭다운 자체는 z-index:100이어도 그 부모(.ml_pet_switcher, z-index:1)의 쌓임 맥락 안에
	   갇혀 있었다. 형제 중 나중에 나오는 .ml_daily_toggles가 같은 z-index에서는 DOM 순서상
	   위에 그려져, 드롭다운이 화면엔 보이지만 실제로는 토글 버튼들에 가려 클릭(선택)이 안 되는
	   문제가 있었다(신고 접수). .ml_pet_switcher만 형제보다 높은 z-index를 갖도록 해서
	   드롭다운이 항상 위에 그려지고 선택 가능하도록 고친다. */
	.ml_pet_switcher { flex: 0 0 auto; width: 100%; padding-right: 0; z-index: 5; }
	.ml_pet_switch_btn { width: 100%; max-width: 280px; height: 58px; }
	.ml_pet_switch_btn .ml_pet_avatar { width: 48px; height: 48px; }
	.ml_pet_switch_list { width: min(280px, calc(100vw - 32px)); }
	.ml_daily_toggles {
		order: initial; width: 100%; min-height: 58px; padding: 0 6px;
		border-radius: 11px; background: linear-gradient(90deg, #f6f5f1, #faf7f3);
	}
	.ml_toggle_btn { min-height: 58px; padding: 0 8px; }
	.ml_record_btn {
		align-self: flex-end; min-height: 42px; min-width: 112px; margin: 0;
		border-radius: 9px; background: #fff0e7;
	}
}
@media (max-width: 480px) {
	/* [2026-08-23 요청 반영] 이 가로 스크롤 토글 줄에도 한때 touch-action:pan-x pan-y를 다시
	   허용해 손가락 스와이프를 살려뒀었는데, 사이트 전체 스와이프를 완전히 없애 달라는 요청에
	   따라 사이트 기본값(touch-action:pan-y, default.css)을 그대로 따르도록 되돌렸다 - 화면에
	   안 보이는 토글 버튼은 더 이상 손가락 스와이프로는 닿지 않는다(마우스 드래그/키보드는 영향 없음). */
	.ml_daily_toggles { overflow-x: auto; justify-content: flex-start; }
	.ml_toggle_btn { flex: 0 0 auto; min-width: 142px; }
}

/* [2026-08-22] 기부 영역 반응형 균형 보정
   포인트 카드와 보호소 카드가 화면 폭 변화에 항상 같은 비율로 줄어들도록
   두 카드 트랙에 동일한 minmax(0, 1fr)를 사용한다. */
.ml_donate_panels {
	grid-template-columns: minmax(150px, 180px) minmax(0, 1fr) minmax(24px, 32px) minmax(0, 1fr);
}
.ml_donate_panel_points,
.ml_donate_panel_recipient {
	width: 100%;
	min-width: 0;
	box-sizing: border-box;
}

@media (max-width: 768px) {
	.ml_donate_panels {
		grid-template-columns: minmax(64px, 150px) minmax(0, 1fr) minmax(12px, 24px) minmax(0, 1fr);
	}
	.ml_donate > .ml_sec_head + .ml_donate_desc + .ml_donate_panels {
		grid-template-columns: minmax(0, 1fr) minmax(12px, 24px) minmax(0, 1fr);
	}
	.ml_donate_panel_points,
	.ml_donate_panel_recipient {
		min-height: 110px;
		padding: 10px;
	}
}

/* [2026-08-22] 넓은 화면의 기부 카드 비율 및 텍스트/이미지 겹침 보정 */
@media (min-width: 769px) {
	.ml_donate_panels {
		grid-template-columns: minmax(150px, 180px) minmax(220px, .8fr) minmax(24px, 32px) minmax(330px, 1.2fr);
	}
	.ml_donate_panel_recipient {
		padding-right: 238px;
	}
	.ml_donate_recipient_text {
		flex: 1 1 auto;
		width: 100%;
		max-width: 100%;
	}
	.ml_donate_support,
	.ml_donate > .ml_sec_head + .ml_donate_desc + .ml_donate_panels .ml_donate_panel_recipient:after {
		right: 8px;
		width: 220px;
	}
}

/* 값이 0인 통계 카드가 출력되지 않을 때 남은 카드가 빈 칸 없이 균등 배치된다. */
.ml_stats {
	grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
}

/* ==========================================================================
   [메인 인덱스 - 히어로 아래 섹션 PC 폰트 확대 - 2026-08-22]
   히어로(.mainVisualImage, main.css)는 지침에 따라 건드리지 않는다.
   그 아래 실제 방문자가 읽는 섹션(퀵메뉴 / 인기 이야기 / 우리 아이는 오늘 /
   펫 메모리 / 함께 발견해요 / 펫 케어 / 기부 / 통계 / 브랜드·뉴스레터) 글자를
   전반적으로 한 단계씩(대략 1px) 키운다.
   - 카드 높이가 텍스트 줄 수에 고정돼 있지 않은 요소(2줄 말줄임 제목 등)는
     그대로 커져도 잘리지 않으므로 안전하게 포함했다.
   - 아주 작은 배지·달력 숫자·아이콘처럼 고정된 원/정사각형 박스 안에 딱 맞게
     들어가 있어 커지면 넘칠 수 있는 요소는 이번에는 제외했다.
   - 관리자 전용 팝업 편집 행(.ml_*_edit_row 등, 방문자에게는 보이지 않음)도
     대상에서 제외했다.
   [2026-08-22 수정] 처음엔 769px 이상(태블릿+PC)에만 적용했었는데, mobile_home.css 주석에
   명시된 사이트 설계 기준("391px 이상은 폭과 무관하게 전부 이 데스크탑 화면이 담당 - 히어로
   아래 카드들은 391~768px 구간에서도 main_lower.css 자체 반응형 그리드로 열 수만 5→4→3→2로
   줄어들 뿐 화면 종류는 그대로 PC")과 맞지 않아, 창을 좁혀 카드가 3개·2개로 줄어드는 순간
   글자만 769px 문턱에서 옛 작은 크기로 도로 줄어드는 것처럼 보이는 문제가 있었다(신고 접수).
   실제 폰 전용 화면(mobile_home.css)은 391px 미만에서만 별도로 켜지므로, 그 경계에 맞춰
   391px 이상 전체 구간에 이 확대 크기를 끊김 없이 적용하도록 수정한다.
   [2026-08-23 추가 수정] 모바일 전용 화면 기준이 390px→400px로 상향됨에 따라, 이 블록의
   경계도 함께 401px 이상으로 맞춘다(mobile_home.css/index.php와 동일한 400px 기준).
   ========================================================================== */
@media (min-width: 401px) {
	/* 공통 섹션 제목 */
	.ml_sec_head h3, .ml_sec_head_split h3 { font-size: 21px; }
	.ml_sec_head .ml_more { font-size: 14px; }
	.ml_empty { font-size: 14px; }

	/* 퀵메뉴 */
	.ml_qm_text b { font-size: 15px; }
	.ml_qm_text small { font-size: 12px; }

	/* 커뮤니티 인기 이야기 */
	.ml_popular_cat { font-size: 11.5px; }
	.ml_popular_title { font-size: 14.5px; }
	.ml_popular_meta { font-size: 12.5px; }

	/* 우리 아이는 오늘? */
	.ml_daily_guest p { font-size: 15.5px; }
	.ml_daily_login_btn { font-size: 14.5px; }
	.ml_pet_switch_btn b { font-size: 14.5px; }
	.ml_pet_switch_btn i { font-size: 12px; }
	.ml_pet_switch_item { font-size: 14px; }
	.ml_toggle_btn { font-size: 14.5px; }
	.ml_toggle_btn i { font-size: 15px; }
	.ml_record_btn { font-size: 14.5px; }
	.ml_daily_streak { font-size: 13.5px; }
	.ml_daily_streak i { font-size: 13px; }
	.ml_layer_bubble { font-size: 13.5px; }
	.ml_daily_modal_title { font-size: 16px; }
	.ml_daily_point_note { font-size: 12px; }

	/* 펫 메모리 */
	.ml_memory_desc { font-size: 14px; }
	.ml_memory_btn { font-size: 14px; }
	.ml_memory_title { font-size: 14px; }
	.ml_memory_page_title { font-size: 12.5px; }
	.ml_memory_date { font-size: 12.5px; }

	/* 함께 발견해요 */
	.ml_discover_region_select { font-size: 13px; }
	.ml_discover_label { font-size: 13.5px; }

	/* 펫 케어 주요 서비스 */
	.ml_care_card h4 { font-size: 17px; }
	.ml_care_card p { font-size: 13.5px; min-height: 44px; }
	.ml_care_btn { font-size: 13.5px; }
	.ml_consult_list li { font-size: 13px; }
	.ml_care_infobar a { font-size: 13.5px; }

	/* 기부 - 포인트 나눔 */
	.ml_donate_desc { font-size: 14.5px; }
	.ml_donate_stat > span:first-child { font-size: 13.5px; }
	.ml_donate_stat b { font-size: 23px; }
	.ml_donate_sub { font-size: 12.5px; }
	.ml_donate_btn { font-size: 14px; }
	.ml_donate_recipient_text b { font-size: 15.5px; }
	.ml_donate_recipient_text span { font-size: 13px; }
	.ml_donate_partner_name { font-size: 12px; }

	/* 사이트 Activity Statistics */
	.ml_stat_icon { font-size: 18px; }
	.ml_stat_item span { font-size: 13.5px; }
	.ml_stat_item b { font-size: 25px; }

	/* 브랜드 / 뉴스레터 */
	.ml_brand_text h3 { font-size: 22px; }
	.ml_brand_text p { font-size: 14px; }
	.ml_newsletter > p { font-size: 14px; }
	.ml_newsletter_row input { font-size: 14.5px; }
	.ml_newsletter_row button { font-size: 14.5px; }
	.ml_newsletter_msg { font-size: 13px; }
}

/* [2026-08-24 복원] 기부 예정 기관 카드 레이아웃 */
.ml_donate_panel_recipient {
    padding: 19px 18px;
    padding-right: 18px;
    align-items: flex-start;
    background-color: rgba(255, 255, 255, .88);
    background-image: url('../../img/main_source/donate-shelter-support.png');
    background-repeat: no-repeat;
    background-position: right 10px bottom 6px;
    background-size: 155px auto;
}

.ml_donate_panel_recipient .ml_donate_support {
    display: none !important;
}

.ml_donate_panel_recipient .ml_donate_recipient_text {
    position: relative;
    z-index: 1;
    flex: 1 1 100%;
    width: 100%;
    max-width: none;
    min-width: 0;
    gap: 7px;
}

.ml_donate_panel_recipient .ml_donate_recipient_text > b {
    display: block;
    width: 100%;
    max-width: none;
    font-size: 15.5px;
    line-height: 1.35;
}

.ml_donate_recipient_text .ml_donate_partner,
.ml_donate_recipient_text .ml_donate_target_org {
    width: 100%;
    max-width: none;
}

.ml_donate_recipient_text .ml_donate_partner_name {
    display: inline-block;
    font-size: 13px;
    line-height: 1.35;
}

.ml_donate_recipient_text .ml_donate_target_org {
    display: block;
    margin-top: 7px;
    color: #3f5147;
    line-height: 1.35;
}

.ml_donate_recipient_text .ml_donate_target_label {
    display: block;
    font-size: 10px;
    color: #77837c;
    font-weight: 600;
}

.ml_donate_recipient_text .ml_donate_target_name {
    display: block;
    margin-top: 3px;
    font-size: 15px;
    color: #3f5147;
    font-weight: 800;
    line-height: 1.35;
}

.ml_donate_panel_recipient .ml_donate_recipient_text,
.ml_donate_panel_recipient .ml_donate_recipient_text * {
    text-shadow:
        0 0 2px #f8faf8,
        0 0 5px #f8faf8,
        0 0 9px rgba(248, 250, 248, .96),
        1px 1px 2px rgba(248, 250, 248, .9),
        -1px -1px 2px rgba(248, 250, 248, .9);
}

@media (max-width: 768px) {
    .ml_donate_panel_recipient {
        padding: 10px;
        background-position: right 6px bottom 4px;
        background-size: 118px auto;
    }

    .ml_donate_panel_recipient .ml_donate_recipient_text > b {
        font-size: 13px;
    }

    .ml_donate_recipient_text .ml_donate_partner_name {
        font-size: 10.5px;
    }

    .ml_donate_recipient_text .ml_donate_target_label {
        font-size: 8px;
    }

    .ml_donate_recipient_text .ml_donate_target_name {
        font-size: 12px;
    }
}
